1#  @copyright
2#  Copyright (C) 2011-2013, Intel Corporation
3#  All rights reserved.
4#
5#  @copyright
6#  Redistribution and use in source and binary forms, with or without
7#  modification, are permitted provided that the following conditions
8#  are met:
9#
10#    * Redistributions of source code must retain the above copyright
11#      notice, this list of conditions and the following disclaimer.
12#    * Redistributions in binary form must reproduce the above copyright
13#      notice, this list of conditions and the following disclaimer in
14#      the documentation and/or other materials provided with the
15#      distribution.
16#    * Neither the name of Intel Corporation nor the names of its
17#      contributors may be used to endorse or promote products derived
18#      from this software without specific prior written permission.
19#
20#  @copyright
21#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25#  HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26#  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27#  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
28#  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
29#  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30#  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
31#  WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32#  POSSIBILITY OF SUCH DAMAGE.
33
34AC_INIT([Cilk Runtime Library], [2.0], [cilk@intel.com])
35AC_PREREQ([2.64])
36
37# Needed to define ${target}.  Needs to be very early to avoid annoying
38# warning about calling AC_ARG_PROGRAM before AC_CANONICAL_SYSTEM
39AC_CANONICAL_SYSTEM
40target_alias=${target_alias-$host_alias}
41AC_SUBST(target_alias)
42AM_INIT_AUTOMAKE(foreign no-dist)
43
44AM_MAINTAINER_MODE
45
46AM_ENABLE_MULTILIB(, ..)
47
48# Build a DLL on Windows
49# AC_LIBTOOL_WIN32_DLL
50AC_PROG_CC
51AC_PROG_CXX
52# AC_PROG_LIBTOOL
53# AC_CONFIG_MACRO_DIR([..])
54AC_CONFIG_FILES([Makefile libcilkrts.spec])
55AC_FUNC_ALLOCA
56
57# Check whether the target supports protected visibility.
58save_CFLAGS="$CFLAGS"
59CFLAGS="$CFLAGS -Werror"
60AC_TRY_COMPILE([void __attribute__((visibility("protected"))) foo(void) { }],
61	       [], libcilkrts_cv_have_attribute_visibility=yes,
62	       libcilkrts_cv_have_attribute_visibility=no)
63CFLAGS="$save_CFLAGS"
64if test $libcilkrts_cv_have_attribute_visibility = yes; then
65  AC_DEFINE(HAVE_ATTRIBUTE_VISIBILITY, 1,
66    [Define to 1 if the target supports __attribute__((visibility(...))).])
67fi
68
69# Get target configury.
70. ${srcdir}/configure.tgt
71if test -n "$UNSUPPORTED"; then
72   AC_MSG_ERROR([Configuration ${target} is unsupported.])
73fi
74
75if test "${multilib}" = "yes"; then
76  multilib_arg="--enable-multilib"
77else
78  multilib_arg=
79fi
80
81AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
82AC_ARG_ENABLE([version-specific-runtime-libs],
83  AC_HELP_STRING([--enable-version-specific-runtime-libs],
84                 [Specify that runtime libraries should be installed in a compi
85ler-specific directory]),
86  [case "$enableval" in
87    yes) enable_version_specific_runtime_libs=yes ;;
88    no)  enable_version_specific_runtime_libs=no ;;
89    *)   AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs
90]);;
91   esac],
92  [enable_version_specific_runtime_libs=no])
93AC_MSG_RESULT($enable_version_specific_runtime_libs)
94
95
96# Calculate toolexeclibdir
97# Also toolexecdir, though it's only used in toolexeclibdir
98case ${enable_version_specific_runtime_libs} in
99  yes)
100    # Need the gcc compiler version to know where to install libraries
101    # and header files if --enable-version-specific-runtime-libs option
102    # is selected.
103    toolexecdir='$(libdir)/gcc/$(target_alias)'
104    toolexeclibdir='$(toolexecdir)/$(gcc_version)$(MULTISUBDIR)'
105    ;;
106  no)
107    if test -n "$with_cross_host" &&
108       test x"$with_cross_host" != x"no"; then
109      # Install a library built with a cross compiler in tooldir, not libdir.
110      toolexecdir='$(exec_prefix)/$(target_alias)'
111      toolexeclibdir='$(toolexecdir)/lib'
112    else
113      toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
114      toolexeclibdir='$(libdir)'
115    fi
116    multi_os_directory=`$CC -print-multi-os-directory`
117    case $multi_os_directory in
118      .) ;; # Avoid trailing /.
119      *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;;
120    esac
121    ;;
122esac
123
124# Set config_dir based on the target.  config_dir specifies where to get
125# target-specific files.  The generic implementation is incomplete, but
126# contains information on what's needed
127case "${target}" in
128
129  x86_64-*-*)
130    config_dir="x86"
131    ;;
132
133  i?86-*-*)
134    config_dir="x86"
135    ;;
136
137  *)
138    config_dir="generic"
139    ;;
140
141esac
142AC_SUBST(config_dir)
143
144# We have linker scripts for appropriate operating systems
145linux_linker_script=no
146case "${host}" in
147    *-*-linux*)
148        linux_linker_script=yes
149        ;;
150esac
151AM_CONDITIONAL(LINUX_LINKER_SCRIPT, test "$linux_linker_script" = "yes")
152
153mac_linker_script=no
154case "${host}" in
155    *-*-apple*)
156        mac_linker_script=yes
157        ;;
158esac
159AM_CONDITIONAL(MAC_LINKER_SCRIPT, test "$mac_linker_script" = "yes")
160
161AC_LIBTOOL_DLOPEN
162AM_PROG_LIBTOOL
163AC_SUBST(toolexecdir)
164AC_SUBST(toolexeclibdir)
165
166AC_SUBST(lt_cv_dlopen_libs)
167
168# Check to see if -pthread or -lpthread is needed.  Prefer the former.
169# Note that the CILK_SELF_SPEC in gcc.c may force -pthread.
170# In case the pthread.h system header is not found, this test will fail.
171XCFLAGS=""
172XLDFLAGS=""
173CFLAGS="$CFLAGS -pthread"
174AC_LINK_IFELSE(
175 [AC_LANG_PROGRAM(
176  [#include <pthread.h>
177   void *g(void *d) { return NULL; }],
178  [pthread_t t; pthread_create(&t,NULL,g,NULL);])],
179 [XCFLAGS=" -Wc,-pthread"],
180 [CFLAGS="$save_CFLAGS" LIBS="-lpthread $LIBS"
181  AC_LINK_IFELSE(
182   [AC_LANG_PROGRAM(
183    [#include <pthread.h>
184     void *g(void *d) { return NULL; }],
185    [pthread_t t; pthread_create(&t,NULL,g,NULL);])],
186   [],
187   [AC_MSG_ERROR([Pthreads are required to build libcilkrts])])])
188
189# Check for pthread_{,attr_}[sg]etaffinity_np.
190AC_LINK_IFELSE(
191 [AC_LANG_PROGRAM(
192  [#define _GNU_SOURCE
193   #include <pthread.h>],
194  [cpu_set_t cpuset;
195   pthread_attr_t attr;
196   pthread_getaffinity_np (pthread_self (), sizeof (cpu_set_t), &cpuset);
197   if (CPU_ISSET (0, &cpuset))
198     CPU_SET (1, &cpuset);
199   else
200     CPU_ZERO (&cpuset);
201   pthread_setaffinity_np (pthread_self (), sizeof (cpu_set_t), &cpuset);
202   pthread_attr_init (&attr);
203   pthread_attr_getaffinity_np (&attr, sizeof (cpu_set_t), &cpuset);
204   pthread_attr_setaffinity_np (&attr, sizeof (cpu_set_t), &cpuset);])],
205  AC_DEFINE(HAVE_PTHREAD_AFFINITY_NP, 1,
206[       Define if pthread_{,attr_}{g,s}etaffinity_np is supported.]))
207
208# Every c++ lib is linking by default with -nostdlib, which leads to the
209# fact, that proper pthread library will not be given at link time. We have
210# to hard-code that.
211case "${target}" in
212
213  *android*)
214    XLDFLAGS="$XLDFLAGS -lc"
215     ;;
216  *)
217    XLDFLAGS="$XLDFLAGS -lpthread"
218    ;;
219
220esac
221
222AC_SUBST(XCFLAGS)
223AC_SUBST(XLDFLAGS)
224
225CFLAGS="$save_CFLAGS"
226
227if test $enable_shared = yes; then
228  link_cilkrts="-lcilkrts %{static: $LIBS}"
229else
230  link_cilkrts="-lcilkrts $LIBS"
231fi
232AC_SUBST(link_cilkrts)
233
234
235# Must be last
236AC_OUTPUT
237