summaryrefslogtreecommitdiff
path: root/m4/llvm.m4
blob: 018a7ce064e0513ddaba3185c15de2f6062cb835 (plain)
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
dnl
dnl @synopsis CHECK_LLVM([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
dnl
dnl @summary check LLVM, set up variables:
dnl   LLVM_CFLAGS="`${LLVM_CONFIG_BIN} --cflags`"
dnl   LLVM_CPPFLAGS="`${LLVM_CONFIG_BIN} --cxxflags`"
dnl   LLVM_LDFLAGS="`${LLVM_CONFIG_BIN} --ldflags --libs`"
dnl
dnl Luba Tang <lubatang@gmail.com>


AC_DEFUN([CHECK_LLVM],
[dnl

	AC_ARG_WITH(
		[llvm-config],
		[AS_HELP_STRING([--with-llvm-config[[=PATH]]], 
			[path to llvm-config (by default, searching in $PATH)])],
		[llvm_config_path="${withval}"],
		[llvm_config_path="/usr/"])

	#Set up ${LLVM_CONFIG_BIN}
	AC_MSG_CHECKING(for llvm-config)

	if test -x "${llvm_config_path}" -a ! -d "${llvm_config_path}"; then
		LLVM_CONFIG_BIN=${llvm_config_path}
		AC_MSG_RESULT([yes])
	else
		AC_MSG_RESULT([no])
		llvm_config_path=${PATH}
		if test -d "${LLVM_BINDIR}"; then
			llvm_config_path="${llvm_config_path}:${LLVM_BINDIR}"
		fi
		AC_PATH_PROG(LLVM_CONFIG_BIN, llvm-config, [no], ${llvm_config_path})
		if test "${LLVM_CONFIG_BIN}" = "no"; then
			ifelse([$3], , , [$3])
			AC_MSG_NOTICE([*** The 'llvm-config' is not found!])
			AC_MSG_ERROR([*** Please use  --with-llvm-config option with the full path of 'llvm-config'.])
		fi
	fi

	dnl Use llvm-config to do:
	dnl   1. is the minimum version correct?
	dnl   2. the includedir
	dnl   3. the flags - cflags, cxxflags, cppflags, ldflags
	dnl   4. the libs
	AC_MSG_CHECKING(for llvm - version >= $1)
	cur_version="`${LLVM_CONFIG_BIN} --version`";
	tool_major="`${LLVM_CONFIG_BIN} --version | sed 's/svn//' | sed 's/\([[0-9]]*\).\([[0-9]]*\)/\1/'`"
	tool_minor="`${LLVM_CONFIG_BIN} --version | sed 's/svn//'| sed 's/\([[0-9]]*\).\([[0-9]]*\)/\2/'`"

	require_major="`echo $1 | sed 's/svn//' | sed 's/\([[0-9]]*\).\([[0-9]]*\)/\1/'`"
	require_minor="`echo $1 | sed 's/svn//' | sed 's/\([[0-9]]*\).\([[0-9]]*\)/\2/'`"

	if test "${tool_major}" -lt "${require_major}"; then
		AC_MSG_RESULT([no])
		AC_MSG_ERROR([*** The version of LLVM is too low! (${cur_version}<$1)]) 
	elif test "${tool_major}" -eq "${require_major}"; then
		if test "${tool_minor}" -lt "${require_minor}"; then
			AC_MSG_RESULT([no])
			AC_MSG_ERROR([*** The version of LLVM is too low! (${cur_version}<$1)]) 
		fi
	fi
	AC_MSG_RESULT([yes]) 

	LLVM_CFLAGS="`${LLVM_CONFIG_BIN} --cflags`"
	LLVM_CPPFLAGS="`${LLVM_CONFIG_BIN} --cxxflags`"
	LLVM_LDFLAGS="`${LLVM_CONFIG_BIN} --libs`"
	LLVM_LDFLAGS="${LLVM_LDFLAGS} `${LLVM_CONFIG_BIN} --ldflags`"
	LLVM_LDFLAGS="`echo ${LLVM_LDFLAGS} | sed 's/\n//g'`"
	LLVM_LDFLAGS="`echo ${LLVM_LDFLAGS} | sed 's/-lgtest_main -lgtest//g'`"
	LLVM_VERSION=${tool_major}
	
	AC_SUBST(LLVM_CFLAGS)
	AC_SUBST(LLVM_CPPFLAGS)
	AC_SUBST(LLVM_LDFLAGS)
	AC_SUBST(LLVM_VERSION)
	ifelse([$2], , , [$2])

	AC_CACHE_CHECK([type of operating system we're going to host on],
        		[llvm_cv_platform_type],
			[case $host in
			*-*-aix*)
				llvm_cv_platform_type="Unix" ;;
			*-*-irix*)
				llvm_cv_platform_type="Unix" ;;
			*-*-cygwin*)
				llvm_cv_platform_type="Unix" ;;
			*-*-darwin*)
				llvm_cv_platform_type="Unix" ;;
			*-*-minix*)
				llvm_cv_platform_type="Unix" ;;
			*-*-freebsd*)
				llvm_cv_platform_type="Unix" ;;
			*-*-openbsd*)
				llvm_cv_platform_type="Unix" ;;
			*-*-netbsd*)
				llvm_cv_platform_type="Unix" ;;
			*-*-dragonfly*)
				llvm_cv_platform_type="Unix" ;;
			*-*-hpux*)
				llvm_cv_platform_type="Unix" ;;
			*-*-interix*)
				llvm_cv_platform_type="Unix" ;;
			*-*-linux*)
				llvm_cv_platform_type="Unix" ;;
			*-*-solaris*)
				llvm_cv_platform_type="Unix" ;;
			*-*-auroraux*)
				llvm_cv_platform_type="Unix" ;;
			*-*-win32*)
				llvm_cv_platform_type="Win32" ;;
			*-*-mingw*)
				llvm_cv_platform_type="Win32" ;;
			*-*-haiku*)
				llvm_cv_platform_type="Unix" ;;
			*-unknown-eabi*)
				llvm_cv_platform_type="Unix" ;;
			*-unknown-elf*)
				llvm_cv_platform_type="Unix" ;;
			*)
				llvm_cv_platform_type="Unknown" ;;
			esac])

	dnl Set the "LLVM_ON_*" variables based on llvm_cv_llvm_cv_platform_type
	dnl This is used by lib/Support to determine the basic kind of implementation
	dnl to use.
	case $llvm_cv_platform_type in
	Unix)
		AC_DEFINE([LLVM_ON_UNIX],[1],[Define if this is Unixish platform])
		AC_SUBST(LLVM_ON_UNIX,[1])
		AC_SUBST(LLVM_ON_WIN32,[0])
	;;
	Win32)
		AC_DEFINE([LLVM_ON_WIN32],[1],[Define if this is Win32ish platform])
		AC_SUBST(LLVM_ON_UNIX,[0])
		AC_SUBST(LLVM_ON_WIN32,[1])
	;;
	esac
])