1# Process this file with autoconf to produce a configure script. 2# Copyright (C) 1994-2020 Free Software Foundation, Inc. 3# Originally contributed by Dave Love (d.love@dl.ac.uk). 4# 5#This file is part of GCC. 6# 7#GCC is free software; you can redistribute it and/or modify 8#it under the terms of the GNU General Public License as published by 9#the Free Software Foundation; either version 3, or (at your option) 10#any later version. 11# 12#GCC is distributed in the hope that it will be useful, 13#but WITHOUT ANY WARRANTY; without even the implied warranty of 14#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15#GNU General Public License for more details. 16# 17#You should have received a copy of the GNU General Public License 18#along with GCC; see the file COPYING3. If not see 19#<http://www.gnu.org/licenses/>. 20 21AC_INIT(package-unused, version-unused,, libobjc) 22AC_CONFIG_SRCDIR([objc/objc.h]) 23GCC_TOPLEV_SUBDIRS 24 25# We need the following definitions because AC_PROG_LIBTOOL relies on them 26PACKAGE=libobjc 27# Version is pulled out to make it a bit easier to change using sed. 28VERSION=4:0:0 29AC_SUBST(VERSION) 30 31# This works around the fact that libtool configuration may change LD 32# for this particular configuration, but some shells, instead of 33# keeping the changes in LD private, export them just because LD is 34# exported. 35ORIGINAL_LD_FOR_MULTILIBS=$LD 36 37# ------- 38# Options 39# ------- 40 41# We use these options to decide which functions to include. 42AC_ARG_WITH(target-subdir, 43[ --with-target-subdir=SUBDIR 44 configuring in a subdirectory]) 45AC_ARG_WITH(cross-host, 46[ --with-cross-host=HOST configuring with a cross compiler]) 47 48AC_MSG_CHECKING([for --enable-version-specific-runtime-libs]) 49AC_ARG_ENABLE(version-specific-runtime-libs, 50[ --enable-version-specific-runtime-libs Specify that runtime libraries should be installed in a compiler-specific directory ], 51[case "$enableval" in 52 yes) version_specific_libs=yes ;; 53 no) version_specific_libs=no ;; 54 *) AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);; 55 esac], 56[version_specific_libs=no]) 57AC_MSG_RESULT($version_specific_libs) 58 59# ----------- 60# Directories 61# ----------- 62 63# Find the rest of the source tree framework. 64AM_ENABLE_MULTILIB(, ..) 65 66AC_CANONICAL_SYSTEM 67ACX_NONCANONICAL_TARGET 68 69# Export source directory. 70# These need to be absolute paths, yet at the same time need to 71# canonicalize only relative paths, because then amd will not unmount 72# drives. Thus the use of PWDCMD: set it to 'pawd' or 'amq -w' if using amd. 73case $srcdir in 74 [\\/$]* | ?:[\\/]*) glibcpp_srcdir=${srcdir} ;; 75 *) glibcpp_srcdir=`cd "$srcdir" && ${PWDCMD-pwd} || echo "$srcdir"` ;; 76esac 77AC_SUBST(glibcpp_srcdir) 78 79GCC_WITH_TOOLEXECLIBDIR 80 81# Calculate toolexeclibdir 82# Also toolexecdir, though it's only used in toolexeclibdir 83case ${version_specific_libs} in 84 yes) 85 # Need the gcc compiler version to know where to install libraries 86 # and header files if --enable-version-specific-runtime-libs option 87 # is selected. 88 toolexecdir='$(libdir)/gcc/$(target_noncanonical)' 89 toolexeclibdir='$(toolexecdir)/$(gcc_version)$(MULTISUBDIR)' 90 ;; 91 no) 92 if test -n "$with_cross_host" && 93 test x"$with_cross_host" != x"no"; then 94 # Install a library built with a cross compiler in tooldir, not libdir. 95 toolexecdir='$(exec_prefix)/$(target_noncanonical)' 96 case ${with_toolexeclibdir} in 97 no) 98 toolexeclibdir='$(toolexecdir)/lib' 99 ;; 100 *) 101 toolexeclibdir=${with_toolexeclibdir} 102 ;; 103 esac 104 else 105 toolexecdir='$(libdir)/gcc-lib/$(target_noncanonical)' 106 toolexeclibdir='$(libdir)' 107 fi 108 multi_os_directory=`$CC -print-multi-os-directory` 109 case $multi_os_directory in 110 .) ;; # Avoid trailing /. 111 *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;; 112 esac 113 ;; 114esac 115AC_SUBST(toolexecdir) 116AC_SUBST(toolexeclibdir) 117 118# Figure out if we want to name the include directory and the 119# library name changes differently. 120includedirname=include 121libsuffix= 122case "${host}" in 123 *-darwin*) 124 # Darwin is the only target so far that needs a different include directory. 125 includedirname=include-gnu-runtime 126 libsuffix=-gnu 127 ;; 128esac 129AC_SUBST(includedirname) 130AC_SUBST(libsuffix) 131 132AC_CONFIG_HEADERS(config.h) 133 134# -------- 135# Programs 136# -------- 137 138GCC_NO_EXECUTABLES 139 140# We must force CC to /not/ be a precious variable; otherwise 141# the wrong, non-multilib-adjusted value will be used in multilibs. 142# As a side effect, we have to subst CFLAGS ourselves. 143m4_rename([_AC_ARG_VAR_PRECIOUS],[real_PRECIOUS]) 144m4_define([_AC_ARG_VAR_PRECIOUS],[]) 145AC_PROG_CC 146m4_rename_force([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS]) 147 148# extra LD Flags which are required for targets 149ACX_LT_HOST_FLAGS 150case "${host}" in 151 *-darwin*) 152 # Darwin needs -single_module when linking libobjc 153 extra_ldflags_libobjc='$(lt_host_flags) -Wl,-single_module' 154 ;; 155 *-cygwin*|*-mingw*) 156 # Tell libtool to build DLLs on Windows 157 extra_ldflags_libobjc='$(lt_host_flags)' 158 ;; 159esac 160AC_SUBST(extra_ldflags_libobjc) 161 162# Add CET specific flags if CET is enabled 163GCC_CET_FLAGS(CET_FLAGS) 164XCFLAGS="$XCFLAGS $CET_FLAGS" 165 166AC_SUBST(CFLAGS) 167AC_SUBST(XCFLAGS) 168 169AC_CHECK_TOOL(AS, as) 170AC_CHECK_TOOL(AR, ar) 171AC_CHECK_TOOL(RANLIB, ranlib, :) 172AC_PROG_INSTALL 173 174AM_MAINTAINER_MODE 175 176# Enable Win32 DLL on MS Windows - FIXME 177AC_LIBTOOL_WIN32_DLL 178 179AC_PROG_LIBTOOL 180 181AM_PROG_CC_C_O 182 183AC_PROG_MAKE_SET 184 185# ------- 186# Headers 187# ------- 188 189# Sanity check for the cross-compilation case: 190AC_CHECK_HEADER(stdio.h,:, 191 [AC_MSG_ERROR([Can't find stdio.h. 192You must have a usable C system for the target already installed, at least 193including headers and, preferably, the library, before you can configure 194the Objective C runtime system. If necessary, install gcc now with 195\`LANGUAGES=c', then the target library, then build with \`LANGUAGES=objc'.])]) 196 197AC_HEADER_STDC 198 199AC_CHECK_HEADERS(sched.h) 200 201# ----------- 202# Miscellanea 203# ----------- 204 205# Check if we have thread-local storage 206GCC_CHECK_TLS 207 208gt_BITFIELD_TYPE_MATTERS 209 210# ----------- 211# boehm-gc 212# ----------- 213 214AC_ARG_ENABLE(objc-gc, 215[AS_HELP_STRING([--enable-objc-gc], 216 [enable use of Boehm's garbage collector with the 217 GNU Objective-C runtime])],,enable_objc_gc=no) 218AC_ARG_WITH([target-bdw-gc], 219[AS_HELP_STRING([--with-target-bdw-gc=PATHLIST], 220 [specify prefix directory for installed bdw-gc package. 221 Equivalent to --with-target-bdw-gc-include=PATH/include 222 plus --with-target-bdw-gc-lib=PATH/lib])]) 223AC_ARG_WITH([target-bdw-gc-include], 224[AS_HELP_STRING([--with-target-bdw-gc-include=PATHLIST], 225 [specify directories for installed bdw-gc include files])]) 226AC_ARG_WITH([target-bdw-gc-lib], 227[AS_HELP_STRING([--with-target-bdw-gc-lib=PATHLIST], 228 [specify directories for installed bdw-gc library])]) 229 230case "$enable_objc_gc" in 231no) 232 use_bdw_gc=no 233 ;; 234*) 235 AC_MSG_CHECKING([for bdw garbage collector]) 236 if test "x$with_target_bdw_gc$with_target_bdw_gc_include$with_target_bdw_gc_lib" = x; then 237 dnl no bdw-gw options, assuming bdw-gc in default locations 238 BDW_GC_CFLAGS= 239 BDW_GC_LIBS="-lgc" 240 else 241 dnl bdw-gw options passed by configure flags 242 if test "x$with_target_bdw_gc_include" = x && test "x$with_target_bdw_gc_lib" != x; then 243 AC_MSG_ERROR([found --with-target-bdw-gc-lib but --with-target-bdw-gc-include missing]) 244 elif test "x$with_target_bdw_gc_include" != x && test "x$with_target_bdw_gc_lib" = x; then 245 AC_MSG_ERROR([found --with-target-bdw-gc-include but --with-target-bdw-gc-lib missing]) 246 else 247 AC_MSG_RESULT([using paths configured with --with-target-bdw-gc options]) 248 fi 249 mldir=`${CC-gcc} --print-multi-directory 2>/dev/null` 250 bdw_val= 251 if test "x$with_target_bdw_gc" != x; then 252 for i in `echo $with_target_bdw_gc | tr ',' ' '`; do 253 case "$i" in 254 *=*) sd=${i%%=*}; d=${i#*=} ;; 255 *) sd=.; d=$i ;; 256 esac 257 if test "$mldir" = "$sd"; then 258 bdw_val=$d 259 fi 260 done 261 if test "x$bdw_val" = x; then 262 AC_MSG_ERROR([no multilib path ($mldir) found in --with-target-bdw-gc]) 263 fi 264 bdw_inc_dir="$bdw_val/include" 265 bdw_lib_dir="$bdw_val/lib" 266 fi 267 bdw_val= 268 if test "x$with_target_bdw_gc_include" != x; then 269 for i in `echo $with_target_bdw_gc_include | tr ',' ' '`; do 270 case "$i" in 271 *=*) sd=${i%%=*}; d=${i#*=} ;; 272 *) sd=.; d=$i; fallback=$i ;; 273 esac 274 if test "$mldir" = "$sd"; then 275 bdw_val=$d 276 fi 277 done 278 if test "x$bdw_val" = x && test "x$bdw_inc_dir" = x && test "x$fallback" != x; then 279 bdw_inc_dir="$fallback" 280 elif test "x$bdw_val" = x; then 281 AC_MSG_ERROR([no multilib path ($mldir) found in --with-target-bdw-gc-include]) 282 else 283 bdw_inc_dir="$bdw_val" 284 fi 285 fi 286 bdw_val= 287 if test "x$with_target_bdw_gc_lib" != x; then 288 for i in `echo $with_target_bdw_gc_lib | tr ',' ' '`; do 289 case "$i" in 290 *=*) sd=${i%%=*}; d=${i#*=} ;; 291 *) sd=.; d=$i ;; 292 esac 293 if test "$mldir" = "$sd"; then 294 bdw_val=$d 295 fi 296 done 297 if test "x$bdw_val" = x; then 298 AC_MSG_ERROR([no multilib path ($mldir) found in --with-target-bdw-gc-lib]) 299 fi 300 bdw_lib_dir="$bdw_val" 301 fi 302 if test "x$bdw_inc_dir" = x; then 303 AC_MSG_ERROR([no multilib path ($mldir) found in --with-target-bdw-gc-include]) 304 fi 305 if test "x$bdw_lib_dir" = x; then 306 AC_MSG_ERROR([no multilib path ($mldir) found in --with-target-bdw-gc-lib]) 307 fi 308 BDW_GC_CFLAGS="-I$bdw_inc_dir" 309 if test -f $bdw_lib_dir/libgc.la; then 310 BDW_GC_LIBS="$bdw_lib_dir/libgc.la" 311 else 312 BDW_GC_LIBS="-L$bdw_lib_dir -lgc" 313 fi 314 AC_MSG_RESULT([found]) 315 fi 316 317 case "$BDW_GC_LIBS" in 318 *libgc.la) 319 use_bdw_gc=yes 320 ;; 321 *) 322 AC_MSG_CHECKING([for system boehm-gc]) 323 save_CFLAGS=$CFLAGS 324 save_LIBS=$LIBS 325 CFLAGS="$CFLAGS $BDW_GC_CFLAGS" 326 LIBS="$LIBS $BDW_GC_LIBS" 327 dnl the link test is not good enough for ARM32 multilib detection, 328 dnl first check to link, then to run 329 AC_LINK_IFELSE( 330 [AC_LANG_PROGRAM([#include <gc/gc.h>],[GC_init()])], 331 [ 332 AC_RUN_IFELSE([AC_LANG_SOURCE([[ 333 #include <gc/gc.h> 334 int main() { 335 GC_init(); 336 return 0; 337 } 338 ]])], 339 [system_bdw_gc_found=yes], 340 [system_bdw_gc_found=no], 341 dnl assume no system boehm-gc for cross builds ... 342 [system_bdw_gc_found=no] 343 ) 344 ], 345 [system_bdw_gc_found=no]) 346 CFLAGS=$save_CFLAGS 347 LIBS=$save_LIBS 348 if test x$enable_objc_gc = xauto && test x$system_bdw_gc_found = xno; then 349 AC_MSG_WARN([system bdw-gc not found, not building libobjc_gc]) 350 use_bdw_gc=no 351 elif test x$enable_objc_gc = xyes && test x$system_bdw_gc_found = xno; then 352 AC_MSG_ERROR([system bdw-gc required but not found]) 353 else 354 use_bdw_gc=yes 355 AC_MSG_RESULT([found]) 356 fi 357 esac 358esac 359 360if test "$use_bdw_gc" = no; then 361 OBJC_GCFLAGS='' 362 OBJC_BOEHM_GC='' 363 OBJC_BOEHM_GC_INCLUDES='' 364 OBJC_BOEHM_GC_LIBS='' 365else 366 OBJC_GCFLAGS='-DOBJC_WITH_GC=1' 367 OBJC_BOEHM_GC='libobjc_gc$(libsuffix).la' 368 OBJC_BOEHM_GC_INCLUDES=$BDW_GC_CFLAGS 369 OBJC_BOEHM_GC_LIBS=$BDW_GC_LIBS 370fi 371AC_SUBST(OBJC_GCFLAGS) 372AC_SUBST(OBJC_BOEHM_GC) 373AC_SUBST(OBJC_BOEHM_GC_INCLUDES) 374AC_SUBST(OBJC_BOEHM_GC_LIBS) 375 376# Determine what GCC version number to use in filesystem paths. 377GCC_BASE_VER 378 379# ------ 380# Output 381# ------ 382 383if test ${multilib} = yes; then 384 multilib_arg="--enable-multilib" 385else 386 multilib_arg= 387fi 388 389AC_CONFIG_FILES([Makefile]) 390AC_OUTPUT 391