]> git.ipfire.org Git - thirdparty/gcc.git/blob - libphobos/configure.ac
libphobos: libdruntime doesn't support shadow stack (PR95680)
[thirdparty/gcc.git] / libphobos / configure.ac
1 # Process this file with autoconf to produce a configure script.
2 # Copyright (C) 2006-2020 Free Software Foundation, Inc.
3 #
4 # GCC is free software; you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation; either version 3, or (at your option)
7 # any later version.
8 #
9 # GCC is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with GCC; see the file COPYING3. If not see
16 # <http://www.gnu.org/licenses/>.
17
18 # This requires that you have your environment set-up to use explicit
19 # versions of automake and autoconf.
20 #
21 # export ACLOCAL=/usr/bin/aclocal-1.15
22 # export AUTOMAKE=/usr/bin/automake-1.15
23 # export AUTOM4TE=/usr/bin/autom4te2.69
24 # export AUTOCONF=/usr/bin/autoconf2.69
25 #
26 # autoreconf2.69
27 #
28
29 AC_INIT(package-unused, version-unused,, libphobos)
30 AC_CONFIG_SRCDIR(libdruntime/gcc/attribute.d)
31 AC_CONFIG_HEADERS(config.h)
32
33 AM_ENABLE_MULTILIB(, ..)
34 AC_CANONICAL_SYSTEM
35 AC_USE_SYSTEM_EXTENSIONS
36
37 target_alias=${target_alias-$target}
38 AC_SUBST(target_alias)
39
40 # 1.11.1: Require that version of automake.
41 # foreign: Don't require README, INSTALL, NEWS, etc.
42 # no-define: Don't define PACKAGE and VERSION.
43 # no-dependencies: Don't generate automatic dependencies.
44 # (because it breaks when using bootstrap-lean, since some of the
45 # headers are gone at "make install" time).
46 # subdir-objects: Build objects in sub-directories.
47 # -Wall: Issue all automake warnings.
48 # -Wno-portability: Don't warn about constructs supported by GNU make.
49 # (because GCC requires GNU make anyhow).
50 # -Wno-override: Overrides used in testsuite.
51 AM_INIT_AUTOMAKE([1.11.1 foreign no-dist no-define no-dependencies subdir-objects -Wall -Wno-portability -Wno-override])
52
53 m4_rename([_AC_ARG_VAR_PRECIOUS],[glibd_PRECIOUS])
54 m4_define([_AC_ARG_VAR_PRECIOUS],[])
55 AM_PROG_AS
56 AC_PROG_CC
57 AC_PROG_GDC
58 WITH_LOCAL_DRUNTIME([GDC_CHECK_COMPILE], [])
59
60 m4_rename_force([glibd_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
61
62 AC_SUBST(CFLAGS)
63 AM_MAINTAINER_MODE
64 AC_PROG_RANLIB
65 AC_PROG_INSTALL
66 AC_PROG_MAKE_SET
67
68 # Add CET specific flags if CET is enabled
69 GCC_CET_FLAGS(CET_FLAGS)
70 AC_SUBST(CET_FLAGS)
71 # To ensure that runtime code for CET is compiled in, add in D version flags.
72 if test "$enable_cet" = yes; then
73 CET_DFLAGS="$CET_FLAGS -fversion=CET"
74 AC_SUBST(CET_DFLAGS)
75 fi
76
77 # This should be inherited in the recursive make, but ensure it is defined.
78 test "$AR" || AR=ar
79 AC_SUBST(AR)
80
81 CC_FOR_BUILD=${CC_FOR_BUILD:-gcc}
82 AC_SUBST(CC_FOR_BUILD)
83 AC_SUBST(CFLAGS_FOR_BUILD)
84
85 # Enable libtool
86 LT_INIT(dlopen)
87 AM_PROG_LIBTOOL
88 WITH_LOCAL_DRUNTIME([LT_LANG([D])], [])
89
90 # libtool variables for Phobos shared and position-independent compiles.
91 #
92 # Use phobos_compiler_shared_flag to designate the compile-time flags for
93 # creating shared objects. Default: -fversion=Shared.
94 #
95 # Use phobos_compiler_pic_flag to designate the compile-time flags for
96 # creating position-independent objects. This varies with the target
97 # hardware and operating system, but is often: -fPIC.
98 #
99 # The distinction between pic and shared compilation flags is not present in
100 # libtool, and so we make it here. How it is handled is that in shared
101 # compilations the `lt_prog_compiler_pic_D' variable is used to instead
102 # ensure that conditional compilation of shared runtime code is compiled in.
103 # The original PIC flags are then used in the compilation of every object.
104 #
105 # Why are objects destined for libgphobos.a compiled with -fPIC?
106 # Because -fPIC is not harmful to use for objects destined for static
107 # libraries. In addition, using -fPIC will allow the use of static
108 # libgphobos.a in the creation of other D shared libraries.
109 if test "$enable_shared" = yes; then
110 phobos_compiler_pic_flag="$lt_prog_compiler_pic_D"
111 phobos_compiler_shared_flag="-fversion=Shared"
112 else
113 phobos_compiler_pic_flag=
114 phobos_compiler_shared_flag=
115 fi
116 AC_SUBST(phobos_compiler_pic_flag)
117 AC_SUBST(phobos_compiler_shared_flag)
118
119 # Override the libtool's pic_flag and pic_mode.
120 # Do this step after AM_PROG_LIBTOOL, but before AC_OUTPUT.
121 # NB: this impacts --with-pic and --without-pic.
122 lt_prog_compiler_pic_D="$phobos_compiler_shared_flag"
123 pic_mode='default'
124
125 # Determine what GCC version number to use in filesystem paths.
126 GCC_BASE_VER
127
128 # libphobos/libdruntime specific options and feature detection
129 DRUNTIME_CONFIGURE
130 DRUNTIME_MULTILIB
131 DRUNTIME_WERROR
132 DRUNTIME_CPU_SOURCES
133 DRUNTIME_OS_SOURCES
134 DRUNTIME_OS_THREAD_MODEL
135 DRUNTIME_OS_ARM_EABI_UNWINDER
136 DRUNTIME_OS_MINFO_BRACKETING
137 DRUNTIME_OS_DLPI_TLS_MODID
138 DRUNTIME_OS_LINK_SPEC
139 DRUNTIME_LIBRARIES_CLIB
140
141 WITH_LOCAL_DRUNTIME([
142 AC_LANG_PUSH([D])
143 AC_SEARCH_LIBS([malloc], [c])
144 AC_SEARCH_LIBS([pthread_create], [pthread])
145 AC_SEARCH_LIBS([cosf], [m])
146 AC_SEARCH_LIBS([clock_gettime], [rt])
147 DRUNTIME_ENABLE_ATOMIC_BUILTINS
148 AC_LANG_POP([D])
149 ], [-nophoboslib])
150
151 DRUNTIME_LIBRARIES_ATOMIC
152 DRUNTIME_LIBRARIES_BACKTRACE
153 DRUNTIME_LIBRARIES_DLOPEN
154 DRUNTIME_LIBRARIES_NET
155 DRUNTIME_LIBRARIES_UCONTEXT
156 DRUNTIME_LIBRARIES_ZLIB
157 DRUNTIME_INSTALL_DIRECTORIES
158
159 AC_MSG_CHECKING([for --enable-libphobos])
160 AC_ARG_ENABLE(libphobos,
161 [AS_HELP_STRING([--enable-libphobos], [Enable libphobos])])
162 AC_MSG_RESULT($enable_libphobos)
163
164 AC_MSG_CHECKING([for --with-libphobos-druntime-only])
165 AC_ARG_WITH(libphobos-druntime-only,
166 AS_HELP_STRING([--with-libphobos-druntime-only={yes,no,auto}],
167 [build only the druntime library (default: auto)]),,
168 [with_libphobos_druntime_only=auto])
169 AC_MSG_RESULT($with_libphobos_druntime_only)
170
171 case "$with_libphobos_druntime_only" in
172 yes|no|auto) ;;
173 *) AC_MSG_ERROR([Invalid argument for --with-libphobos-druntime-only]) ;;
174 esac
175
176 # See if supported.
177 unset LIBPHOBOS_SUPPORTED
178 unset LIBDRUNTIME_ONLY
179 AC_MSG_CHECKING([for host support for libphobos])
180 . ${srcdir}/configure.tgt
181 case ${host} in
182 x86_64-*-solaris2.* | i?86-*-solaris2.*)
183 # libphobos doesn't compile with the Solaris/x86 assembler due to a
184 # relatively low linelength limit.
185 as_prog=`$CC -print-prog-name=as`
186 if test -n "$as_prog" && $as_prog -v /dev/null 2>&1 | grep GNU > /dev/null 2>&1; then
187 druntime_cv_use_gas=yes;
188 else
189 druntime_cv_use_gas=no;
190 fi
191 rm -f a.out
192 if test x$druntime_cv_use_gas = xno; then
193 LIBPHOBOS_SUPPORTED=no
194 fi
195 # 64-bit D execution fails with Solaris ld without -z relax=transtls support.
196 if test "$druntime_ld_gld" = "no" && test "$druntime_ld_relax_transtls" = "no"; then
197 LIBPHOBOS_SUPPORTED=no
198 fi
199 ;;
200 esac
201 AC_MSG_RESULT($LIBPHOBOS_SUPPORTED)
202
203 # Decide if it's usable.
204 case $LIBPHOBOS_SUPPORTED:$enable_libphobos in
205 *:no) use_libphobos=no ;;
206 *:yes) use_libphobos=yes ;;
207 yes:*) use_libphobos=yes ;;
208 *:*) use_libphobos=no ;;
209 esac
210 AM_CONDITIONAL(ENABLE_LIBPHOBOS, test x$use_libphobos = xyes)
211
212 # Decide if only libdruntime should be built.
213 case $LIBDRUNTIME_ONLY:$with_libphobos_druntime_only in
214 *:no) only_libdruntime=no ;;
215 *:yes) only_libdruntime=yes ;;
216 yes:*) only_libdruntime=yes ;;
217 *:*) only_libdruntime=no ;;
218 esac
219 AM_CONDITIONAL(ENABLE_LIBDRUNTIME_ONLY, test x$only_libdruntime = xyes)
220
221 # Enable expensive internal checks
222 AC_ARG_ENABLE(libphobos-checking,
223 [AS_HELP_STRING([[--enable-libphobos-checking[=LIST]]],
224 [enable expensive run-time checks. With LIST,
225 enable only specific categories of checks.
226 Categories are: yes,no,all,none,release.
227 Flags are: assert or other strings])],
228 [ac_checking_flags="${enableval}"],[ac_checking_flags=release])
229 IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS="$IFS,"
230 for check in release $ac_checking_flags
231 do
232 case $check in
233 # These set all the flags to specific states
234 yes|all) RELEASE_FLAG="-fno-release" ; ASSERT_FLAG= ;;
235 no|none|release) RELEASE_FLAG="-frelease" ; ASSERT_FLAG= ;;
236 # These enable particular checks
237 assert) ASSERT_FLAG="-fassert" ;;
238 # Accept
239 *) ;;
240 esac
241 done
242 IFS="$ac_save_IFS"
243 CHECKING_DFLAGS="$RELEASE_FLAG $ASSERT_FLAG"
244 AC_SUBST(CHECKING_DFLAGS)
245
246 # Add drtbegin.o/drtend.o to startfile/endfile specs in libgphobos.spec
247 if test "$DCFG_MINFO_BRACKETING" = "false"; then
248 DRTSTUFF_SPEC=$srcdir/src/drtstuff.spec
249 else
250 DRTSTUFF_SPEC=/dev/null
251 fi
252 AC_SUBST_FILE(DRTSTUFF_SPEC)
253
254 # Add dependencies for libgphobos.spec file
255 SPEC_PHOBOS_DEPS="$LIBS"
256 AC_SUBST(SPEC_PHOBOS_DEPS)
257
258 # Libdruntime / phobos soname version
259 libtool_VERSION=1:0:0
260 AC_SUBST(libtool_VERSION)
261
262 # Set default flags (after DRUNTIME_WERROR!)
263 if test -z "$GDCFLAGS"; then
264 GDCFLAGS="-g -O2"
265 fi
266 AC_SUBST(GDCFLAGS)
267
268 WARN_DFLAGS="-Wall $WERROR_FLAG"
269 AC_SUBST(WARN_DFLAGS)
270
271 # Sanity check for the cross-compilation case:
272 AC_CHECK_HEADER(stdio.h,:,
273 [AC_MSG_ERROR([cannot find stdio.h.])])
274
275 AC_CONFIG_FILES(Makefile)
276
277 AC_CONFIG_FILES(libdruntime/gcc/config.d libdruntime/gcc/libbacktrace.d)
278 AC_CONFIG_FILES(src/libgphobos.spec)
279 AC_CONFIG_FILES([testsuite/testsuite_flags],[chmod +x testsuite/testsuite_flags])
280
281 # Multilibs need MULTISUBDIR defined correctly in certain makefiles so
282 # that multilib installs will end up installed in the correct place.
283 # The testsuite needs it for multilib-aware ABI baseline files.
284 # To work around this not being passed down from config-ml.in ->
285 # srcdir/Makefile.am -> srcdir/{src,libdruntime,...}/Makefile.am, manually
286 # append it here. Only modify Makefiles that have just been created.
287 #
288 # Also, get rid of this simulated-VPATH thing that automake does.
289 AC_CONFIG_FILES(AC_FOREACH([DIR], [libdruntime src testsuite], [DIR/Makefile ]),
290 [cat > vpsed$$ << \_EOF
291 s!`test -f '$<' || echo '$(srcdir)/'`!!
292 _EOF
293 sed -f vpsed$$ $ac_file > tmp$$
294 mv tmp$$ $ac_file
295 rm vpsed$$
296 echo 'MULTISUBDIR =' >> $ac_file
297 ml_norecursion=yes
298 . ${multi_basedir}/config-ml.in
299 AS_UNSET([ml_norecursion])
300 ])
301
302 AC_OUTPUT