Home | History | Annotate | Line # | Download | only in gcc
      1  1.118       mrg #	$NetBSD: Makefile,v 1.118 2025/09/17 02:17:51 mrg Exp $
      2    1.1       mrg 
      3   1.86  christos .include <bsd.hostinit.mk>
      4    1.1       mrg 
      5   1.16       mrg GCC_LANGUAGES=c c++ objc
      6   1.98       mrg MODULE=		${EXTERNAL_GCC_SUBDIR}
      7   1.45       mrg 
      8   1.66       mrg GCCDIST=	${.CURDIR}/../../external/gpl3/${EXTERNAL_GCC_SUBDIR}/dist
      9   1.66       mrg GNUHOSTDIST=	${GCCDIST}
     10   1.65       mrg 
     11  1.117       mrg MKNATIVE=		${.CURDIR}/mknative-${EXTERNAL_GCC_SUBDIR}
     12   1.60     skrll 
     13   1.63  christos # Defaults
     14   1.75       mrg CC_FOR_BUILD=		${HOST_CXX:Q}
     15   1.63  christos MKNATIVE?=		${.CURDIR}/mknative-gcc
     16   1.63  christos 
     17  1.113  gutterid # Force C++11 so builds succeed on hosts where this isn't the compiler
     18  1.113  gutterid # default, e.g., NetBSD 8.x with GCC 5.5.
     19  1.113  gutterid .if ${HAVE_GCC} > 10
     20  1.113  gutterid HOST_CXXFLAGS+=		-std=c++11
     21  1.113  gutterid .endif
     22  1.113  gutterid 
     23   1.28       mrg .if ${MACHINE_ARCH} == "x86_64" || ${MACHINE_ARCH} == "sparc64"
     24   1.28       mrg MULTILIB_ARGS= --enable-multilib
     25   1.28       mrg .else
     26   1.28       mrg MULTILIB_ARGS= --disable-multilib
     27   1.28       mrg .endif
     28   1.28       mrg 
     29   1.71      matt .if ${MKSOFTFLOAT} != "no" && ${MACHINE_CPU} != "m68k" \
     30   1.81       chs     && ${MACHINE_CPU} != "or1k" && ${MACHINE_CPU} != "sh3"
     31   1.36      matt SOFTFLOAT_ARGS=	-with-float=soft
     32   1.36      matt .endif
     33   1.36      matt 
     34   1.69       mrg .include "gcc-version.mk"
     35   1.69       mrg 
     36   1.31  drochner COMMON_CONFIGURE_ARGS=	--target=${MACHINE_GNU_PLATFORM} \
     37   1.31  drochner 			--enable-long-long \
     38   1.31  drochner 			--enable-threads \
     39   1.94      maya 			--with-bugurl=http://www.NetBSD.org/support/send-pr.html \
     40   1.69       mrg 			--with-pkgversion="NetBSD ${NETBSD_GCC_VERSION}" \
     41   1.51     joerg 			--with-system-zlib \
     42   1.68       mrg 			--enable-__cxa_atexit \
     43   1.80       mrg 			--enable-libstdcxx-time=rt \
     44   1.89       mrg 			--enable-libstdcxx-threads \
     45   1.89       mrg 			--with-diagnostics-color=auto-if-env
     46   1.31  drochner .if defined(GCC_CONFIG_ARCH.${MACHINE_ARCH})
     47   1.31  drochner COMMON_CONFIGURE_ARGS+=	--with-arch=${GCC_CONFIG_ARCH.${MACHINE_ARCH}}
     48   1.31  drochner .endif
     49   1.32        ad .if defined(GCC_CONFIG_TUNE.${MACHINE_ARCH})
     50   1.32        ad COMMON_CONFIGURE_ARGS+=	--with-tune=${GCC_CONFIG_TUNE.${MACHINE_ARCH}}
     51   1.32        ad .endif
     52   1.31  drochner 
     53   1.93       mrg # Too many CPUs have one or both of these bugs, the common code should
     54   1.93       mrg # default to safety.
     55   1.93       mrg .if ${MACHINE_CPU} == "aarch64"
     56   1.93       mrg COMMON_CONFIGURE_ARGS+=	--enable-fix-cortex-a53-835769 \
     57   1.93       mrg 			--enable-fix-cortex-a53-843419
     58   1.93       mrg .endif
     59   1.93       mrg 
     60   1.89       mrg COMMON_CONFIGURE_ARGS+=	--with-default-libstdcxx-abi=new
     61   1.78       mrg 
     62  1.114       mrg .if ${HAVE_GCC} < 12 || defined(NOGCCISL)
     63  1.114       mrg COMMON_CONFIGURE_ARGS+=	--without-isl
     64  1.111       mrg .else
     65  1.114       mrg COMMON_CONFIGURE_ARGS+=	--with-isl=${TOOLDIR}
     66  1.111       mrg .endif
     67  1.111       mrg 
     68  1.118       mrg .if ${HAVE_GCC} >= 14 && ${MACHINE} == "ia64"
     69  1.118       mrg COMMON_CONFIGURE_ARGS+=	--enable-obsolete
     70  1.118       mrg .endif
     71  1.118       mrg 
     72   1.37       mrg CONFIGURE_ARGS=	${COMMON_CONFIGURE_ARGS}
     73   1.37       mrg CONFIGURE_ARGS+= \
     74   1.63  christos 		--with-sysroot=${DESTDIR} \
     75   1.37       mrg 		--with-mpc=${TOOLDIR} \
     76   1.37       mrg 		--with-mpfr=${TOOLDIR} \
     77   1.70       mrg 		--with-gmp=${TOOLDIR} \
     78  1.111       mrg 		${ISL_CONFIGURE_ARGS} \
     79   1.31  drochner 		--disable-nls \
     80   1.28       mrg 		${MULTILIB_ARGS} \
     81   1.36      matt 		${SOFTFLOAT_ARGS} \
     82    1.1       mrg 		--program-transform-name="s,^,${MACHINE_GNU_PLATFORM}-," \
     83   1.31  drochner 		--enable-languages="${GCC_LANGUAGES}"
     84    1.1       mrg 
     85   1.64  christos GCC_CPPFLAGS=	-DNETBSD_TOOLS -DTARGET_SYSTEM_ROOT=0 \
     86  1.105  christos 		-DTARGET_SYSTEM_ROOT_RELOCATABLE 
     87  1.105  christos #		${HOST_CPPFLAGS}
     88   1.35     joerg 
     89  1.109       rin .if ${MACHINE} == "vax"
     90  1.109       rin GCC_CPPFLAGS+=	-DNB_FIX_VAX_BACKEND
     91  1.109       rin .endif
     92  1.109       rin 
     93    1.1       mrg MAKE_ARGS=	MACHINE= MAKEINFO=${TOOL_MAKEINFO:Q} \
     94    1.7   thorpej 		LIBGCC= LIBGCC1= LIBGCC1_TEST= LIBGCC2= INSTALL_LIBGCC= \
     95   1.35     joerg 		EXTRA_PARTS= CPPFLAGS=${GCC_CPPFLAGS:Q} \
     96  1.116     palle 		AR=${HOST_AR:Q} RANLIB=${HOST_RANLIB:Q} NM=${HOST_NM:Q}
     97    1.1       mrg 
     98   1.44       mrg CONFIGURE_ENV+= gcc_cv_libc_provides_ssp=yes \
     99   1.44       mrg 		gcc_cv_as_sparc_gotdata_op=no
    100   1.25        he 
    101   1.59     skrll ALL_TARGET=	all-gcc
    102   1.59     skrll INSTALL_TARGET=	install-gcc
    103   1.59     skrll 
    104   1.59     skrll .include "${.CURDIR}/../Makefile.gmakehost"
    105   1.59     skrll BUILD_MAKE=${TOOL_GMAKE}
    106   1.59     skrll 
    107   1.59     skrll #
    108   1.59     skrll # mknative-gcc specific stuff
    109   1.59     skrll #
    110   1.63  christos 
    111   1.68       mrg MKNATIVE_CONFIG_TARGET_LIBS=
    112   1.59     skrll 
    113   1.75       mrg MKNATIVE_CONFIG_TARGET_LIBS+=	configure-target-libgcc
    114   1.75       mrg MKNATIVE_CONFIG_TARGET_LIBS+=	configure-target-libgomp
    115   1.59     skrll 
    116   1.68       mrg MKNATIVE_CONFIG_TARGET_LIBS+= \
    117   1.68       mrg 	configure-target-libstdc++-v3 \
    118   1.89       mrg 	configure-target-libbacktrace \
    119   1.68       mrg 	configure-target-libobjc
    120   1.68       mrg 
    121   1.99       mrg # XXX needs to build libstdc++ fully, which fails
    122   1.99       mrg .if 0
    123   1.99       mrg MKNATIVE_CONFIG_TARGET_LIBS+= \
    124   1.99       mrg 	configure-target-libsanitizer
    125   1.99       mrg .endif
    126   1.99       mrg 
    127  1.107       mrg EXTRA_FILES=	bversion.h gtyp-input.list
    128  1.107       mrg 
    129   1.59     skrll BINENV=		/usr/bin/env -i
    130   1.59     skrll 
    131   1.63  christos 
    132   1.16       mrg MKNATIVE_ENV=	${BINENV} ${CONFIGURE_ENV:NC*:NLD*} \
    133   1.63  christos 			CC_FOR_BUILD=${CC_FOR_BUILD:Q} \
    134   1.63  christos 			CXX_FOR_BUILD=${HOST_CXX:Q} \
    135   1.63  christos 			CFLAGS_FOR_BUILD="-I${TOOLDIR}/include" \
    136   1.16       mrg 			CC=${CC:Q}' '${CCADDFLAGS:Q} \
    137   1.20       mrg 			CXX=${CXX:Q}' '${CCADDFLAGS:Q}' '${CXXADDFLAGS:Q} \
    138   1.89       mrg 			CPP=${CPP:Q}' '-I${DESTDIR}/usr/include' '-I${DESTDIR}/usr/include/g++/bits \
    139   1.16       mrg 			CFLAGS= CPPFLAGS= CXXFLAGS= LDFLAGS= \
    140   1.29       apb 			AS=${AS:Q} AWK=${TOOL_AWK:Q} LD=${LD:Q} \
    141   1.16       mrg 			MSGFMT=${TOOLDIR}/bin/${_TOOL_PREFIX}msgfmt \
    142   1.29       apb 			NM=${NM:Q} OBJDUMP=${OBJDUMP:Q} \
    143   1.16       mrg 			XGETTEXT=${TOOLDIR}/bin/${_TOOL_PREFIX}xgettext \
    144   1.16       mrg 			ac_cv_prog_cc_cross=yes \
    145   1.16       mrg 			ac_cv_func_strcoll_works=yes \
    146   1.39       mrg 			ac_cv_func_elf_getshstrndx=no \
    147   1.16       mrg 			gcc_cv_func_printf_ptr=yes \
    148   1.28       mrg 			gcc_cv_libc_provides_ssp=yes \
    149   1.16       mrg 			gdb_cv_printf_has_long_double=yes \
    150   1.16       mrg 			gdb_cv_printf_has_long_long=yes \
    151   1.44       mrg 			gdb_cv_scanf_has_long_double=yes \
    152   1.44       mrg 			gcc_cv_as_sparc_gotdata_op=no
    153   1.16       mrg 
    154   1.38       mrg CXXADDFLAGS=	--sysroot=${DESTDIR}
    155   1.39       mrg CCADDFLAGS=	--sysroot=${DESTDIR} -L${DESTDIR}/lib -L${DESTDIR}/usr/lib -B${DESTDIR}/usr/lib/ -I${.OBJDIR}/.native/gcc/include
    156    1.1       mrg 
    157   1.55       mrg # NEWCONFIGDIR can be set to a read-write location of the source tree
    158   1.55       mrg # in case the version being used is not.
    159    1.1       mrg NEWCONFIGDIR?=	${.CURDIR}/../..
    160    1.1       mrg 
    161  1.100       mrg GCC_MACHINE_ARCH=	${MACHINE_ARCH:S/earmv5/earm/}
    162  1.100       mrg 
    163    1.1       mrg bootstrap-libgcc: .configure_done
    164    1.1       mrg 	@echo 'Creating files needed for libgcc by a native bootstrap build.'
    165   1.63  christos 	(cd ${.OBJDIR}/build && ${BUILD_COMMAND} configure-target-libgcc)
    166  1.100       mrg 	@MAKE=${BUILD_MAKE:Q} ${HOST_SH} ${MKNATIVE} libgcc-bootstrap \
    167   1.56       mrg 		${.OBJDIR}/build ${NEWCONFIGDIR} ${NETBSDSRCDIR} \
    168  1.100       mrg 		${MACHINE_GNU_PLATFORM} ${GCC_MACHINE_ARCH} ${DESTDIR} ${TOOLDIR}
    169   1.63  christos 
    170   1.63  christos bootstrap-libstdc++: .configure_done
    171   1.63  christos 	@echo 'Creating files needed for libstdc++ by a native bootstrap build.'
    172   1.63  christos 	(cd ${.OBJDIR}/build && ${BUILD_COMMAND} configure-target-libstdc++-v3)
    173   1.63  christos 	@MAKE=${BUILD_MAKE:Q} ${HOST_SH} ${MKNATIVE} libstdc++-bootstrap \
    174   1.63  christos 		${.OBJDIR}/build ${NEWCONFIGDIR} ${NETBSDSRCDIR} \
    175  1.100       mrg 		${MACHINE_GNU_PLATFORM} ${GCC_MACHINE_ARCH} ${DESTDIR} ${TOOLDIR}
    176    1.1       mrg 
    177    1.1       mrg native-gcc: .native/.configure_done
    178    1.1       mrg 	@echo 'Extracting GNU GCC configury for a native toolchain.'
    179  1.100       mrg 	@MAKE=${BUILD_MAKE:Q} ${HOST_SH} ${MKNATIVE} gcc \
    180   1.56       mrg 		${.OBJDIR}/.native ${NEWCONFIGDIR} ${NETBSDSRCDIR} \
    181  1.100       mrg 		${MACHINE_GNU_PLATFORM} ${GCC_MACHINE_ARCH} ${DESTDIR} ${TOOLDIR}
    182    1.1       mrg 
    183   1.37       mrg NATIVE_CONFIGURE_ARGS=	${COMMON_CONFIGURE_ARGS}
    184  1.108  christos .include "lgpl3.mk"
    185   1.48     joerg 
    186   1.70       mrg .if ${MACHINE_ARCH} != "vax"
    187   1.48     joerg NATIVE_CONFIGURE_ARGS+= --enable-tls
    188   1.70       mrg .endif
    189   1.70       mrg .if !empty(MACHINE_ARCH:Mearm*)
    190   1.63  christos NATIVE_CONFIGURE_ARGS+=	--enable-initfini-array
    191   1.37       mrg .endif
    192   1.70       mrg 
    193   1.73       mrg .if ${MACHINE_ARCH} == "m68000"
    194   1.73       mrg NATIVE_CONFIGURE_ARGS+= --disable-shared
    195   1.73       mrg .endif
    196   1.73       mrg 
    197   1.78       mrg .if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "x86_64"
    198   1.78       mrg EXTRA_GCC_TARGETS=	i386-builtin-types.inc
    199   1.78       mrg .endif
    200   1.96  christos .if !empty(MACHINE_ARCH:M*arm*)
    201   1.96  christos EXTRA_GCC_TARGETS=	arm-cpu-data.h arm-cpu-cdata.h
    202   1.96  christos .endif
    203   1.78       mrg 
    204   1.37       mrg NATIVE_CONFIGURE_ARGS+=	\
    205   1.31  drochner 			--disable-multilib \
    206   1.41       mrg 			--disable-libstdcxx-pch \
    207   1.66       mrg 			--build=`${GCCDIST}/config.guess` \
    208   1.63  christos 			--host=${MACHINE_GNU_PLATFORM} \
    209   1.63  christos 			--with-sysroot=${DESTDIR}
    210   1.63  christos MKENV_BUILD_MAKE=cd .native && ${MKNATIVE_ENV} ${BUILD_MAKE}
    211   1.31  drochner 
    212    1.1       mrg .native/.configure_done: ${_GNU_CFGSRC} ${.CURDIR}/Makefile
    213   1.89       mrg 	mkdir .native .native/gcc .native/gcc/include 2>/dev/null || true
    214   1.89       mrg 	# If this fails, gthreads won't be configured initially, but reconfig will.
    215   1.90       mrg 	cp ${DESTDIR}/usr/include/g++/bits/gthr-default.h .native/gcc/include || true
    216    1.9       mrg 	PATH=${TOOLDIR}/bin:$$PATH; export PATH; \
    217   1.16       mrg 		(cd .native && ${MKNATIVE_ENV} \
    218    1.8     lukem 			${HOST_SH} ${GNUHOSTDIST}/configure \
    219   1.31  drochner 			${NATIVE_CONFIGURE_ARGS}) && \
    220   1.63  christos 		(${MKENV_BUILD_MAKE} all-build-libiberty) && \
    221   1.75       mrg 		((${MKENV_BUILD_MAKE} all-libcpp) && \
    222   1.63  christos 		 (${MKENV_BUILD_MAKE} all-libbacktrace) && \
    223   1.63  christos 		 (${MKENV_BUILD_MAKE} all-libdecnumber) || true)
    224   1.63  christos 	PATH=${TOOLDIR}/bin:$$PATH; export PATH; \
    225   1.63  christos 		(${MKENV_BUILD_MAKE} configure-gcc configure-libcpp) && \
    226   1.63  christos 		(${MKENV_BUILD_MAKE} configure-libiberty) && \
    227   1.63  christos 		(${MKENV_BUILD_MAKE} configure-libdecnumber)
    228   1.16       mrg 	# edit Makefile so that maybe-all-gcc does not depend on all-gcc any more.
    229   1.16       mrg 		(cd .native && mv Makefile Makefile.config && \
    230   1.30       apb 			${TOOL_SED} -e 's/\(maybe-all-gcc:\) all-gcc/\1/' \
    231   1.42       mrg 				    -e 's/\(maybe-all-target-libgcc:\) all-target-libgcc/\1/' \
    232   1.41       mrg 				< Makefile.config > Makefile)
    233   1.41       mrg 	PATH=${TOOLDIR}/bin:$$PATH; export PATH; \
    234  1.107       mrg 		(cd .native/gcc && ${MKNATIVE_ENV} ${BUILD_MAKE} -e tree-check.h config.h multilib.h ${EXTRA_FILES})
    235   1.16       mrg 	PATH=${TOOLDIR}/bin:$$PATH; export PATH; \
    236   1.84       mrg 		(cd .native/gcc && ${MKNATIVE_ENV} ${BUILD_MAKE} -e libgcc.mvars tconfig.h); \
    237   1.42       mrg 		(cd .native && touch gcc/cc1obj gcc/cc1plus gcc/f771 gcc/libgcc.a gcc/libgcc_s.so)
    238  1.101       mrg 	PATH=${TOOLDIR}/bin:$$PATH; export PATH; \
    239  1.102       mrg 		(cd .native/gcc && ${MKNATIVE_ENV} ${BUILD_MAKE} -e s-omp-device-properties-h)
    240   1.79       mrg .if defined(EXTRA_GCC_TARGETS)
    241   1.79       mrg 	PATH=${TOOLDIR}/bin:$$PATH; export PATH; \
    242   1.78       mrg 		(cd .native/gcc && ${MKNATIVE_ENV} ${BUILD_MAKE} -e ${EXTRA_GCC_TARGETS})
    243   1.78       mrg .endif
    244   1.42       mrg .for _lib in ${MKNATIVE_CONFIG_TARGET_LIBS}
    245   1.39       mrg 	PATH=${TOOLDIR}/bin:$$PATH; export PATH; \
    246   1.42       mrg 		(cd .native && ${MKNATIVE_ENV} ${BUILD_MAKE} \
    247   1.42       mrg 			${_lib} \
    248    1.1       mrg 			ALL_GCC_C= ALL_GCC_CXX= \
    249    1.1       mrg 			CC_FOR_TARGET=${CC:Q}' '${CCADDFLAGS:Q} \
    250   1.20       mrg 			CXX_FOR_TARGET=${CXX:Q}' '${CCADDFLAGS:Q}' '${CXXADDFLAGS:Q} \
    251   1.22       mrg 			RAW_CXX_FOR_TARGET=${CXX:Q}' '${CCADDFLAGS:Q}' '${CXXADDFLAGS:Q} \
    252   1.20       mrg 			CPP=${CPP:Q}' '-I${DESTDIR}/usr/include \
    253   1.20       mrg 			ac_cv_prog_cc_cross=yes) && \
    254   1.16       mrg 	true
    255   1.42       mrg .endfor
    256   1.16       mrg 	PATH=${TOOLDIR}/bin:$$PATH; export PATH; \
    257    1.1       mrg 		(cd .native/${MACHINE_GNU_PLATFORM}/libstdc++-v3/include && \
    258   1.20       mrg 			${MKNATIVE_ENV} ${BUILD_MAKE} \
    259   1.20       mrg 			CC_FOR_TARGET=${CC:Q}' '${CCADDFLAGS:Q} \
    260   1.20       mrg 			CXX_FOR_TARGET=${CXX:Q}' '${CCADDFLAGS:Q}' '${CXXADDFLAGS:Q} \
    261   1.20       mrg 			CPP=${CPP:Q}' '-I${DESTDIR}/usr/include \
    262   1.20       mrg 			all-local) && \
    263   1.16       mrg 	true
    264    1.1       mrg 	@touch $@
    265    1.1       mrg 
    266   1.97       mrg .if !defined(PREV_GCC)
    267   1.97       mrg .  if exists(PREV_GCC)
    268   1.97       mrg PREV_GCC!=	cat PREV_GCC
    269   1.97       mrg .  else
    270   1.97       mrg PREV_GCC=
    271   1.97       mrg .  endif
    272   1.97       mrg .endif
    273   1.97       mrg 
    274   1.97       mrg CLEANFILES+=	PREV_GCC
    275   1.97       mrg 
    276  1.110       mrg # Include the local NetBSD GCC version so that bumps to it trigger rebuilds.
    277  1.110       mrg NETBSD_GCC_VERSION_NOSPACE= ${NETBSD_GCC_VERSION:S/ /-/gW}
    278  1.110       mrg 
    279   1.97       mrg realall realdepend: .MAKE
    280  1.110       mrg .if !empty(PREV_GCC) && "${PREV_GCC}" != "${EXTERNAL_GCC_SUBDIR}-${HAVE_GCC}-${NETBSD_GCC_VERSION_NOSPACE}"
    281   1.97       mrg 	@echo "*** WARNING: GCC has changed version?"
    282   1.97       mrg 	@echo "*** PREV_GCC '${PREV_GCC}'"
    283  1.110       mrg 	@echo "*** NETBSD_GCC_VERSION_NOSPACE '${NETBSD_GCC_VERSION_NOSPACE}'"
    284  1.110       mrg 	@echo "***     !=  EXTERNAL_GCC_SUBDIR-HAVE_GCC-NETBSD_GCC_VERSION_NOSPACE:"
    285  1.110       mrg 	@echo "***     !=  '${EXTERNAL_GCC_SUBDIR}-${HAVE_GCC}-${NETBSD_GCC_VERSION_NOSPACE}'"
    286   1.97       mrg 	@echo "*** Cleaning mis-matched tools/gcc"
    287   1.97       mrg 	rm -f PREV_GCC
    288   1.97       mrg 	(cd ${.CURDIR} && ${MAKE} cleandir)
    289   1.97       mrg .endif
    290  1.110       mrg 	echo ${EXTERNAL_GCC_SUBDIR}-${HAVE_GCC}-${NETBSD_GCC_VERSION_NOSPACE} >PREV_GCC
    291   1.97       mrg 
    292    1.1       mrg clean: clean.native
    293    1.1       mrg clean.native:
    294    1.1       mrg 	-rm -r -f .native
    295