Makefile revision 1.116
11.116Spalle# $NetBSD: Makefile,v 1.116 2025/05/27 18:40:32 palle Exp $ 21.1Smrg 31.86Schristos.include <bsd.hostinit.mk> 41.1Smrg 51.16SmrgGCC_LANGUAGES=c c++ objc 61.98SmrgMODULE= ${EXTERNAL_GCC_SUBDIR} 71.45Smrg 81.66SmrgGCCDIST= ${.CURDIR}/../../external/gpl3/${EXTERNAL_GCC_SUBDIR}/dist 91.66SmrgGNUHOSTDIST= ${GCCDIST} 101.65Smrg 111.106Smrg.if ${HAVE_GCC} == 10 121.65SmrgMKNATIVE= ${.CURDIR}/mknative-gcc.old 131.60Sskrll.endif 141.60Sskrll 151.63Schristos# Defaults 161.75SmrgCC_FOR_BUILD= ${HOST_CXX:Q} 171.63SchristosMKNATIVE?= ${.CURDIR}/mknative-gcc 181.63Schristos 191.113Sgutterid# Force C++11 so builds succeed on hosts where this isn't the compiler 201.113Sgutterid# default, e.g., NetBSD 8.x with GCC 5.5. 211.113Sgutterid.if ${HAVE_GCC} > 10 221.113SgutteridHOST_CXXFLAGS+= -std=c++11 231.113Sgutterid.endif 241.113Sgutterid 251.28Smrg.if ${MACHINE_ARCH} == "x86_64" || ${MACHINE_ARCH} == "sparc64" 261.28SmrgMULTILIB_ARGS= --enable-multilib 271.28Smrg.else 281.28SmrgMULTILIB_ARGS= --disable-multilib 291.28Smrg.endif 301.28Smrg 311.71Smatt.if ${MKSOFTFLOAT} != "no" && ${MACHINE_CPU} != "m68k" \ 321.81Schs && ${MACHINE_CPU} != "or1k" && ${MACHINE_CPU} != "sh3" 331.36SmattSOFTFLOAT_ARGS= -with-float=soft 341.36Smatt.endif 351.36Smatt 361.69Smrg.include "gcc-version.mk" 371.69Smrg 381.31SdrochnerCOMMON_CONFIGURE_ARGS= --target=${MACHINE_GNU_PLATFORM} \ 391.31Sdrochner --enable-long-long \ 401.31Sdrochner --enable-threads \ 411.94Smaya --with-bugurl=http://www.NetBSD.org/support/send-pr.html \ 421.69Smrg --with-pkgversion="NetBSD ${NETBSD_GCC_VERSION}" \ 431.51Sjoerg --with-system-zlib \ 441.68Smrg --enable-__cxa_atexit \ 451.80Smrg --enable-libstdcxx-time=rt \ 461.89Smrg --enable-libstdcxx-threads \ 471.89Smrg --with-diagnostics-color=auto-if-env 481.31Sdrochner.if defined(GCC_CONFIG_ARCH.${MACHINE_ARCH}) 491.31SdrochnerCOMMON_CONFIGURE_ARGS+= --with-arch=${GCC_CONFIG_ARCH.${MACHINE_ARCH}} 501.31Sdrochner.endif 511.32Sad.if defined(GCC_CONFIG_TUNE.${MACHINE_ARCH}) 521.32SadCOMMON_CONFIGURE_ARGS+= --with-tune=${GCC_CONFIG_TUNE.${MACHINE_ARCH}} 531.32Sad.endif 541.31Sdrochner 551.93Smrg# Too many CPUs have one or both of these bugs, the common code should 561.93Smrg# default to safety. 571.93Smrg.if ${MACHINE_CPU} == "aarch64" 581.93SmrgCOMMON_CONFIGURE_ARGS+= --enable-fix-cortex-a53-835769 \ 591.93Smrg --enable-fix-cortex-a53-843419 601.93Smrg.endif 611.93Smrg 621.89Smrg.if ${HAVE_GCC} >= 7 631.89SmrgCOMMON_CONFIGURE_ARGS+= --with-default-libstdcxx-abi=new 641.89Smrg.endif 651.78Smrg 661.112Sgutterid# We enabled isl support for GCC 12. Move into normal segment when 671.111Smrg# removing GCC 10. 681.114Smrg.if ${HAVE_GCC} < 12 || defined(NOGCCISL) 691.114SmrgCOMMON_CONFIGURE_ARGS+= --without-isl 701.111Smrg.else 711.114SmrgCOMMON_CONFIGURE_ARGS+= --with-isl=${TOOLDIR} 721.111Smrg.endif 731.111Smrg 741.37SmrgCONFIGURE_ARGS= ${COMMON_CONFIGURE_ARGS} 751.37SmrgCONFIGURE_ARGS+= \ 761.63Schristos --with-sysroot=${DESTDIR} \ 771.37Smrg --with-mpc=${TOOLDIR} \ 781.37Smrg --with-mpfr=${TOOLDIR} \ 791.70Smrg --with-gmp=${TOOLDIR} \ 801.111Smrg ${ISL_CONFIGURE_ARGS} \ 811.31Sdrochner --disable-nls \ 821.28Smrg ${MULTILIB_ARGS} \ 831.36Smatt ${SOFTFLOAT_ARGS} \ 841.1Smrg --program-transform-name="s,^,${MACHINE_GNU_PLATFORM}-," \ 851.31Sdrochner --enable-languages="${GCC_LANGUAGES}" 861.1Smrg 871.64SchristosGCC_CPPFLAGS= -DNETBSD_TOOLS -DTARGET_SYSTEM_ROOT=0 \ 881.105Schristos -DTARGET_SYSTEM_ROOT_RELOCATABLE 891.105Schristos# ${HOST_CPPFLAGS} 901.35Sjoerg 911.109Srin.if ${MACHINE} == "vax" 921.109SrinGCC_CPPFLAGS+= -DNB_FIX_VAX_BACKEND 931.109Srin.endif 941.109Srin 951.1SmrgMAKE_ARGS= MACHINE= MAKEINFO=${TOOL_MAKEINFO:Q} \ 961.7Sthorpej LIBGCC= LIBGCC1= LIBGCC1_TEST= LIBGCC2= INSTALL_LIBGCC= \ 971.35Sjoerg EXTRA_PARTS= CPPFLAGS=${GCC_CPPFLAGS:Q} \ 981.116Spalle AR=${HOST_AR:Q} RANLIB=${HOST_RANLIB:Q} NM=${HOST_NM:Q} 991.1Smrg 1001.44SmrgCONFIGURE_ENV+= gcc_cv_libc_provides_ssp=yes \ 1011.44Smrg gcc_cv_as_sparc_gotdata_op=no 1021.25She 1031.59SskrllALL_TARGET= all-gcc 1041.59SskrllINSTALL_TARGET= install-gcc 1051.59Sskrll 1061.59Sskrll.include "${.CURDIR}/../Makefile.gmakehost" 1071.59SskrllBUILD_MAKE=${TOOL_GMAKE} 1081.59Sskrll 1091.59Sskrll# 1101.59Sskrll# mknative-gcc specific stuff 1111.59Sskrll# 1121.63Schristos 1131.68SmrgMKNATIVE_CONFIG_TARGET_LIBS= 1141.59Sskrll 1151.75SmrgMKNATIVE_CONFIG_TARGET_LIBS+= configure-target-libgcc 1161.75SmrgMKNATIVE_CONFIG_TARGET_LIBS+= configure-target-libgomp 1171.59Sskrll 1181.68SmrgMKNATIVE_CONFIG_TARGET_LIBS+= \ 1191.68Smrg configure-target-libstdc++-v3 \ 1201.89Smrg configure-target-libbacktrace \ 1211.68Smrg configure-target-libobjc 1221.68Smrg 1231.99Smrg.if ${HAVE_GCC} >= 9 1241.99Smrg# XXX needs to build libstdc++ fully, which fails 1251.99Smrg.if 0 1261.99SmrgMKNATIVE_CONFIG_TARGET_LIBS+= \ 1271.99Smrg configure-target-libsanitizer 1281.99Smrg.endif 1291.99Smrg.endif 1301.99Smrg 1311.107Smrg.if ${HAVE_GCC} <= 10 1321.107SmrgEXTRA_FILES= gcov-iov.h 1331.107Smrg.else 1341.107SmrgEXTRA_FILES= bversion.h gtyp-input.list 1351.107Smrg.endif 1361.107Smrg 1371.59SskrllBINENV= /usr/bin/env -i 1381.59Sskrll 1391.63Schristos 1401.16SmrgMKNATIVE_ENV= ${BINENV} ${CONFIGURE_ENV:NC*:NLD*} \ 1411.63Schristos CC_FOR_BUILD=${CC_FOR_BUILD:Q} \ 1421.63Schristos CXX_FOR_BUILD=${HOST_CXX:Q} \ 1431.63Schristos CFLAGS_FOR_BUILD="-I${TOOLDIR}/include" \ 1441.16Smrg CC=${CC:Q}' '${CCADDFLAGS:Q} \ 1451.20Smrg CXX=${CXX:Q}' '${CCADDFLAGS:Q}' '${CXXADDFLAGS:Q} \ 1461.89Smrg CPP=${CPP:Q}' '-I${DESTDIR}/usr/include' '-I${DESTDIR}/usr/include/g++/bits \ 1471.16Smrg CFLAGS= CPPFLAGS= CXXFLAGS= LDFLAGS= \ 1481.29Sapb AS=${AS:Q} AWK=${TOOL_AWK:Q} LD=${LD:Q} \ 1491.16Smrg MSGFMT=${TOOLDIR}/bin/${_TOOL_PREFIX}msgfmt \ 1501.29Sapb NM=${NM:Q} OBJDUMP=${OBJDUMP:Q} \ 1511.16Smrg XGETTEXT=${TOOLDIR}/bin/${_TOOL_PREFIX}xgettext \ 1521.16Smrg ac_cv_prog_cc_cross=yes \ 1531.16Smrg ac_cv_func_strcoll_works=yes \ 1541.39Smrg ac_cv_func_elf_getshstrndx=no \ 1551.16Smrg gcc_cv_func_printf_ptr=yes \ 1561.28Smrg gcc_cv_libc_provides_ssp=yes \ 1571.16Smrg gdb_cv_printf_has_long_double=yes \ 1581.16Smrg gdb_cv_printf_has_long_long=yes \ 1591.44Smrg gdb_cv_scanf_has_long_double=yes \ 1601.44Smrg gcc_cv_as_sparc_gotdata_op=no 1611.16Smrg 1621.38SmrgCXXADDFLAGS= --sysroot=${DESTDIR} 1631.39SmrgCCADDFLAGS= --sysroot=${DESTDIR} -L${DESTDIR}/lib -L${DESTDIR}/usr/lib -B${DESTDIR}/usr/lib/ -I${.OBJDIR}/.native/gcc/include 1641.1Smrg 1651.55Smrg# NEWCONFIGDIR can be set to a read-write location of the source tree 1661.55Smrg# in case the version being used is not. 1671.1SmrgNEWCONFIGDIR?= ${.CURDIR}/../.. 1681.1Smrg 1691.100SmrgGCC_MACHINE_ARCH= ${MACHINE_ARCH:S/earmv5/earm/} 1701.100Smrg 1711.1Smrgbootstrap-libgcc: .configure_done 1721.1Smrg @echo 'Creating files needed for libgcc by a native bootstrap build.' 1731.63Schristos (cd ${.OBJDIR}/build && ${BUILD_COMMAND} configure-target-libgcc) 1741.100Smrg @MAKE=${BUILD_MAKE:Q} ${HOST_SH} ${MKNATIVE} libgcc-bootstrap \ 1751.56Smrg ${.OBJDIR}/build ${NEWCONFIGDIR} ${NETBSDSRCDIR} \ 1761.100Smrg ${MACHINE_GNU_PLATFORM} ${GCC_MACHINE_ARCH} ${DESTDIR} ${TOOLDIR} 1771.63Schristos 1781.63Schristosbootstrap-libstdc++: .configure_done 1791.63Schristos @echo 'Creating files needed for libstdc++ by a native bootstrap build.' 1801.63Schristos (cd ${.OBJDIR}/build && ${BUILD_COMMAND} configure-target-libstdc++-v3) 1811.63Schristos @MAKE=${BUILD_MAKE:Q} ${HOST_SH} ${MKNATIVE} libstdc++-bootstrap \ 1821.63Schristos ${.OBJDIR}/build ${NEWCONFIGDIR} ${NETBSDSRCDIR} \ 1831.100Smrg ${MACHINE_GNU_PLATFORM} ${GCC_MACHINE_ARCH} ${DESTDIR} ${TOOLDIR} 1841.1Smrg 1851.1Smrgnative-gcc: .native/.configure_done 1861.1Smrg @echo 'Extracting GNU GCC configury for a native toolchain.' 1871.100Smrg @MAKE=${BUILD_MAKE:Q} ${HOST_SH} ${MKNATIVE} gcc \ 1881.56Smrg ${.OBJDIR}/.native ${NEWCONFIGDIR} ${NETBSDSRCDIR} \ 1891.100Smrg ${MACHINE_GNU_PLATFORM} ${GCC_MACHINE_ARCH} ${DESTDIR} ${TOOLDIR} 1901.1Smrg 1911.37SmrgNATIVE_CONFIGURE_ARGS= ${COMMON_CONFIGURE_ARGS} 1921.108Schristos.include "lgpl3.mk" 1931.48Sjoerg 1941.70Smrg.if ${MACHINE_ARCH} != "vax" 1951.48SjoergNATIVE_CONFIGURE_ARGS+= --enable-tls 1961.70Smrg.endif 1971.70Smrg.if !empty(MACHINE_ARCH:Mearm*) 1981.63SchristosNATIVE_CONFIGURE_ARGS+= --enable-initfini-array 1991.37Smrg.endif 2001.70Smrg 2011.73Smrg.if ${MACHINE_ARCH} == "m68000" 2021.73SmrgNATIVE_CONFIGURE_ARGS+= --disable-shared 2031.73Smrg.endif 2041.73Smrg 2051.78Smrg.if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "x86_64" 2061.78SmrgEXTRA_GCC_TARGETS= i386-builtin-types.inc 2071.78Smrg.endif 2081.96Schristos.if !empty(MACHINE_ARCH:M*arm*) 2091.96SchristosEXTRA_GCC_TARGETS= arm-cpu-data.h arm-cpu-cdata.h 2101.96Schristos.endif 2111.78Smrg 2121.37SmrgNATIVE_CONFIGURE_ARGS+= \ 2131.31Sdrochner --disable-multilib \ 2141.41Smrg --disable-libstdcxx-pch \ 2151.66Smrg --build=`${GCCDIST}/config.guess` \ 2161.63Schristos --host=${MACHINE_GNU_PLATFORM} \ 2171.63Schristos --with-sysroot=${DESTDIR} 2181.63SchristosMKENV_BUILD_MAKE=cd .native && ${MKNATIVE_ENV} ${BUILD_MAKE} 2191.31Sdrochner 2201.1Smrg.native/.configure_done: ${_GNU_CFGSRC} ${.CURDIR}/Makefile 2211.89Smrg mkdir .native .native/gcc .native/gcc/include 2>/dev/null || true 2221.89Smrg # If this fails, gthreads won't be configured initially, but reconfig will. 2231.90Smrg cp ${DESTDIR}/usr/include/g++/bits/gthr-default.h .native/gcc/include || true 2241.9Smrg PATH=${TOOLDIR}/bin:$$PATH; export PATH; \ 2251.16Smrg (cd .native && ${MKNATIVE_ENV} \ 2261.8Slukem ${HOST_SH} ${GNUHOSTDIST}/configure \ 2271.31Sdrochner ${NATIVE_CONFIGURE_ARGS}) && \ 2281.63Schristos (${MKENV_BUILD_MAKE} all-build-libiberty) && \ 2291.75Smrg ((${MKENV_BUILD_MAKE} all-libcpp) && \ 2301.63Schristos (${MKENV_BUILD_MAKE} all-libbacktrace) && \ 2311.63Schristos (${MKENV_BUILD_MAKE} all-libdecnumber) || true) 2321.63Schristos PATH=${TOOLDIR}/bin:$$PATH; export PATH; \ 2331.63Schristos (${MKENV_BUILD_MAKE} configure-gcc configure-libcpp) && \ 2341.63Schristos (${MKENV_BUILD_MAKE} configure-libiberty) && \ 2351.63Schristos (${MKENV_BUILD_MAKE} configure-libdecnumber) 2361.16Smrg # edit Makefile so that maybe-all-gcc does not depend on all-gcc any more. 2371.16Smrg (cd .native && mv Makefile Makefile.config && \ 2381.30Sapb ${TOOL_SED} -e 's/\(maybe-all-gcc:\) all-gcc/\1/' \ 2391.42Smrg -e 's/\(maybe-all-target-libgcc:\) all-target-libgcc/\1/' \ 2401.41Smrg < Makefile.config > Makefile) 2411.41Smrg PATH=${TOOLDIR}/bin:$$PATH; export PATH; \ 2421.107Smrg (cd .native/gcc && ${MKNATIVE_ENV} ${BUILD_MAKE} -e tree-check.h config.h multilib.h ${EXTRA_FILES}) 2431.16Smrg PATH=${TOOLDIR}/bin:$$PATH; export PATH; \ 2441.84Smrg (cd .native/gcc && ${MKNATIVE_ENV} ${BUILD_MAKE} -e libgcc.mvars tconfig.h); \ 2451.42Smrg (cd .native && touch gcc/cc1obj gcc/cc1plus gcc/f771 gcc/libgcc.a gcc/libgcc_s.so) 2461.101Smrg PATH=${TOOLDIR}/bin:$$PATH; export PATH; \ 2471.102Smrg (cd .native/gcc && ${MKNATIVE_ENV} ${BUILD_MAKE} -e s-omp-device-properties-h) 2481.79Smrg.if defined(EXTRA_GCC_TARGETS) 2491.79Smrg PATH=${TOOLDIR}/bin:$$PATH; export PATH; \ 2501.78Smrg (cd .native/gcc && ${MKNATIVE_ENV} ${BUILD_MAKE} -e ${EXTRA_GCC_TARGETS}) 2511.78Smrg.endif 2521.42Smrg.for _lib in ${MKNATIVE_CONFIG_TARGET_LIBS} 2531.39Smrg PATH=${TOOLDIR}/bin:$$PATH; export PATH; \ 2541.42Smrg (cd .native && ${MKNATIVE_ENV} ${BUILD_MAKE} \ 2551.42Smrg ${_lib} \ 2561.1Smrg ALL_GCC_C= ALL_GCC_CXX= \ 2571.1Smrg CC_FOR_TARGET=${CC:Q}' '${CCADDFLAGS:Q} \ 2581.20Smrg CXX_FOR_TARGET=${CXX:Q}' '${CCADDFLAGS:Q}' '${CXXADDFLAGS:Q} \ 2591.22Smrg RAW_CXX_FOR_TARGET=${CXX:Q}' '${CCADDFLAGS:Q}' '${CXXADDFLAGS:Q} \ 2601.20Smrg CPP=${CPP:Q}' '-I${DESTDIR}/usr/include \ 2611.20Smrg ac_cv_prog_cc_cross=yes) && \ 2621.16Smrg true 2631.42Smrg.endfor 2641.16Smrg PATH=${TOOLDIR}/bin:$$PATH; export PATH; \ 2651.1Smrg (cd .native/${MACHINE_GNU_PLATFORM}/libstdc++-v3/include && \ 2661.20Smrg ${MKNATIVE_ENV} ${BUILD_MAKE} \ 2671.20Smrg CC_FOR_TARGET=${CC:Q}' '${CCADDFLAGS:Q} \ 2681.20Smrg CXX_FOR_TARGET=${CXX:Q}' '${CCADDFLAGS:Q}' '${CXXADDFLAGS:Q} \ 2691.20Smrg CPP=${CPP:Q}' '-I${DESTDIR}/usr/include \ 2701.20Smrg all-local) && \ 2711.16Smrg true 2721.1Smrg @touch $@ 2731.1Smrg 2741.97Smrg.if !defined(PREV_GCC) 2751.97Smrg. if exists(PREV_GCC) 2761.97SmrgPREV_GCC!= cat PREV_GCC 2771.97Smrg. else 2781.97SmrgPREV_GCC= 2791.97Smrg. endif 2801.97Smrg.endif 2811.97Smrg 2821.97SmrgCLEANFILES+= PREV_GCC 2831.97Smrg 2841.110Smrg# Include the local NetBSD GCC version so that bumps to it trigger rebuilds. 2851.110SmrgNETBSD_GCC_VERSION_NOSPACE= ${NETBSD_GCC_VERSION:S/ /-/gW} 2861.110Smrg 2871.97Smrgrealall realdepend: .MAKE 2881.110Smrg.if !empty(PREV_GCC) && "${PREV_GCC}" != "${EXTERNAL_GCC_SUBDIR}-${HAVE_GCC}-${NETBSD_GCC_VERSION_NOSPACE}" 2891.97Smrg @echo "*** WARNING: GCC has changed version?" 2901.97Smrg @echo "*** PREV_GCC '${PREV_GCC}'" 2911.110Smrg @echo "*** NETBSD_GCC_VERSION_NOSPACE '${NETBSD_GCC_VERSION_NOSPACE}'" 2921.110Smrg @echo "*** != EXTERNAL_GCC_SUBDIR-HAVE_GCC-NETBSD_GCC_VERSION_NOSPACE:" 2931.110Smrg @echo "*** != '${EXTERNAL_GCC_SUBDIR}-${HAVE_GCC}-${NETBSD_GCC_VERSION_NOSPACE}'" 2941.97Smrg @echo "*** Cleaning mis-matched tools/gcc" 2951.97Smrg rm -f PREV_GCC 2961.97Smrg (cd ${.CURDIR} && ${MAKE} cleandir) 2971.97Smrg.endif 2981.110Smrg echo ${EXTERNAL_GCC_SUBDIR}-${HAVE_GCC}-${NETBSD_GCC_VERSION_NOSPACE} >PREV_GCC 2991.97Smrg 3001.1Smrgclean: clean.native 3011.1Smrgclean.native: 3021.1Smrg -rm -r -f .native 303