source: configure.ac@ 08ce416

ADT arm-eh ast-experimental enum forall-pointer-decay jacob/cs343-translation new-ast-unique-expr pthread-emulation qualifiedEnum stuck-waitfor-destruct
Last change on this file since 08ce416 was 08ce416, checked in by Thierry Delisle <tdelisle@…>, 5 years ago

Changed configure to use new-ast by default.
Ast options no longer pushed to libcfa (that didn't make sense).
Long Run tests and benchmark no longer distributed.
Added missing source to distribution.
Added pybin to distribution.

  • Property mode set to 100644
File size: 10.2 KB
Line 
1# -*- Autoconf -*-
2# Process this file with autoconf to produce a configure script.
3
4AC_PREREQ([2.68])
5AC_INIT([cfa-cc],[1.0.0],[cforall@plg.uwaterloo.ca])
6AC_CONFIG_AUX_DIR([automake])
7AC_CONFIG_MACRO_DIRS([automake])
8AC_CONFIG_HEADERS([config.h:src/config.h.in])
9AM_SILENT_RULES([yes])
10
11m4_include([tools/build/cfa.m4])
12
13# don't use the default CFLAGS as they unconditonnaly add -O2
14: ${CFLAGS=""}
15: ${CXXFLAGS=""}
16
17AM_INIT_AUTOMAKE([subdir-objects])
18
19# Allow program name tansformation
20# will fill program_transform_name with appropriate sed regex
21AC_ARG_PROGRAM
22
23#==============================================================================
24#Trasforming cc1 will break compilation
25M4CFA_PROGRAM_NAME
26
27#==============================================================================
28# New AST toggling support
29AH_TEMPLATE([CFA_USE_NEW_AST],[Sets whether or not to use the new-ast, this is adefault value and can be overrided by --old-ast and --new-ast])
30DEFAULT_NEW_AST="False"
31AC_ARG_ENABLE(new-ast,
32 [ --enable-new-ast whether or not to use new ast as the default AST algorithm],
33 [case "${enableval}" in
34 yes) newast=true ; DEFAULT_NEW_AST="True" ;;
35 no) newast=false; DEFAULT_NEW_AST="False" ;;
36 *) AC_MSG_ERROR([bad value ${enableval} for --enable-new-ast]) ;;
37 esac],[newast=true])
38AC_DEFINE_UNQUOTED([CFA_USE_NEW_AST], $newast)
39AC_SUBST(DEFAULT_NEW_AST)
40
41#==============================================================================
42# version information
43
44rm -f version
45echo ${PACKAGE_VERSION} > version # file containing version number for other tools
46chmod ugo-w version
47ver_major=`cut -d '.' -f1 version` # subdivide version number into components at periods
48ver_minor=`cut -d '.' -f2 version`
49ver_patch=`cut -d '.' -f3 version`
50ver_build=`cut -d '.' -f4 version`
51
52# AC_SUBST([CONFIG_STATUS_DEPENDENCIES], ['$(top_srcdir)/version'])
53AC_DEFINE_UNQUOTED(CFA_VERSION_MAJOR, ${ver_major}, [Major version number.])
54AC_DEFINE_UNQUOTED(CFA_VERSION_MINOR, ${ver_minor}, [Minor version number.])
55AC_DEFINE_UNQUOTED(CFA_VERSION_PATCH, ${ver_patch}, [Patch version number.])
56AC_DEFINE_UNQUOTED(CFA_VERSION_BUILD, ${ver_build}, [Build version number.])
57AC_DEFINE_UNQUOTED(CFA_VERSION_SHORT, ["${ver_major}"], [Major])
58AC_DEFINE_UNQUOTED(CFA_VERSION, ["${ver_major}.${ver_minor}"], [Major.Minor])
59AC_DEFINE_UNQUOTED(CFA_VERSION_LONG, ["${ver_major}.${ver_minor}.${ver_patch}"], [Major.Minor.Patch])
60AC_DEFINE_UNQUOTED(CFA_VERSION_FULL, ["${ver_major}.${ver_minor}.${ver_patch}.${ver_build}"], [Major.Minor.Patch.Build])
61
62#==============================================================================
63# HACK to be able to use conditionnals inside makefiles
64DOifskipcompile='ifeq ($(skipcompile),yes)
65else'
66AC_SUBST([DOifskipcompile])
67AM_SUBST_NOTMAKE([DOifskipcompile])
68
69DOendif='endif'
70AC_SUBST([DOendif])
71AM_SUBST_NOTMAKE([DOendif])
72
73#==============================================================================
74# distcc support
75
76AC_ARG_ENABLE(distcc,
77 [ --enable-distcc whether or not to enable distributed compilation],
78 enable_distcc=$enableval, enable_distcc=no)
79
80AC_ARG_WITH(bwlimit,
81 [ --with-bwlimit=RATE RATE the maximum rate at which rsync will be limited when using distributed builds],
82 [], [])
83
84AM_CONDITIONAL([ENABLE_DISTCC], [test x$enable_distcc = xyes])
85HAS_DISTCC="False"
86
87if test x$enable_distcc = xyes; then
88 CXX="distcc ${CXX}"
89 LD="distcc ${LD} -lstdc++"
90 HAS_DISTCC="True"
91 echo "Enabling distributed builds"
92fi
93
94AC_SUBST(CXX)
95AC_SUBST(LD)
96AC_SUBST(HAS_DISTCC)
97
98#==============================================================================
99# Installation paths
100M4CFA_PARSE_PREFIX
101
102#==============================================================================
103# Create variables for commonly used targets
104
105TOP_SRCDIR="$(readlink -m $ac_confdir/)/"
106TOP_BUILDDIR="$(readlink -m $ac_pwd/)/"
107
108AC_DEFINE_UNQUOTED(TOP_SRCDIR, "$TOP_SRCDIR", [Top src directory])
109AC_DEFINE_UNQUOTED(TOP_BUILDDIR, "$TOP_BUILDDIR", [Top build directory])
110
111DRIVER_DIR=${TOP_BUILDDIR}driver/
112CFACC=${DRIVER_DIR}cfa
113CFACC_INSTALL=${CFA_BINDIR}${CFA_NAME}
114CFACPP=${DRIVER_DIR}cfa-cpp
115AC_SUBST(DRIVER_DIR)
116AC_SUBST(CFACC)
117AC_SUBST(CFACC_INSTALL)
118AC_SUBST(CFACPP)
119
120#==============================================================================
121# Flag variables needed to build in tree
122LIBCFA_SRC='${TOP_SRCDIR}/libcfa/src'
123BUILD_IN_TREE_FLAGS="-XCFA -t -B${DRIVER_DIR}"
124AC_SUBST(BUILD_IN_TREE_FLAGS)
125
126#==============================================================================
127# handle the list of hosts to build for
128for var in $ac_configure_args
129do
130 #strip quotes surrouding values
131 case $var in
132 # skip cross compilation related arguments
133 \'--host=*) ;; \'host_alias=*) ;; \'--build=*) ;; \'build_alias=*) ;; \'--target=*) ;; \'target_alias=*) ;;
134
135 # skip the target hosts
136 \'--with-target-hosts=*) ;;
137
138 # skip gprofiler for libcfa
139 \'--enable-gprofiler=*) ;;
140 \'--disable-gprofiler) ;;
141
142 # skip the target hosts
143 \'--enable-new-ast=*) ;;
144 \'--disable-new-ast) ;;
145
146 # skip this, it only causes problems
147 \'--srcdir=*) ;;
148
149 # append all other arguments to the sub configure arguments
150 *) LIBCFA_GENERAL_ARGS="${LIBCFA_GENERAL_ARGS} $var";;
151 esac
152done
153
154#==============================================================================
155# handle the list of hosts to build for
156AC_CANONICAL_BUILD
157AC_CANONICAL_HOST
158
159if ! test "$host_cpu" = "$build_cpu"; then
160 case $host_cpu in
161 i386)
162 HOST_FLAGS="-m32"
163 ;;
164 i686)
165 HOST_FLAGS="-m32"
166 ;;
167 x86_64)
168 HOST_FLAGS="-m64"
169 ;;
170 esac
171fi
172AC_SUBST(HOST_FLAGS)
173
174default_target="${host_cpu}:debug, ${host_cpu}:nodebug"
175AC_ARG_WITH(target-hosts,
176 [ --with-target-hosts=HOSTS HOSTS comma seperated list of hosts to build for, format ARCH:[debug|nodebug|nolib]],
177 target_hosts=$withval, target_hosts=${default_target})
178
179AC_ARG_ENABLE(gprofiler,
180 [ --enable-gprofiler whether or not to enable gprofiler tools (if available)],
181 enable_gprofiler=$enableval, enable_gprofiler=yes)
182
183AC_ARG_ENABLE(demangler,
184 [ --enable-demangler whether or not to build the demangler (executable and library)],
185 enable_demangler=$enableval, enable_demangler=yes)
186
187AC_SUBST(TARGET_HOSTS, ${target_hosts})
188
189LIBCFA_PATHS="DRIVER_DIR=${DRIVER_DIR}"
190
191for i in $(echo $target_hosts | sed "s/,/ /g")
192do
193 # call your procedure/other scripts here below
194 arch_name=$(echo $i | sed -r "s/:(.*)//g")
195 lib_config=$(echo $i | sed -r "s/(.*)://g")
196
197 case $lib_config in
198 "nodebug") ;;
199 "debug") ;;
200 "nolib") ;;
201 "profile") ;;
202 *)
203 >&2 echo "Configuration must be 'debug', 'nodebug' or 'nolib'"
204 exit 1
205 ;;
206 esac
207
208 M4CFA_CANNON_CPU([${arch_name}])
209 lib_arch=${cannon_arch_name}
210 lib_dir="libcfa/${lib_arch}-${lib_config}"
211
212 LIBCFA_TARGET_DIRS="${LIBCFA_TARGET_DIRS} ${lib_dir}"
213 LIBCFA_1TARGET_DIR="${lib_dir}"
214 LIBCFA_TARGET_MAKEFILES="${LIBCFA_TARGET_MAKEFILES} ${lib_dir}/Makefile"
215
216 mkdir -p ${lib_dir}
217 echo -n "${LIBCFA_GENERAL_ARGS} " > ${lib_dir}/config.data
218 echo -n "${LIBCFA_PATHS} " >> ${lib_dir}/config.data
219 echo -n "ARCHITECTURE=${lib_arch} " >> ${lib_dir}/config.data
220 echo -n "CONFIGURATION=${lib_config} " >> ${lib_dir}/config.data
221 echo -n "CFA_VERSION=${ver_major}:${ver_minor}:${ver_patch}" >> ${lib_dir}/config.data
222done
223
224AC_SUBST(LIBCFA_TARGET_DIRS)
225AC_SUBST(LIBCFA_1TARGET_DIR)
226AC_SUBST(LIBCFA_TARGET_MAKEFILES)
227
228M4CFA_CANNON_CPU([${host_cpu}])
229AC_DEFINE_UNQUOTED(CFA_DEFAULT_CPU, "$cannon_arch_name", [Default cpu to use if neither -m32 or -m64 are defined.])
230AC_DEFINE_UNQUOTED(CFA_64_CPU, "x64", [CPU to use if the -m64 flags is given.])
231AC_DEFINE_UNQUOTED(CFA_32_CPU, "x86", [CPU to use if the -m32 flags is given.])
232
233#==============================================================================
234# CAFLAGS
235AC_DEFINE_UNQUOTED(CFA_FLAGS, "${CFAFLAGS}", [compilation flags for cfa libraries and test programs.])
236AC_SUBST(CFA_FLAGS, ${CFAFLAGS})
237
238#==============================================================================
239# Checks for programs.
240AC_PROG_CXX
241AC_PROG_CC
242AM_PROG_AS
243# These are often not installed and people miss seeing the "no", so stop the configure.
244AC_PROG_YACC
245if test "${YACC}" = "yacc" ; then echo "Error: bison required." ; exit 1 ; fi
246AC_PROG_LEX
247if test "${LEX}" = "lex" ; then echo "Error: flex required." ; exit 1 ; fi
248AC_PROG_LIBTOOL
249AC_PROG_INSTALL
250
251# Checks for libraries.
252AC_CHECK_LIB([fibre], [Fibre::yield], [HAVE_LIBFIBRE=1], [HAVE_LIBFIBRE=0])
253AM_CONDITIONAL([WITH_LIBFIBRE], [test "$HAVE_LIBFIBRE" -eq 1])
254
255AC_CHECK_LIB([profiler], [ProfilingIsEnabledForAllThreads], [HAVE_LIBPROFILER=1], [HAVE_LIBPROFILER=0])
256AM_CONDITIONAL([WITH_LIBPROFILER], [test "x$enable_gprofiler" = "xyes" -a "$HAVE_LIBPROFILER" -eq 1])
257
258AC_CHECK_LIB([tcmalloc], [malloc], [HAVE_LIBTCMALLOC=1], [HAVE_LIBTCMALLOC=0])
259AM_CONDITIONAL([WITH_LIBTCMALLOC], [test "x$enable_gprofiler" = "xyes" -a "$HAVE_LIBTCMALLOC" -eq 1])
260
261# conditionnally build the demangler
262if test "x$enable_demangler" == xyes; then
263 LIBDEMANGLE="libdemangle.a"
264 DEMANGLER="demangler"
265else
266 LIBDEMANGLE=""
267 DEMANGLER=""
268fi
269AC_SUBST([LIBDEMANGLE])
270AC_SUBST([DEMANGLER])
271
272# Checks for header files.
273AC_CHECK_HEADERS([libintl.h malloc.h unistd.h], [], [echo "Error: Missing required header"; exit 1])
274
275# Checks for typedefs, structures, and compiler characteristics.
276AC_CHECK_TYPES([_Float32], AC_DEFINE([HAVE_KEYWORDS_FLOATXX], [], [Have keywords _FloatXX.]), [], [[]])
277
278# Checks for compiler flags.
279M4CFA_CHECK_COMPILE_FLAG([-Wcast-function-type], AC_DEFINE([HAVE_CAST_FUNCTION_TYPE], [], [Have compiler warning cast-function-type.]))
280
281#==============================================================================
282# backend compiler implementation
283AC_DEFINE_UNQUOTED(CFA_BACKEND_CC, "${CC}", [Backend compiler to use.])
284AC_SUBST(CFA_BACKEND_CC)
285
286#==============================================================================
287AC_CONFIG_FILES([
288 Makefile
289 driver/Makefile
290 src/Makefile
291 libcfa/Makefile:libcfa/Makefile.dist.in
292 tests/Makefile
293 tools/Makefile
294 tools/prettyprinter/Makefile
295 ])
296
297# Some of our makefile don't need to be distributed
298AM_CONDITIONAL([CFORALL_DISTRIBUTE], [test -e $TOP_SRCDIR/autogen.sh])
299AM_COND_IF([CFORALL_DISTRIBUTE],
300 [AC_CONFIG_FILES([
301 longrun_tests/Makefile
302 benchmark/Makefile
303 benchmark/io/http/Makefile
304 ])])
305
306AC_CONFIG_LINKS([tests/test.py:tests/test.py])
307
308AC_OUTPUT(tests/config.py)
309
310# Final text
311AC_MSG_RESULT(Cforall configuraton completed. Type "make -j 8 install".)
Note: See TracBrowser for help on using the repository browser.