1PORTNAME=	gcc
2PORTVERSION=	13.3.0
3CATEGORIES=	lang
4MASTER_SITES=	GCC
5PKGNAMESUFFIX=	${SUFFIX}
6
7MAINTAINER=	ports@MidnightBSD.org
8COMMENT=	GNU Compiler Collection 13
9WWW=		https://gcc.gnu.org
10
11LICENSE=	gpl3
12
13LIB_DEPENDS=	libgmp.so:math/gmp \
14		libmpfr.so:math/mpfr \
15		libmpc.so:math/mpc
16BUILD_DEPENDS+=	${LOCALBASE}/bin/as:devel/binutils
17RUN_DEPENDS+=	${LOCALBASE}/bin/as:devel/binutils
18
19.if defined(MAINTAINER_MODE)
20BUILD_DEPENDS+=	runtest:misc/dejagnu
21.endif
22
23CPE_VENDOR=	gnu
24
25GCC_VERSION=	${PORTVERSION}
26SUFFIX=		${PORTVERSION:C/([0-9]+).*/\1/}
27USES=		compiler:c++11-lang cpe gmake iconv libtool makeinfo perl5 tar:xz
28USE_BINUTILS=	yes
29USE_PERL5=	build
30SSP_UNSAFE=	yes
31CFLAGS:=	${CFLAGS:N-mretpoline}
32CXXFLAGS:=	${CXXFLAGS:N-mretpoline}
33
34OPTIONS_DEFINE=		BOOTSTRAP GRAPHITE
35OPTIONS_DEFAULT=	BOOTSTRAP
36BOOTSTRAP_DESC=		Build using a full bootstrap
37GRAPHITE_DESC=		Support for Graphite loop optimizations
38
39.if exists(/usr/lib32/libc.so)
40OPTIONS_DEFINE_amd64+=                MULTILIB
41OPTIONS_DEFAULT_amd64+=       MULTILIB
42OPTIONS_DEFINE_powerpc64+=	MULTILIB
43OPTIONS_DEFAULT_powerpc64+=	MULTILIB
44MULTILIB_DESC=		Build support for 32-bit and 64-bit targets
45MULTILIB_CONFIGURE_ENABLE=	multilib
46.else
47CONFIGURE_ARGS+=	--disable-multilib
48.endif
49
50.include <bsd.port.pre.mk>
51
52.if ${ARCH} == amd64
53ARCH_64=
54CONFIGURE_TARGET=	x86_64-portbld-freebsd11.4
55.else
56ARCH_64=@comment
57CONFIGURE_TARGET=	${ARCH}-portbld-freebsd11.4
58.endif
59
60LANGUAGES:=	c,c++,objc,fortran,jit
61TARGLIB=	${PREFIX}/lib/gcc${SUFFIX}
62TARGLIB32=	${PREFIX}/lib32	# The version information is added later
63LIBEXEC=	${PREFIX}/libexec/gcc${SUFFIX}
64GNU_CONFIGURE=	yes
65CONFIGURE_OUTSOURCE=	yes
66.if empty(PORT_OPTIONS:MBOOTSTRAP)
67CONFIGURE_ARGS+=--disable-bootstrap
68.else
69CONFIGURE_ARGS+=--with-build-config=bootstrap-debug
70ALL_TARGET=	bootstrap-lean
71.endif
72INSTALL_TARGET=	install-strip
73.if ${UID} != 0
74BINMODE=	755
75.endif
76CONFIGURE_ARGS+=--disable-nls \
77		--enable-gnu-indirect-function \
78		--enable-host-shared \
79		--enable-plugin \
80		--libdir=${TARGLIB} \
81		--libexecdir=${LIBEXEC} \
82		--program-suffix=${SUFFIX} \
83		--with-as=${LOCALBASE}/bin/as \
84		--with-gmp=${LOCALBASE} \
85		--with-gxx-include-dir=${TARGLIB}/include/c++/ \
86		--with-gxx-libcxx-include-dir=/usr/include/c++/v1 \
87		--with-ld=${LOCALBASE}/bin/ld \
88		${ICONV_CONFIGURE_ARG} \
89		--with-pkgversion="MidnightBSD Ports Collection" \
90		--with-system-zlib \
91		--without-zstd
92MAKE_ARGS+=	MAKEINFOFLAGS="--no-split"
93USE_LDCONFIG=	${TARGLIB}
94PLIST_SUB+=	GCC_VERSION=${GCC_VERSION} \
95		GNU_HOST=${CONFIGURE_TARGET} \
96		SUFFIX=${SUFFIX} \
97		ARCH_64=${ARCH_64}
98INFO=		gcc${SUFFIX}/cpp \
99		gcc${SUFFIX}/cppinternals \
100		gcc${SUFFIX}/gcc \
101		gcc${SUFFIX}/gccinstall \
102		gcc${SUFFIX}/gccint \
103		gcc${SUFFIX}/gfortran \
104		gcc${SUFFIX}/libgccjit \
105		gcc${SUFFIX}/libgomp
106# Release tarballs (as opposed to snapshots) always carry this.
107INFO+=		gcc${SUFFIX}/libquadmath \
108		gcc${SUFFIX}/libitm
109SUB_FILES=	pkg-message
110SUB_LIST+=	TARGLIB=${TARGLIB}
111
112.if ${PORT_OPTIONS:MGRAPHITE}
113LIB_DEPENDS+=	libisl.so:devel/isl
114CONFIGURE_ARGS+=--with-isl=${LOCALBASE}
115.endif
116
117CONFIGURE_ARGS+=--enable-languages=${LANGUAGES}
118
119pre-everything::
120	@${ECHO_MSG} "Making GCC ${PORTVERSION} for ${CONFIGURE_TARGET} [${LANGUAGES}]"
121
122pre-configure:
123	cd ${WRKSRC} ; contrib/gcc_update --touch
124	@${RM} ${WRKSRC}/gcc/*/*.info*
125
126.if defined(MAINTAINER_MODE)
127full-regression-test: build
128	cd ${TEST_WRKSRC}; ${MAKE_CMD} -sk check \
129	; ${WRKSRC}/contrib/test_summary
130.endif
131
132post-fake:
133	${RM} -f ${PREFIX}/man/man7/*
134	-${RM} -fr ${FAKE_DESTDIR}${TARGLIB}/gcc/*/${GCC_VERSION}/include-fixed/
135	# Add target libraries and include files to packaging list.
136
137.if ${ARCH} == amd64 && ${PORT_OPTIONS:MMULTILIB}
138	${MKDIR} ${FAKE_DESTDIR}${TARGLIB32}
139	${MV} ${FAKE_DESTDIR}${TRUE_PREFIX}/lib/lib32 ${FAKE_DESTDIR}${TARGLIB32}/gcc${SUFFIX}
140.endif
141
142.for d in ${TARGLIB:S/^${PREFIX}\///} ${TARGLIB32:S/^${PREFIX}\///} ${LIBEXEC:S/^${PREFIX}\///}
143	cd ${FAKE_DESTDIR}${TRUE_PREFIX} ; if [ -d $d ]; then \
144	    ${FIND} $d -type f -o -type l >>${WRKDIR}/PLIST.lib ;\
145	fi
146.endfor
147	cd ${WRKDIR} ; ${SED} -i -e "/PLIST.lib/ r PLIST.lib" ${TMPPLIST}
148
149.include <bsd.port.post.mk>
150