1 |
dnl Process this file with autoconf to produce a configure script. |
dnl Process this file with autoconf to produce a configure script. |
2 |
dnl |
dnl |
3 |
dnl COPYRIGHT (c) 2012 The Diderot Project |
dnl COPYRIGHT (c) 2014 The Diderot Project |
4 |
dnl All rights reserved. |
dnl All rights reserved. |
5 |
dnl |
dnl |
6 |
|
|
7 |
AC_INIT(diderot,0.1,) |
AC_INIT(diderot,0.1,) |
8 |
|
|
9 |
AC_PREREQ(2.60) |
AC_PREREQ(2.60) |
10 |
AC_COPYRIGHT([[COPYRIGHT (c) 2012 The Diderot Project (http://diderot-language.cs.uchicago.edu)]]) |
AC_COPYRIGHT([[COPYRIGHT (c) 2014 The Diderot Project (http://diderot-language.cs.uchicago.edu)]]) |
11 |
AC_CONFIG_SRCDIR(src/dnorm/dnorm.c) |
AC_CONFIG_SRCDIR(src/compiler/driver/main.sml) |
12 |
AC_CONFIG_AUX_DIR(config) |
AC_CONFIG_AUX_DIR(config) |
13 |
AC_CONFIG_MACRO_DIR(config) |
AC_CONFIG_MACRO_DIR(config) |
14 |
|
|
47 |
AC_MSG_ERROR([Diderot requires c99 support]) |
AC_MSG_ERROR([Diderot requires c99 support]) |
48 |
fi |
fi |
49 |
|
|
50 |
|
AC_ARG_ENABLE([32-bit], |
51 |
|
AC_HELP_STRING([--enable-32-bit], [configure Diderot to produce 32-bit executables]), |
52 |
|
[CFLAG_MXX="-m32"], |
53 |
|
[CFLAG_MXX="-m64"]) |
54 |
|
|
55 |
dnl extra C compiler options |
dnl extra C compiler options |
56 |
dnl |
dnl |
57 |
CFLAGS="" |
CFLAGS="" |
|
CFLAG_M64="-m64" |
|
58 |
CFLAGS_BASE="-Wformat -Wreturn-type -Wuninitialized" |
CFLAGS_BASE="-Wformat -Wreturn-type -Wuninitialized" |
59 |
AC_SUBST(CFLAG_M64) |
AC_SUBST(CFLAG_MXX) |
60 |
AC_SUBST(CFLAGS_BASE) |
AC_SUBST(CFLAGS_BASE) |
61 |
|
|
62 |
dnl |
dnl |
69 |
dnl |
dnl |
70 |
ACX_PTHREAD |
ACX_PTHREAD |
71 |
|
|
|
dnl check for doxygen |
|
|
dnl |
|
|
AC_ARG_WITH([doxygen], |
|
|
[AS_HELP_STRING([--with-doxygen=PATH], [specify location of doxygen executable])], |
|
|
[DOXYGEN=$with_doxygen], |
|
|
[DOXYGEN=none]) |
|
|
if test x$DOXYGEN = xnone ; then |
|
|
# see if we can find doxygen in the user's path |
|
|
AC_PATH_PROG(DOXYGEN, [doxygen], [none]) |
|
|
fi |
|
|
if test x$with_doxygen = xyes -o x$with_doxygen = xno ; then |
|
|
AC_MSG_ERROR([--with-doxygen option must specify directory argument]) |
|
|
elif test x$DOXYGEN != xnone -a ! -x $DOXYGEN ; then |
|
|
AC_MSG_ERROR([doxygen not found at $DOXYGEN]) |
|
|
elif test x$DOXYGEN != xnone ; then |
|
|
dnl |
|
|
dnl verify that $DOXYGEN is an absolute path |
|
|
dnl |
|
|
case $DOXYGEN in |
|
|
/*) ;; |
|
|
*) AC_MSG_ERROR([--with-doxygen path must be absolute]) ;; |
|
|
esac |
|
|
fi |
|
|
if test $DOXYGEN = xnone ; then |
|
|
DOXYGEN=: |
|
|
fi |
|
|
AC_SUBST(DOXYGEN) |
|
|
|
|
72 |
dnl |
dnl |
73 |
dnl Look for NVIDIA's nvcc compiler |
dnl Look for NVIDIA's nvcc compiler |
74 |
dnl |
dnl |
104 |
else |
else |
105 |
CL_ENABLED=true |
CL_ENABLED=true |
106 |
CPPFLAGS_CL="" |
CPPFLAGS_CL="" |
107 |
AC_CHECK_HEADERS([CL/cl.h OpenCL/cl.h], [HAVE_CL_H="yes"], [HAVE_CL_H="no"]) |
CL_HEADER="" |
108 |
|
AC_CHECK_HEADERS([CL/cl.h OpenCL/cl.h], [HAVE_CL_H="yes"; CL_HEADER="$ac_header"; break], [HAVE_CL_H="no"]) |
109 |
if test x"$HAVE_CL_H" = xno ; then |
if test x"$HAVE_CL_H" = xno ; then |
110 |
# check for AMD's SDK |
# check for AMD's SDK |
111 |
AC_MSG_CHECKING([for cl.h in AMD's SDK]) |
AC_MSG_CHECKING([for cl.h in AMD's SDK]) |
112 |
if test -d /opt/AMDAPP/include/CL ; then |
if test -d /opt/AMDAPP/include/CL ; then |
113 |
HAVE_CL_H="yes" |
HAVE_CL_H="yes" |
114 |
|
CL_HEADER="/opt/AMDAPP/include/CL/cl.h" |
115 |
AC_DEFINE([HAVE_CL_CL_H]) |
AC_DEFINE([HAVE_CL_CL_H]) |
116 |
CPPFLAGS_CL="-I/opt/AMDAPP/include" |
CPPFLAGS_CL="-I/opt/AMDAPP/include" |
117 |
fi |
fi |
118 |
AC_MSG_RESULT([$HAVE_CL_H]) |
AC_MSG_RESULT([$HAVE_CL_H]) |
119 |
fi |
fi |
120 |
if test x"$HAVE_CL_H" = xno ; then |
if test x"$HAVE_CL_H" = xno ; then |
121 |
|
# check for NVIDIA's SDK |
122 |
|
AC_MSG_CHECKING([for NVIDIA's SDK cl.h]) |
123 |
|
if test -d /usr/local/cuda/include/CL ; then |
124 |
|
HAVE_CL_H="yes" |
125 |
|
AC_DEFINE([HAVE_CL_CL_H]) |
126 |
|
CPPFLAGS_CL="-I/usr/local/cuda/include" |
127 |
|
fi |
128 |
|
AC_MSG_RESULT([$HAVE_CL_H]) |
129 |
|
fi |
130 |
|
if test x"$HAVE_CL_H" = xno ; then |
131 |
AC_MSG_WARN([no cl.h found]) |
AC_MSG_WARN([no cl.h found]) |
132 |
CL_ENABLED=false |
CL_ENABLED=false |
133 |
CL_VERSION=0 |
CL_VERSION=0 |
134 |
|
SIZEOF_CL_INT=0 |
135 |
|
SIZEOF_CL_LONG=0 |
136 |
|
SIZEOF_CL_FLOAT=0 |
137 |
|
SIZEOF_CL_DOUBLE=0 |
138 |
else |
else |
139 |
# check the cl.h header for which version of OpenCL is supported |
# check the cl.h header for which version of OpenCL is supported |
140 |
AC_LANG([C]) |
AC_LANG([C]) |
163 |
dnl the specification specifies the behavior, but it was unspecified in 1.0. |
dnl the specification specifies the behavior, but it was unspecified in 1.0. |
164 |
dnl |
dnl |
165 |
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ |
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ |
166 |
# ifdef HAVE_CL_CL_H |
#include "$CL_HEADER" |
167 |
# include <CL/cl.h> |
]], |
|
# elif defined(HAVE_OPENCL_CL_H) |
|
|
# include <OpenCL/cl.h> |
|
|
# else |
|
|
# error no cl.h |
|
|
# endif]], |
|
168 |
[[cl_float4 x; x[0] = 0.0;]])], |
[[cl_float4 x; x[0] = 0.0;]])], |
169 |
[AC_DEFINE([CL_HOST_VECTORS_ARE_ARRAYS],[1],[host vector types are arrays])], |
[AC_DEFINE([CL_HOST_VECTORS_ARE_ARRAYS],[1],[host vector types are arrays])], |
170 |
dnl |
dnl |
171 |
dnl not arrays, so try the OpenCL 1.1 structure representation |
dnl not arrays, so try the OpenCL 1.1 structure representation |
172 |
dnl |
dnl |
173 |
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ |
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ |
174 |
# ifdef HAVE_CL_CL_H |
#include "$CL_HEADER" |
175 |
# include <CL/cl.h> |
]], |
|
# elif defined(HAVE_OPENCL_CL_H) |
|
|
# include <OpenCL/cl.h> |
|
|
# else |
|
|
# error no cl.h |
|
|
# endif]], |
|
176 |
[[cl_float4 x; x.s[0] = 0.0;]])], |
[[cl_float4 x; x.s[0] = 0.0;]])], |
177 |
[AC_DEFINE([CL_HOST_VECTORS_ARE_STRUCTS],[1],[host vector types are structs])], |
[AC_DEFINE([CL_HOST_VECTORS_ARE_STRUCTS],[1],[host vector types are structs])], |
178 |
[AC_MSG_ERROR([unable to figure out host types for OpenCL vectors])])]) |
[AC_MSG_ERROR([unable to figure out host types for OpenCL vectors])])]) |
181 |
# substitutions |
# substitutions |
182 |
AC_SUBST(LIBS_CL) |
AC_SUBST(LIBS_CL) |
183 |
AC_SUBST(CPPFLAGS_CL) |
AC_SUBST(CPPFLAGS_CL) |
184 |
|
# |
185 |
|
# determine the sizes of the host-side OpenCL types |
186 |
|
AC_CHECK_SIZEOF([cl_int], [], [#include "$CL_HEADER"]) |
187 |
|
SIZEOF_CL_INT=$ac_cv_sizeof_cl_int |
188 |
|
AC_CHECK_SIZEOF([cl_long], [], [#include "$CL_HEADER"]) |
189 |
|
SIZEOF_CL_LONG=$ac_cv_sizeof_cl_long |
190 |
|
AC_CHECK_SIZEOF([cl_float], [], [#include "$CL_HEADER"]) |
191 |
|
SIZEOF_CL_FLOAT=$ac_cv_sizeof_cl_float |
192 |
|
AC_CHECK_SIZEOF([cl_double], [], [#include "$CL_HEADER"]) |
193 |
|
SIZEOF_CL_DOUBLE=$ac_cv_sizeof_cl_double |
194 |
fi |
fi |
195 |
fi |
fi |
196 |
AC_SUBST(CL_ENABLED) |
AC_SUBST(CL_ENABLED) |
197 |
AC_SUBST(CL_VERSION) |
AC_SUBST(CL_VERSION) |
198 |
|
|
199 |
|
AC_SUBST(SIZEOF_CL_INT) |
200 |
|
AC_SUBST(SIZEOF_CL_LONG) |
201 |
|
AC_SUBST(SIZEOF_CL_FLOAT) |
202 |
|
AC_SUBST(SIZEOF_CL_DOUBLE) |
203 |
|
|
204 |
dnl |
dnl |
205 |
dnl check for various library routines etc. |
dnl check for various library routines etc. |
206 |
dnl |
dnl |
309 |
AC_SUBST(LIBM) |
AC_SUBST(LIBM) |
310 |
|
|
311 |
dnl |
dnl |
312 |
dnl get the path to the TEEM installation |
dnl get the path to the TEEM installation. We need this to build the Diderot |
313 |
|
dnl runtime code and we use the path when searching for teem in the Diderot |
314 |
|
dnl compiler. |
315 |
dnl |
dnl |
316 |
AC_ARG_WITH(teem, |
AC_ARG_WITH(teem, |
317 |
AC_HELP_STRING([--with-teem=<path>], [specify path to teem installation]), |
AC_HELP_STRING([--with-teem=<path>], [specify path to teem installation]), |
328 |
TEEM_DIR=$ac_cv_use_teem |
TEEM_DIR=$ac_cv_use_teem |
329 |
# check that TEEM_DIR actually points to something that looks like teem |
# check that TEEM_DIR actually points to something that looks like teem |
330 |
if test -f $TEEM_DIR/include/teem/nrrd.h ; then |
if test -f $TEEM_DIR/include/teem/nrrd.h ; then |
331 |
AC_MSG_RESULT([ okay]) |
AC_MSG_RESULT([yes]) |
332 |
else |
else |
333 |
TEEM_DIR=none |
TEEM_DIR=none |
334 |
AC_MSG_RESULT([ invalid]) |
AC_MSG_RESULT([no]) |
335 |
fi |
fi |
336 |
else |
else |
337 |
TEEM_DIR=none |
TEEM_DIR=none |
338 |
AC_MSG_RESULT([ invalid]) |
AC_MSG_RESULT([no]) |
339 |
fi |
fi |
340 |
fi |
fi |
341 |
if test x"$TEEM_DIR" = xnone ; then |
if test x"$TEEM_DIR" = xnone ; then |
342 |
AC_MSG_ERROR([unable to find teem]) |
AC_MSG_ERROR([unable to find teem; use --with-teem option to specify location]) |
343 |
|
fi |
344 |
|
dnl |
345 |
|
dnl check that unu supports the dnorm command |
346 |
|
dnl |
347 |
|
if test x"$TEEM_DIR" != xnone ; then |
348 |
|
AC_MSG_CHECKING([that \"unu dnorm\" works]) |
349 |
|
if test -x $TEEM_DIR/bin/unu ; then |
350 |
|
$TEEM_DIR/bin/unu dnorm > /dev/null 2> /dev/null |
351 |
|
if test $? -eq 0 ; then |
352 |
|
AC_MSG_RESULT([yes]) |
353 |
|
else |
354 |
|
AC_MSG_ERROR([\"unu dnorm\" is not supported; please update your teem installation]) |
355 |
|
fi |
356 |
|
else |
357 |
|
AC_MSG_ERROR([unable to find unu executable in $TEEM_DIR/bin"]) |
358 |
|
fi |
359 |
fi |
fi |
360 |
AC_SUBST(TEEM_DIR) |
AC_SUBST(TEEM_DIR) |
361 |
|
|
366 |
dnl |
dnl |
367 |
CHECK_SMLNJ([AC_MSG_ERROR([unable to find SML/NJ installation; check your PATH or set SMLNJ_CMD])]) |
CHECK_SMLNJ([AC_MSG_ERROR([unable to find SML/NJ installation; check your PATH or set SMLNJ_CMD])]) |
368 |
if test $SMLNJ_MAJOR_VERSION -lt 110 \ |
if test $SMLNJ_MAJOR_VERSION -lt 110 \ |
369 |
-o $SMLNJ_MINOR_VERSION -lt 73 |
-o $SMLNJ_MINOR_VERSION -lt 77 |
370 |
then |
then |
371 |
AC_MSG_ERROR([installation requires SML/NJ version 110.73+]) |
AC_MSG_ERROR([installation requires SML/NJ version 110.77+ (available from smlnj.org)]) |
372 |
fi |
fi |
373 |
AC_SUBST(SMLNJ_VERSION) |
AC_SUBST(SMLNJ_VERSION) |
374 |
|
|
399 |
fi |
fi |
400 |
AC_SUBST(ML_BUILD) |
AC_SUBST(ML_BUILD) |
401 |
|
|
402 |
|
dnl ******************** Documentation tools ******************** |
403 |
|
|
404 |
|
dnl check for doxygen |
405 |
|
dnl |
406 |
|
AC_ARG_WITH([doxygen], |
407 |
|
[AS_HELP_STRING([--with-doxygen=PATH], [specify location of doxygen executable])], |
408 |
|
[DOXYGEN=$with_doxygen], |
409 |
|
[DOXYGEN=none]) |
410 |
|
if test x$DOXYGEN = xnone ; then |
411 |
|
# see if we can find doxygen in the user's path |
412 |
|
AC_PATH_PROG(DOXYGEN, [doxygen], [none]) |
413 |
|
fi |
414 |
|
if test x$with_doxygen = xyes -o x$with_doxygen = xno ; then |
415 |
|
AC_MSG_ERROR([--with-doxygen option must specify directory argument]) |
416 |
|
elif test x$DOXYGEN != xnone -a ! -x $DOXYGEN ; then |
417 |
|
AC_MSG_ERROR([doxygen not found at $DOXYGEN]) |
418 |
|
elif test x$DOXYGEN != xnone ; then |
419 |
|
dnl |
420 |
|
dnl verify that $DOXYGEN is an absolute path |
421 |
|
dnl |
422 |
|
case $DOXYGEN in |
423 |
|
/*) ;; |
424 |
|
*) AC_MSG_ERROR([--with-doxygen path must be absolute]) ;; |
425 |
|
esac |
426 |
|
fi |
427 |
|
if test $DOXYGEN = xnone ; then |
428 |
|
DOXYGEN=: |
429 |
|
fi |
430 |
|
AC_SUBST(DOXYGEN) |
431 |
|
|
432 |
|
dnl check for asciidoc and related tools |
433 |
|
dnl |
434 |
|
AC_PATH_PROGS([ASCIIDOC], [asciidoc], [none]) |
435 |
|
AC_PATH_PROGS([A2X], [a2x], [none]) |
436 |
|
AC_PATH_PROGS([HIGHLIGHTER], [pygmentize], [none]) |
437 |
|
AC_PATH_PROGS([DBLATEX], [dblatex], [none]) |
438 |
|
|
439 |
|
dnl |
440 |
|
dnl get the path to the asciidoc cofiguration files |
441 |
|
dnl |
442 |
|
if test x"$ASCIIDOC" != xnone ; then |
443 |
|
AC_MSG_CHECKING([path to asciidoc configuration files]) |
444 |
|
ASCIIDOC_CONF_DIR=`$ASCIIDOC -v /dev/null 2>&1 | head -n 1 | sed 's|.*reading: \(.*\)/asciidoc.conf|\1|'` |
445 |
|
AC_MSG_RESULT([$ASCIIDOC_CONF_DIR]) |
446 |
|
fi |
447 |
|
AC_SUBST(ASCIIDOC) |
448 |
|
AC_SUBST(A2X) |
449 |
|
AC_SUBST(ASCIIDOC_CONF_DIR) |
450 |
|
AC_SUBST(HIGHLIGHTER) |
451 |
|
AC_SUBST(DBLATEX) |
452 |
|
|
453 |
|
|
454 |
dnl ******************** Paths ******************** |
dnl ******************** Paths ******************** |
455 |
|
|
456 |
DIDEROT_ROOT=`pwd` |
DIDEROT_ROOT=`pwd` |
480 |
dnl run the compiler tests in 64-bit mode |
dnl run the compiler tests in 64-bit mode |
481 |
dnl |
dnl |
482 |
save_CFLAGS=$CFLAGS |
save_CFLAGS=$CFLAGS |
483 |
CFLAGS="$CFLAGS $CFLAG_M64" |
CFLAGS="$CFLAGS $CFLAG_MXX" |
484 |
|
|
485 |
dnl |
dnl |
486 |
dnl check for gcc builtin atomic operations |
dnl check for gcc builtin atomic operations |
496 |
|
|
497 |
AC_C_BIGENDIAN |
AC_C_BIGENDIAN |
498 |
|
|
499 |
|
# |
500 |
|
# determine the sizes of the standard C types |
501 |
|
AC_CHECK_SIZEOF([int]) |
502 |
|
SIZEOF_C_INT=$ac_cv_sizeof_int |
503 |
|
AC_CHECK_SIZEOF([long]) |
504 |
|
SIZEOF_C_LONG=$ac_cv_sizeof_long |
505 |
|
AC_CHECK_SIZEOF([float]) |
506 |
|
SIZEOF_C_FLOAT=$ac_cv_sizeof_float |
507 |
|
AC_CHECK_SIZEOF([double]) |
508 |
|
SIZEOF_C_DOUBLE=$ac_cv_sizeof_double |
509 |
|
|
510 |
|
AC_SUBST(SIZEOF_C_INT) |
511 |
|
AC_SUBST(SIZEOF_C_LONG) |
512 |
|
AC_SUBST(SIZEOF_C_FLOAT) |
513 |
|
AC_SUBST(SIZEOF_C_DOUBLE) |
514 |
|
|
515 |
dnl |
dnl |
516 |
dnl restore CFLAGS |
dnl restore CFLAGS |
517 |
dnl |
dnl |
525 |
|
|
526 |
AH_TOP([ |
AH_TOP([ |
527 |
/* |
/* |
528 |
* COPYRIGHT (c) 2011 Diderot project. (http://diderot-language.cs.uchicago.edu) |
* COPYRIGHT (c) 2014 Diderot project. (http://diderot-language.cs.uchicago.edu) |
529 |
* All rights reserved. |
* All rights reserved. |
530 |
*/ |
*/ |
531 |
|
|
535 |
]) |
]) |
536 |
AH_BOTTOM([ |
AH_BOTTOM([ |
537 |
|
|
538 |
|
#ifdef NDEBUG |
539 |
|
#define STATIC_INLINE static inline |
540 |
|
#else |
541 |
|
#define STATIC_INLINE static |
542 |
|
#endif |
543 |
|
|
544 |
#endif /* !_DIDEROT_CONFIG_H_ */ |
#endif /* !_DIDEROT_CONFIG_H_ */ |
545 |
]) |
]) |
546 |
|
|
553 |
dnl ***** Makefiles ***** |
dnl ***** Makefiles ***** |
554 |
Makefile |
Makefile |
555 |
doc/Makefile |
doc/Makefile |
556 |
|
doc/man/Makefile |
557 |
src/clinfo/Makefile |
src/clinfo/Makefile |
|
src/dnorm/Makefile |
|
558 |
src/compiler/Makefile |
src/compiler/Makefile |
559 |
src/lib/build/Makefile |
src/lib/build/Makefile |
560 |
src/lib/build/mk/build.gmk:src/lib/build/mk/build_gmk.in |
src/lib/build/mk/build.gmk:src/lib/build/mk/build_gmk.in |
565 |
test/hlic/Makefile |
test/hlic/Makefile |
566 |
dnl |
dnl |
567 |
dnl ***** SML source files ***** |
dnl ***** SML source files ***** |
568 |
src/compiler/fields/run-dnorm.sml:src/compiler/fields/run-dnorm_sml.in |
src/compiler/nrrd/run-dnorm.sml:src/compiler/nrrd/run-dnorm_sml.in |
569 |
src/compiler/common/paths.sml:src/compiler/common/paths_sml.in |
src/compiler/common/paths.sml:src/compiler/common/paths_sml.in |
570 |
|
src/compiler/common/size-of.sml:src/compiler/common/size-of_sml.in |
571 |
) |
) |
572 |
|
|
573 |
AC_CONFIG_HEADERS(src/include/Diderot/config.h:config/config_h.in) |
AC_CONFIG_HEADERS(src/include/Diderot/config.h:config/config_h.in) |