~ubuntu-branches/ubuntu/trusty/haskell-llvm-base/trusty-proposed

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
AC_INIT([Haskell LLVM FFI bindings], [3.2.0.0], [bos@serpentine.com], [llvm-base])

AC_CONFIG_SRCDIR([LLVM/FFI/Core.hsc])

AC_CONFIG_FILES([llvm-base.buildinfo])

AC_CONFIG_HEADERS([include/hs_llvm_config.h])

AC_PROG_CXX

AC_LANG(C++)

AC_ARG_WITH(compiler,
  [AS_HELP_STRING([--with-compiler],
    [use the given Haskell compiler])],
  compiler="$withval",
  compiler=ghc)dnl

AC_ARG_WITH(llvm_prefix,
  [AS_HELP_STRING([--with-llvm-prefix],
    [use the version of LLVM at the given location])],
  llvm_prefix="$withval",
  llvm_prefix="$prefix")dnl

AC_ARG_WITH(llvm_bindir,
  [AS_HELP_STRING([--with-llvm-bindir],
    [use LLVM binaries at the given location])],
  llvm_bindir="$withval",
  llvm_bindir="$llvm_prefix/bin")dnl

AC_PATH_PROGS(llvm_config, [llvm-config],
  [AC_MSG_ERROR(could not find llvm-config in $llvm_bindir)],
  ["$llvm_bindir:$PATH"])
  
dnl * Choose target platform
dnl
dnl We don't use the standard autoconf macros for this, but instead
dnl ask GHC what platform it is for.  Why?  We need to generate a library
dnl matching the compiler.
dnl NB: This code is from GHC's configure (where the corresponding code for
dnl guessing host and build variables can be found, too)

dnl Guess target platform if necessary.
m4_divert_once([HELP_CANON],
[[
System types:
  --target=TARGET   configure for building compilers for TARGET [guessed]]])dnl

if test "$target" = ""
then
    if test "${compiler}" != ""
    then
        target=`${compiler} +RTS --info | grep '^ ,("Target platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'`
        echo "Target platform inferred as: $target"
    else
        echo "Can't work out target platform"
        exit 1
    fi
fi

dnl Determine target-specific options
dnl This is important as Snow Leopard (Mac OS X 10.6) defaults to generating
dnl 64-bit code.
case $target in
i386-apple-darwin)
    TARGET_CPPFLAGS="-m32"
    TAGRET_LDFLAGS="-m32"
    ;;
x86_64-apple-darwin)
    TARGET_CPPFLAGS="-m64"
    TAGRET_LDFLAGS="-m64"
    ;;
esac

llvm_version="`$llvm_config --version`"
AC_MSG_RESULT(found LLVM version $llvm_version)
llvm_cppflags="`$llvm_config --cppflags`"
llvm_includedir="`$llvm_config --includedir`"
llvm_ldflags="`$llvm_config --ldflags`"
llvm_cflags="`$llvm_config --cflags` `$llvm_config --cxxflags`"
llvm_all_libs="`$llvm_config --libs all`"
llvm_target="`$llvm_config --libs engine | sed 's/.*LLVM\(.[[^ ]]*\)CodeGen.*/\1/'`"

CPPFLAGS="$llvm_cppflags $CPPFLAGS $TARGET_CPPFLAGS"
LDFLAGS="$llvm_ldflags $LDFLAGS $TARGET_LDFLAGS"

llvm_extra_ghci_libs=""

AC_SEARCH_LIBS([LLVMModuleCreateWithName],[LLVM-2.7 LLVM-2.8 LLVM-2.9 LLVM-3.0 LLVM-3.1 LLVM-3.2 LLVM-3.3]) 
if test "$ac_cv_search_LLVMModuleCreateWithName" = "no"; then
   llvm_all_libs="`$llvm_config --libs all`"
else
   llvm_extra_ghci_libs="LLVM-$llvm_version"
   llvm_all_libs="$LIBS"
fi

dnl We need to separate libraries that need to be linked from other linker options.
llvm_extra_libs=""
llvm_extra_libdirs=""
llvm_ldoptions=""
for opt in $llvm_all_libs $llvm_ldflags; do
  case $opt in
    -l*) llvm_extra_libs="$llvm_extra_libs `echo $opt | sed 's/^-l//'`";;
    -L*) llvm_extra_libdirs="$llvm_extra_libdirs `echo $opt | sed 's/^-L//'`";;
    *)   llvm_ldoptions="$llvm_ldoptions $opt";;
  esac
done

AC_CHECK_HEADERS([llvm-c/Core.h], [],
  [AC_MSG_ERROR(could not find LLVM C bindings)])

AC_CHECK_HEADERS([llvm/ADT/StringRef.h])
AC_CHECK_HEADERS([llvm/Support/DynamicLibrary.h], [], [],
[#ifdef HAVE_LLVM_ADT_STRINGREF_H
# include <llvm/ADT/StringRef.h>
#endif])

save_LIBS="$LIBS"
LIBS="-lLLVMSupport -lpthread -ldl $LIBS"

AC_CHECK_LIB(LLVMCore, LLVMModuleCreateWithName, [], [])
if test "$ac_cv_lib_LLVMCore_LLVMModuleCreateWithName" = "no"; then
  unset ac_cv_lib_LLVMCore_LLVMModuleCreateWithName
  LIBS="-lLLVMSupport $save_LIBS"
  AC_CHECK_LIB(LLVMCore, LLVMModuleCreateWithName, [],
    [AC_MSG_ERROR(could not find LLVM C bindings)])
fi

llvm_num_version="`echo $llvm_version | sed 's/svn$//' | tr . 0`"
AC_DEFINE_UNQUOTED([HS_LLVM_VERSION], [$llvm_num_version],
  [Define to the version of LLVM, e.g. 209 for 2.9.])

AC_SUBST([llvm_num_version])
AC_SUBST([llvm_version])
AC_SUBST([llvm_cppflags])
AC_SUBST([llvm_cflags])
AC_SUBST([llvm_extra_libs])
AC_SUBST([llvm_extra_libdirs])
AC_SUBST([llvm_extra_ghci_libs])
AC_SUBST([llvm_target])
AC_SUBST([llvm_includedir])
AC_SUBST([llvm_ldoptions])

AC_OUTPUT