pkgsrc/lang/gcc9/Makefile
tnn e557fc6c76 lang/gcc*: skip some RELRO checks when --disable-boostrap
This relates to the case when GCC is built using clang host CC. In that
case the runtime libraries are not built with RELRO for some reason.

for the gcc*-libs/ packages, mark them as RELRO_SUPPORTED=no unconditionally.
RELRO status depends on how the parent gcc package was built so we don't
need nor care about the RELRO status here.
2021-10-12 13:46:14 +00:00

211 lines
7.1 KiB
Makefile

# $NetBSD: Makefile,v 1.34 2021/10/12 13:46:15 tnn Exp $
GCC_PKGNAME= gcc9
.include "version.mk"
DISTNAME= gcc-${GCC9_DIST_VERSION}
PKGNAME= ${GCC_PKGNAME}-${GCC9_DIST_VERSION}
## When bumping the PKGREVISION of this package the PKGREVISION of
## lang/gcc9-libs needs to be bumped to be at least 1 more than the
## PKGREVISION of this package!
PKGREVISION= 7
CATEGORIES= lang
MASTER_SITES= ${MASTER_SITE_GNU:=gcc/gcc-${GCC9_VERSION}/}
EXTRACT_SUFX= .tar.xz
MAINTAINER= pkgsrc-users@NetBSD.org
HOMEPAGE= https://gcc.gnu.org/
COMMENT= The GNU Compiler Collection (GCC) - Release 9 Series
LICENSE= gnu-gpl-v2 AND gnu-gpl-v3 AND gnu-lgpl-v2 AND gnu-lgpl-v3
# These are conditionally overwritten depending on the package options.
DISTFILES= ${DEFAULT_DISTFILES}
EXTRACT_ONLY= ${DEFAULT_DISTFILES}
USE_LANGUAGES= c c++
USE_TOOLS+= gmake makeinfo sed:run tar:build
USE_TOOLS.NetBSD+= gsed
# Relocations result in a linker error on AArch64, but not x86.
MKPIE_SUPPORTED= no
GNU_CONFIGURE= yes
GNU_CONFIGURE_STRICT= no # has several configure scripts
OBJDIR= ${WRKDIR}/build
CONFIGURE_DIRS= ${OBJDIR}
CONFIGURE_SCRIPT= ../${DISTNAME}/configure
GCC9_SUBPREFIX= gcc9
GCC9_PREFIX= ${PREFIX}/${GCC9_SUBPREFIX}
GNU_CONFIGURE_PREFIX= ${GCC9_PREFIX}
INFO_FILES= yes
CONFIGURE_ARGS+= --disable-libstdcxx-pch
CONFIGURE_ARGS+= --with-system-zlib
CONFIGURE_ARGS.Linux+= --without-system-zlib # to prevent "-lz not found"
UNLIMIT_RESOURCES= datasize stacksize
CHECK_PORTABILITY_SKIP+= contrib/* # not needed during the build
.include "../../mk/bsd.prefs.mk"
# Even though the build and target host is x86_64-sun-solaris2.11,
# it fails to compile some seemingly linux-specific code.
# https://bugs.llvm.org/show_bug.cgi?id=44665
#
# libtool: compile: /home/pbulk/build/lang/gcc9/work/build/./gcc/xgcc [...]
# -c ../../../../gcc-9.2.0/libsanitizer/sanitizer_common/sanitizer_linux.cc
# ...
# ../../../../gcc-9.2.0/libsanitizer/sanitizer_common/sanitizer_linux.cc: In constructor '__sanitizer::ThreadLister::ThreadLister(__sanitizer::pid_t)':
# ../../../../gcc-9.2.0/libsanitizer/sanitizer_common/sanitizer_linux.cc:932:63: error: 'O_DIRECTORY' was not declared in this scope
# 932 | descriptor_ = internal_open(task_directory_path, O_RDONLY | O_DIRECTORY);
# | ^~~~~~~~~~~
BROKEN_ON_PLATFORM+= SunOS-*-x86_64
# Configuring stage 1 in ./gcc
# ...
# *** Configuration aarch64--netbsd not supported
NOT_FOR_PLATFORM+= NetBSD-*-aarch64
# *** Configuration aarch64-apple-darwin20 not supported
NOT_FOR_PLATFORM+= Darwin-*-aarch64
LANGS= c
# In some cases LINKER_RPATH_FLAG needs a trailing space.
LINKER_RPATH_FLAG:= ${LINKER_RPATH_FLAG:S/-rpath/& /}
## The Library rpath to use in end programs.
LDFLAGS_FOR_TARGET= ${LDFLAGS:M${COMPILER_RPATH_FLAG}*:N*/usr/lib*} ${LDFLAGS:M-Wl,-z*}
# The "-static-libstdc++ -static-libgcc" flags are normally added to the
# boot-ldflags by configure but because we are supply the boot-ldflags
# we mash supply them.
BOOT_LDFLAGS= -static-libstdc++ -static-libgcc ${LDFLAGS_FOR_TARGET}
# Needed on Darwin when LDFLAGS point to a SDK
BOOT_LDFLAGS+= ${LDFLAGS:M-Wl,-syslibroot*}
# GCC does not understand this option; remove it, or stage build will fail
BUILDLINK_TRANSFORM+= rm:-stdlib=libc++
.include "options.mk"
.if ${MACHINE_PLATFORM:MNetBSD-*-*}
# on NetBSD, use the native SSP code in libc
CONFIGURE_ARGS+= --disable-libssp
# Match base libstdc++ major
SUBST_CLASSES+= libstdc
SUBST_STAGE.libstdc= pre-configure
SUBST_FILES.libstdc= libstdc++-v3/configure
SUBST_MESSAGE.libstdc= Bumping libstdc++ major to 7
SUBST_SED.libstdc= -e 's,libtool_VERSION=6:,libtool_VERSION=7:,g'
.else
CONFIGURE_ARGS+= --enable-libssp
.endif
## For target librarys and libjava programs.
CONFIGURE_ENV+= LDFLAGS_FOR_TARGET=${LDFLAGS_FOR_TARGET:Q}
CONFIGURE_ARGS+= --enable-languages=${LANGS:M*:Q}
CONFIGURE_ARGS+= --enable-shared
CONFIGURE_ARGS+= --enable-long-long
CONFIGURE_ARGS+= --with-local-prefix=${GCC9_PREFIX:Q}
CONFIGURE_ARGS+= --enable-threads=posix
CONFIGURE_ARGS+= --with-boot-ldflags=${BOOT_LDFLAGS:M*:Q}
# multilib on Darwin requires fat-binaries
CONFIGURE_ARGS.Darwin+= --disable-multilib
.if ${OSX_SDK_PATH:U}
CONFIGURE_ARGS.Darwin+= --with-sysroot=${OSX_SDK_PATH:Q}
.endif
.if ${OPSYS} == NetBSD
CONFIGURE_ARGS+= --with-gnu-ld --with-ld=/usr/bin/ld
CONFIGURE_ARGS+= --with-gnu-as --with-as=/usr/bin/as
MAKE_ENV+= ac_cv_func_clock_gettime=yes
MAKE_ENV+= ac_cv_func_gethostbyname_r=no
MAKE_ENV+= ac_cv_func_freelocale=no
MAKE_ENV+= ac_cv_func_newlocale=no
MAKE_ENV+= ac_cv_func_uselocale=no
.endif
MAKE_ENV.SunOS+= ac_cv_func_mkostemp=no
.if !empty(PKGSRC_COMPILER:Mclang) || ${OPSYS} == "DragonFly"
CONFIGURE_ARGS+= --disable-bootstrap
CHECK_RELRO_SKIP+= ${GCC_PKGNAME}/lib/*
.endif
.if ${MACHINE_PLATFORM:MNetBSD-*-i386} || ${MACHINE_PLATFORM:MLinux-*-i386}
CONFIGURE_ARGS+= --with-arch=i486 --with-tune=i486
.endif
.if ${MACHINE_PLATFORM:MNetBSD-*-x86_64} || ${MACHINE_PLATFORM:MLinux-*-x86_64}
CONFIGURE_ARGS+= --with-arch=nocona --with-tune=nocona --with-fpmath=sse
.endif
.if ${MACHINE_PLATFORM:MDarwin-[0-8].*-*}
CONFIGURE_ARGS+= --with-dwarf2
.endif
# ${WRKSRC}/fixincludes/ looks for sed and compiles the path to sed into
# a binary so we need to make sure we give it the installed sed and not
# the tool wrapped one.
MAKE_ENV+= ac_cv_path_SED=${TOOLS_SED}
MAKE_ENV+= lt_cv_path_SED=${TOOLS_SED}
# Determine whether to use binutils
.if ${OPSYS} == SunOS
. if exists(/usr/sfw/bin/gobjdump)
CONFIGURE_ENV+= OBJDUMP=/usr/sfw/bin/gobjdump
. endif
. if exists(/usr/bin/ld)
CONFIGURE_ARGS+= --without-gnu-ld --with-ld=/usr/bin/ld
. else
CONFIGURE_ARGS+= --without-gnu-ld --with-ld=/usr/ccs/bin/ld
. endif
. if exists(/usr/sfw/bin/gas)
CONFIGURE_ARGS+= --with-gnu-as --with-as=/usr/sfw/bin/gas
. elif exists(/usr/ccs/bin/as)
CONFIGURE_ARGS+= --without-gnu-as --with-as=/usr/ccs/bin/as
. else
BUILDLINK_DEPMETHOD.binutils= full
. include "../../devel/binutils/buildlink3.mk"
CONFIGURE_ARGS+= --with-gnu-as --with-as=${PREFIX}/bin/gas
. endif
.endif
.if ${OS_VARIANT} == SmartOS
SUBST_CLASSES+= ccs
SUBST_STAGE.ccs= pre-configure
SUBST_FILES.ccs= contrib/make_sunver.pl
SUBST_SED.ccs= -e 's,/usr/ccs/bin,/usr/bin,g'
.endif
SUBST_CLASSES+= vars
SUBST_MESSAGE.vars= Setting target machine name path in ${SUBST_FILES.vars}
SUBST_STAGE.vars= pre-configure
SUBST_FILES.vars= gcc/Makefile.in
SUBST_VARS.vars= MACHINE_GNU_PLATFORM
pre-configure:
${RUN} cd ${WRKSRC} && ${MKDIR} ${OBJDIR}
TEST_TARGET= -j ${MAKE_JOBS} -k check
TEST_DEPENDS+= dejagnu-[0-9]*:../../devel/dejagnu
post-test:
${RUN} cd ${WRKSRC} && cd ${OBJDIR} \
&& ${SH} ${WRKSRC}/contrib/test_summary >${WRKDIR}/test_summary.log
@${INFO_MSG} "Test summary is available in ${WRKDIR}/test_summary.log"
post-install:
${TEST} -f ${DESTDIR}${GCC9_PREFIX}/bin/cc \
|| (cd ${DESTDIR}${GCC9_PREFIX}/bin && ${LN} -f gcc cc)
GENERATE_PLIST+= \
cd ${DESTDIR}${PREFIX} && \
${FIND} ${GCC9_SUBPREFIX} \( -type f -o -type l \) -print | ${SORT};
.include "../../devel/zlib/buildlink3.mk"
.include "../../lang/python/application.mk"
.include "../../mk/dlopen.buildlink3.mk"
.include "../../mk/pthread.buildlink3.mk"
.include "../../mk/bsd.pkg.mk"