SCM Repository
Annotation of /branches/pure-cfg/configure.ac
Parent Directory
|
Revision Log
Revision 1356 - (view) (download)
1 : | jhr | 3 | dnl Process this file with autoconf to produce a configure script. |
2 : | dnl | ||
3 : | dnl COPYRIGHT (c) 2010 The Diderot Project | ||
4 : | dnl All rights reserved. | ||
5 : | dnl | ||
6 : | |||
7 : | dnl NOTE: MANTICORE_DIST_VERSION is an M4 variable defined in config/aclocal.m4 | ||
8 : | dnl | ||
9 : | AC_INIT(diderot,0.1,) | ||
10 : | |||
11 : | AC_PREREQ(2.60) | ||
12 : | jhr | 436 | AC_COPYRIGHT([[COPYRIGHT (c) 2010 The Diderot Project (http://diderot-language.cs.uchicago.edu)]]) |
13 : | jhr | 123 | AC_CONFIG_SRCDIR(src/dnorm/dnorm.c) |
14 : | jhr | 3 | AC_CONFIG_AUX_DIR(config) |
15 : | AC_CONFIG_MACRO_DIR(config) | ||
16 : | jhr | 123 | |
17 : | jhr | 3 | dnl |
18 : | dnl include additional macros | ||
19 : | dnl | ||
20 : | sinclude(config/acx_pthread.m4) | ||
21 : | jhr | 123 | sinclude(config/check_smlnj.m4) |
22 : | sinclude(config/check_smlnj_heap_suffix.m4) | ||
23 : | jhr | 1171 | sinclude(config/ax_check_framework.m4) |
24 : | jhr | 3 | |
25 : | dnl | ||
26 : | jhr | 123 | dnl get host information |
27 : | jhr | 3 | dnl |
28 : | AC_CANONICAL_HOST | ||
29 : | |||
30 : | dnl check for standard programs | ||
31 : | dnl | ||
32 : | jhr | 1164 | AC_PROG_CC([clang gcc cc]) |
33 : | jhr | 3 | AC_PROG_CPP |
34 : | AC_PROG_INSTALL | ||
35 : | AC_PROG_MAKE_SET | ||
36 : | |||
37 : | jhr | 671 | dnl check for c99 support |
38 : | jhr | 123 | dnl |
39 : | jhr | 671 | AC_PROG_CC_C99 |
40 : | if test x"$ac_cv_prog_cc_c99" = xno ; then | ||
41 : | AC_MSG_ERROR([Diderot requires c99 support]) | ||
42 : | fi | ||
43 : | |||
44 : | dnl extra C compiler options | ||
45 : | dnl | ||
46 : | jhr | 1356 | CFLAGS="" |
47 : | jhr | 1094 | CFLAG_M64="-m64" |
48 : | jhr | 1164 | CFLAGS_BASE="-Wformat -Wreturn-type -Wuninitialized" |
49 : | jhr | 1094 | AC_SUBST(CFLAG_M64) |
50 : | jhr | 1164 | AC_SUBST(CFLAGS_BASE) |
51 : | jhr | 671 | |
52 : | dnl | ||
53 : | jhr | 1222 | dnl check for pthreads support |
54 : | dnl | ||
55 : | ACX_PTHREAD() | ||
56 : | |||
57 : | dnl | ||
58 : | jhr | 676 | dnl Look for NVIDIA's nvcc compiler |
59 : | dnl | ||
60 : | jhr | 1171 | AC_MSG_NOTICE([checking for CUDA and nvcc]) |
61 : | AC_PATH_PROG(NVCC, nvcc, no, $PATH) | ||
62 : | if test x"$NVCC" = xno ; then | ||
63 : | jhr | 679 | AC_MSG_WARN([nvcc not found]) |
64 : | jhr | 1171 | CUDA_ENABLED=false |
65 : | NVCC=":" | ||
66 : | jhr | 676 | else |
67 : | AC_MSG_RESULT([$NVCC]) | ||
68 : | jhr | 1171 | CUDA_ENABLED=true |
69 : | jhr | 676 | fi |
70 : | AC_SUBST(NVCC) | ||
71 : | jhr | 1171 | AC_SUBST(CUDA_ENABLED) |
72 : | jhr | 676 | |
73 : | dnl | ||
74 : | jhr | 1171 | dnl check for OpenCL support |
75 : | dnl | ||
76 : | jhr | 1222 | CL_LIBS="none" |
77 : | jhr | 1171 | case "$host_os" in |
78 : | darwin*) # On Mac OS X we check for installed frameworks | ||
79 : | jhr | 1222 | AX_CHECK_FRAMEWORK([OpenCL], [CL_LIBS="-framework OpenCL"], []) |
80 : | jhr | 1171 | ;; |
81 : | *) | ||
82 : | jhr | 1222 | AC_CHECK_LIB([OpenCL],[clGetPlatformIDs],[CL_LIBS="-lOpenCL"]) |
83 : | jhr | 1171 | ;; |
84 : | esac | ||
85 : | jhr | 1222 | if test x"$CL_LIBS" = xnone ; then |
86 : | jhr | 1171 | AC_MSG_WARN([no OpenCL library found]) |
87 : | jhr | 1222 | CL_ENABLED=false |
88 : | CL_VERSION=0 | ||
89 : | jhr | 1171 | else |
90 : | jhr | 1222 | CL_ENABLED=true |
91 : | AC_CHECK_HEADERS([CL/cl.h OpenCL/cl.h]) | ||
92 : | # check the cl.h header for which version of OpenCL is supported | ||
93 : | AC_LANG([C]) | ||
94 : | AC_LINK_IFELSE([AC_LANG_PROGRAM([[ | ||
95 : | #include <stdio.h> | ||
96 : | # ifdef HAVE_CL_CL_H | ||
97 : | # include <CL/cl.h> | ||
98 : | # elif defined(HAVE_OPENCL_CL_H) | ||
99 : | # include <OpenCL/cl.h> | ||
100 : | # else | ||
101 : | # error no cl.h | ||
102 : | # endif]], | ||
103 : | [[#if defined(CL_VERSION_1_1) | ||
104 : | printf("11000\n"); | ||
105 : | #elif defined(CL_VERSION_1_0) | ||
106 : | printf("10000\n"); | ||
107 : | #else | ||
108 : | printf("0\n"); | ||
109 : | #endif | ||
110 : | ]])], | ||
111 : | [CL_VERSION=`./conftest$EXEEXT`], [CL_VERSION=0]) | ||
112 : | # substitutions | ||
113 : | AC_SUBST(CL_LIBS) | ||
114 : | jhr | 1171 | fi |
115 : | jhr | 1222 | AC_SUBST(CL_ENABLED) |
116 : | AC_SUBST(CL_VERSION) | ||
117 : | jhr | 1171 | |
118 : | dnl | ||
119 : | jhr | 1196 | dnl check for various library routines etc. |
120 : | dnl | ||
121 : | AC_CHECK_FUNCS(posix_memalign) | ||
122 : | if test x"$ac_cv_func_posix_memalign" != xyes ; then | ||
123 : | AC_CHECK_FUNCS(memalign) | ||
124 : | if test x"$ac_cv_func_posix_memalign" != xyes ; then | ||
125 : | AC_CHECK_FUNCS(valloc) | ||
126 : | fi | ||
127 : | fi | ||
128 : | |||
129 : | AC_CHECK_FUNCS(mach_absolute_time) | ||
130 : | AC_CHECK_TYPES([struct timespec]) | ||
131 : | jhr | 1238 | AC_CHECK_FUNCS(pthread_barrier_init) |
132 : | jhr | 1196 | |
133 : | dnl | ||
134 : | dnl check for clock_gettime. On Linux, this requires librt. | ||
135 : | dnl | ||
136 : | save_LIBS=$LIBS | ||
137 : | LIBS="-lrt $LIBS" | ||
138 : | AC_MSG_CHECKING([for clock_gettime]) | ||
139 : | AC_LINK_IFELSE( | ||
140 : | [AC_LANG_PROGRAM( | ||
141 : | [[#include <time.h>]], | ||
142 : | [[struct timespec t; clock_gettime(CLOCK_REALTIME, &t); ]])], | ||
143 : | [ ac_cv_func_clock_gettime=yes; | ||
144 : | AC_DEFINE(HAVE_CLOCK_GETTIME, [1], [is clock_gettime available?])], | ||
145 : | [ac_cv_func_clock_gettime=no]) | ||
146 : | AC_MSG_RESULT($ac_cv_func_clock_gettime) | ||
147 : | if test "$ac_cv_func_clock_gettime" = "no" ; then | ||
148 : | LIBS=$save_LIBS | ||
149 : | fi | ||
150 : | |||
151 : | AC_CHECK_FUNCS(pthread_getcpuclockid) | ||
152 : | AC_CHECK_FUNCS(sigtimedwait nanosleep) | ||
153 : | |||
154 : | dnl | ||
155 : | dnl check for sched_setaffinity | ||
156 : | dnl | ||
157 : | AC_CHECK_FUNCS(sched_setaffinity) | ||
158 : | |||
159 : | dnl | ||
160 : | dnl check for pthread_setaffinity_np | ||
161 : | dnl | ||
162 : | save_LIBS=$LIBS | ||
163 : | save_CFLAGS=$CFLAGS | ||
164 : | LIBS="$PTHREAD_LIBS $LIBS" | ||
165 : | CFLAGS="$PTHREAD_CFLAGS $CFLAGS" | ||
166 : | AC_MSG_CHECKING([for pthread_setaffinity_np]) | ||
167 : | AC_LINK_IFELSE( | ||
168 : | [AC_LANG_PROGRAM( | ||
169 : | [[#include <pthread.h>]], | ||
170 : | [[cpu_set_t s; pthread_setaffinity_np(pthread_self(), sizeof(s), &s); ]])], | ||
171 : | [ ac_cv_func_pthread_setaffinity_np=yes; | ||
172 : | AC_DEFINE(HAVE_PTHREAD_SETAFFINITY_NP, [1], [is pthread_setaffinity_np available?])], | ||
173 : | [ac_cv_func_pthread_setaffinity_np=no]) | ||
174 : | AC_MSG_RESULT($ac_cv_func_pthread_setaffinity_np) | ||
175 : | LIBS=$save_LIBS | ||
176 : | CFLAGS=$save_CFLAGS | ||
177 : | |||
178 : | dnl | ||
179 : | dnl check for Linux NUMA support (libnuma) | ||
180 : | dnl | ||
181 : | AC_CHECK_LIB(numa,numa_available) | ||
182 : | jhr | 1217 | if test "$ac_cv_lib_numa_numa_available" = "yes" ; then |
183 : | PTHREAD_LIBS="$PTHREAD_LIBS -lnuma" | ||
184 : | fi | ||
185 : | jhr | 1196 | |
186 : | dnl check for /proc/cpuinfo | ||
187 : | dnl | ||
188 : | AC_CHECK_FILES(/proc/cpuinfo) | ||
189 : | |||
190 : | dnl | ||
191 : | jhr | 989 | dnl OS-specific linking issues |
192 : | jhr | 123 | dnl |
193 : | jhr | 989 | LD_NEEDS_RPATH=false; |
194 : | jhr | 997 | LIBM="" |
195 : | jhr | 123 | case "$host_os" in |
196 : | jhr | 989 | darwin*) # On Mac OS X we check for the presence of macports and/or fink |
197 : | jhr | 123 | if test -x /opt/local/bin/port ; then |
198 : | HAS_MACPORTS=yes | ||
199 : | else | ||
200 : | HAS_MACPORTS=no | ||
201 : | fi | ||
202 : | if test -x /sw/bin/fink ; then | ||
203 : | HAS_FINK=yes | ||
204 : | else | ||
205 : | HAS_FINK=no | ||
206 : | fi | ||
207 : | ;; | ||
208 : | jhr | 999 | linux*) # On Linux we include the -rpath option to pick up dynamically-loaded libraries |
209 : | jhr | 989 | LD_NEEDS_RPATH=true |
210 : | jhr | 997 | LIBM="-lm" |
211 : | jhr | 989 | ;; |
212 : | jhr | 123 | esac |
213 : | jhr | 3 | |
214 : | jhr | 123 | if test x"$HAS_MACPORTS" = xyes ; then |
215 : | LDPATHS="-L/opt/local/lib" | ||
216 : | elif test x"$HAS_FINK" = xyes ; then | ||
217 : | LDPATHS="-L/sw/lib" | ||
218 : | else | ||
219 : | LDPATHS="" | ||
220 : | fi | ||
221 : | AC_SUBST(LDPATHS) | ||
222 : | jhr | 989 | AC_SUBST(LD_NEEDS_RPATH) |
223 : | jhr | 997 | AC_SUBST(LIBM) |
224 : | jhr | 123 | |
225 : | dnl | ||
226 : | dnl get the path to the TEEM installation | ||
227 : | dnl | ||
228 : | AC_ARG_WITH(teem, | ||
229 : | AC_HELP_STRING([--with-teem=<path>], [specify path to teem installation]), | ||
230 : | [ac_cv_use_teem=$withval], [ac_cv_use_teem=no]) | ||
231 : | if test x"$ac_cv_use_teem" = xno ; then | ||
232 : | TEEM_DIR=none | ||
233 : | else | ||
234 : | AC_MSG_CHECKING([path to teem ($ac_cv_use_teem)]) | ||
235 : | case $ac_cv_use_teem in | ||
236 : | /*) ;; | ||
237 : | *) AC_MSG_ERROR([path to teem must be absolute]) ;; | ||
238 : | esac | ||
239 : | if test -x $ac_cv_use_teem ; then | ||
240 : | TEEM_DIR=$ac_cv_use_teem | ||
241 : | AC_MSG_RESULT([ okay]) | ||
242 : | else | ||
243 : | TEEM_DIR=none | ||
244 : | AC_MSG_RESULT([ invalid]) | ||
245 : | fi | ||
246 : | fi | ||
247 : | if test x"$TEEM_DIR" = xnone ; then | ||
248 : | AC_MSG_ERROR([unable to find teem]) | ||
249 : | fi | ||
250 : | AC_SUBST(TEEM_DIR) | ||
251 : | |||
252 : | dnl ******************** SML/NJ configuration ******************** | ||
253 : | dnl | ||
254 : | |||
255 : | dnl check that we have a compatible version of SML/NJ | ||
256 : | dnl | ||
257 : | CHECK_SMLNJ([AC_MSG_ERROR([unable to find SML/NJ installation; check your PATH or set SMLNJ_CMD])]) | ||
258 : | if test $SMLNJ_MAJOR_VERSION -lt 110 \ | ||
259 : | jhr | 1215 | -o $SMLNJ_MINOR_VERSION -lt 73 |
260 : | jhr | 123 | then |
261 : | jhr | 1215 | AC_MSG_ERROR([installation requires SML/NJ version 110.73+]) |
262 : | jhr | 123 | fi |
263 : | AC_SUBST(SMLNJ_VERSION) | ||
264 : | |||
265 : | dnl determine the heap-image suffix | ||
266 : | dnl | ||
267 : | CHECK_SMLNJ_HEAP_SUFFIX([ | ||
268 : | AC_MSG_ERROR([unsupported configuration ${host_cpu}-${host_os}])]) | ||
269 : | |||
270 : | dnl look for ml-makedepend | ||
271 : | dnl | ||
272 : | AC_MSG_CHECKING([for ml-makedepend]) | ||
273 : | tmpPATH="$SMLNJ_PATH:$PATH" | ||
274 : | AC_PATH_PROG(ML_MAKEDEPEND, ml-makedepend, ":", $tmpPATH) | ||
275 : | if test $ML_MAKEDEPEND = none ; then | ||
276 : | AC_MSG_ERROR([ml-makedepend not found]) | ||
277 : | else | ||
278 : | AC_MSG_RESULT([$ML_MAKEDEPEND]) | ||
279 : | fi | ||
280 : | AC_SUBST(ML_MAKEDEPEND) | ||
281 : | |||
282 : | dnl | ||
283 : | dnl look for ml-build | ||
284 : | dnl | ||
285 : | tmpPATH="$SMLNJ_PATH:$PATH" | ||
286 : | AC_PATH_PROG(ML_BUILD, ml-build, none, $tmpPATH) | ||
287 : | if test $ML_BUILD = none ; then | ||
288 : | AC_MSG_ERROR([ml-build not found]) | ||
289 : | fi | ||
290 : | AC_SUBST(ML_BUILD) | ||
291 : | |||
292 : | dnl ******************** Paths ******************** | ||
293 : | |||
294 : | DIDEROT_ROOT=`pwd` | ||
295 : | DIDEROT_DOCDIR=$DIDEROT_ROOT/doc | ||
296 : | DIDEROT_SRCDIR=$DIDEROT_ROOT/src | ||
297 : | DIDEROT_LIBDIR=$DIDEROT_ROOT/lib | ||
298 : | DIDEROT_BINDIR=$DIDEROT_ROOT/bin | ||
299 : | DIDEROT_MKDIR=$DIDEROT_ROOT/mk | ||
300 : | |||
301 : | HEAP_IMAGE_DIR=$DIDEROT_BINDIR/.heap | ||
302 : | INSTALL_SMLNJ_WRAPPER=$DIDEROT_BINDIR/install-sml-wrapper.sh | ||
303 : | |||
304 : | AC_SUBST(DIDEROT_ROOT) | ||
305 : | AC_SUBST(DIDEROT_DOCDIR) | ||
306 : | AC_SUBST(DIDEROT_SRCDIR) | ||
307 : | AC_SUBST(DIDEROT_LIBDIR) | ||
308 : | AC_SUBST(DIDEROT_BINDIR) | ||
309 : | AC_SUBST(DIDEROT_MKDIR) | ||
310 : | AC_SUBST(HEAP_IMAGE_DIR) | ||
311 : | AC_SUBST(INSTALL_SMLNJ_WRAPPER) | ||
312 : | |||
313 : | dnl | ||
314 : | jhr | 1196 | dnl ******************** C compiler properties ******************** |
315 : | dnl | ||
316 : | |||
317 : | dnl | ||
318 : | dnl run the compiler tests in 64-bit mode | ||
319 : | dnl | ||
320 : | save_CFLAGS=$CFLAGS | ||
321 : | CFLAGS="$CFLAGS $CFLAG_M64" | ||
322 : | |||
323 : | dnl | ||
324 : | dnl check for gcc builtin atomic operations | ||
325 : | dnl | ||
326 : | AC_MSG_CHECKING([for builtin atomic operations]) | ||
327 : | AC_LINK_IFELSE( | ||
328 : | [AC_LANG_PROGRAM([], [int foo1; int foo2 = __sync_fetch_and_add(&foo1, 1);])], | ||
329 : | AC_MSG_RESULT(yes) | ||
330 : | AC_DEFINE( | ||
331 : | [HAVE_BUILTIN_ATOMIC_OPS], 1, | ||
332 : | [Define to 1 if gcc compiler provides atomic operations.]), | ||
333 : | AC_MSG_RESULT(no)) | ||
334 : | |||
335 : | AC_C_BIGENDIAN | ||
336 : | |||
337 : | dnl | ||
338 : | dnl restore CFLAGS | ||
339 : | dnl | ||
340 : | CFLAGS=$save_CFLAGS | ||
341 : | |||
342 : | dnl | ||
343 : | dnl ******************** config.h stuff ******************** | ||
344 : | dnl | ||
345 : | jhr | 1288 | |
346 : | AC_DEFINE_UNQUOTED(DIDEROT_INCLUDE_PATH,["$DIDEROT_SRCDIR/include"], [path for Diderot header files]) | ||
347 : | |||
348 : | jhr | 1196 | AH_TOP([ |
349 : | /* | ||
350 : | * COPYRIGHT (c) 2011 Diderot project. (http://diderot-language.cs.uchicago.edu) | ||
351 : | * All rights reserved. | ||
352 : | */ | ||
353 : | |||
354 : | #ifndef _DIDEROT_CONFIG_H_ | ||
355 : | #define _DIDEROT_CONFIG_H_ | ||
356 : | |||
357 : | ]) | ||
358 : | AH_BOTTOM([ | ||
359 : | |||
360 : | #endif /* !_DIDEROT_CONFIG_H_ */ | ||
361 : | ]) | ||
362 : | |||
363 : | dnl | ||
364 : | jhr | 123 | dnl ******************** write output ******************** |
365 : | dnl | ||
366 : | |||
367 : | jhr | 127 | AC_CONFIG_FILES( |
368 : | dnl | ||
369 : | jhr | 123 | dnl ***** Makefiles ***** |
370 : | jhr | 321 | Makefile |
371 : | jhr | 1251 | src/clinfo/Makefile |
372 : | jhr | 123 | src/dnorm/Makefile |
373 : | src/compiler/Makefile | ||
374 : | jhr | 1094 | src/lib/build/Makefile |
375 : | src/lib/build/mk/build.gmk:src/lib/build/mk/build_gmk.in | ||
376 : | jhr | 204 | test/MIP/Makefile |
377 : | jhr | 260 | test/probe/Makefile |
378 : | jhr | 127 | dnl |
379 : | jhr | 1171 | dnl ***** CM files ***** |
380 : | src/compiler/codegen/sources.cm:src/compiler/codegen/sources_cm.in | ||
381 : | dnl | ||
382 : | jhr | 127 | dnl ***** SML source files ***** |
383 : | jhr | 202 | src/compiler/fields/run-dnorm.sml:src/compiler/fields/run-dnorm_sml.in |
384 : | jhr | 632 | src/compiler/common/paths.sml:src/compiler/common/paths_sml.in |
385 : | jhr | 123 | ) |
386 : | |||
387 : | jhr | 1196 | AC_CONFIG_HEADERS(src/include/Diderot/config.h:config/config_h.in) |
388 : | |||
389 : | jhr | 123 | dnl |
390 : | dnl shell scripts | ||
391 : | dnl | ||
392 : | AC_CONFIG_FILES([ | ||
393 : | bin/install-sml-wrapper.sh:config/install-sml-wrapper_sh.in | ||
394 : | ], [chmod +x bin/install-sml-wrapper.sh]) | ||
395 : | |||
396 : | jhr | 1094 | dnl |
397 : | dnl generate makefiles for runtime library builds | ||
398 : | dnl | ||
399 : | dnl usage: MK_BUILD_DIR(<build-dir>, <target-platform>, <options>) | ||
400 : | dnl | ||
401 : | AC_DEFUN([MK_BUILD_DIR], [ | ||
402 : | if test ! -d src/lib/build/$1 ; then | ||
403 : | mkdir src/lib/build/$1 | ||
404 : | fi | ||
405 : | [sed -e 's,@BUILD_TARGET@,$1,g' \ | ||
406 : | -e 's,@TARGET_PLATFORM@,$2,g' \ | ||
407 : | -e 's,@BUILD_OPTIONS@,$3,g' \ | ||
408 : | src/lib/build/mk/Makefile.in \ | ||
409 : | > src/lib/build/$1/Makefile.in] | ||
410 : | AC_CONFIG_FILES(src/lib/build/$1/Makefile) | ||
411 : | ]) | ||
412 : | |||
413 : | jhr | 1274 | MK_BUILD_DIR(rt-c-f, c, [float]) |
414 : | MK_BUILD_DIR(rt-c-f-debug, c, [float debug]) | ||
415 : | MK_BUILD_DIR(rt-c-f-par, parallel, [parallel float]) | ||
416 : | MK_BUILD_DIR(rt-c-f-par-debug, parallel, [parallel float debug]) | ||
417 : | jhr | 1094 | |
418 : | jhr | 1269 | if test x"$CL_ENABLED" = xtrue ; then |
419 : | jhr | 1274 | MK_BUILD_DIR(rt-cl-f, cl, [float]) |
420 : | MK_BUILD_DIR(rt-cl-f-debug, cl, [float debug]) | ||
421 : | jhr | 1269 | fi |
422 : | |||
423 : | jhr | 3 | AC_OUTPUT |
root@smlnj-gforge.cs.uchicago.edu | ViewVC Help |
Powered by ViewVC 1.0.0 |