1#	$OpenBSD: Makefile.bsd-wrapper,v 1.61 2011/09/19 19:36:32 naddy Exp $
2
3MAN=		gcc.1 cpp.1 gcov.1 protoize.1
4MLINKS+=	protoize.1 unprotoize.1
5MLINKS+=	gcc.1 cc.1
6
7BINDIR=/usr/bin
8.if defined(BOOTSTRAP)
9LANGUAGES=--enable-languages=c
10.else
11LANGUAGES=--enable-languages='c,c++,objc'
12MLINKS+=	gcc.1 g++.1 gcc.1 c++.1
13.endif
14V=3.3.5
15
16.SUFFIXES:	.1
17.PATH.1:	${.CURDIR}/gcc ${.CURDIR}/gcc/doc
18
19LIBIBERTY_INCLUDES=${.CURDIR}/../../lib/libiberty/include
20GNUCFLAGS=	${CFLAGS} ${COPTS} -DOPENBSD_NATIVE \
21		-I${LIBIBERTY_INCLUDES}
22
23VAXHOST_CFLAGS=	-DIN_GCC -DOPENBSD_NATIVE -DHAVE_CONFIG_H -O0
24MAKE_FLAGS= 	CFLAGS="${GNUCFLAGS}" \
25		CC="${CC}" LDFLAGS="${LDSTATIC}" \
26		DEMANGLER_PROG= \
27		DEMANGLE_H= \
28		LIBIBERTY_INCLUDES=${LIBIBERTY_INCLUDES} \
29		LIBGCC2_INCLUDES=-I${LIBIBERTY_INCLUDES} \
30		BUILD_LIBIBERTY=-liberty \
31		LIBIBERTY=-liberty \
32		HOST_LIBDEPS= \
33		LIBDEPS= \
34		build_infodir=.
35
36.if ${MACHINE_ARCH} == "vax"
37MAKE_FLAGS+=	HOST_CFLAGS="${VAXHOST_CFLAGS}"
38.endif
39
40GXX_INCDIR=	/usr/include/g++
41CLEANFILES=	.gdbinit */.gdbinit *.info* \
42		c-parse.c c-parse.h c-parse.y cexp.c cp/parse.c cp/parse.h \
43		f/*.info* objc/objc-parse.c objc/objc-parse.y target_path \
44		print-rtl1.c gengtype-lex.c gengtype-yacc.c gengtype-yacc.h \
45		genrtl.c genrtl.h fixinc.sh fixinc/Makefile \
46		po/Makefile  po/Makefile.in  po/POTFILES
47
48GCCARCH=	${MACHINE_ARCH}-unknown-openbsd${OSREV}
49GCCINC=	/usr/lib/gcc-lib/${GCCARCH}/$V/include
50
51# cross-compilation
52.if defined(CROSS_HOST) && defined(TARGET_ARCH) && defined(CROSSDIR)
53CONFIGTARGET=	--build=${CROSS_HOST}-unknown-openbsd${OSREV} \
54    --target=${TARGET_ARCH}-unknown-openbsd${OSREV}
55
56CONFIGPREFIX=	${CROSSDIR}/usr
57PATH=		/bin:/usr/bin:/sbin:/usr/sbin:${CROSSDIR}/usr/bin
58GXX_INCDIR=	${CROSSDIR}/usr/include/g++
59GNUCFLAGS=	${CFLAGS} ${COPTS} -DOPENBSD_CROSS -I${LIBIBERTY_INCLUDES}
60HOSTCFLAGS=	${CFLAGS} ${COPTS} -DOPENBSD_CROSS -I${LIBIBERTY_INCLUDES}
61HOST_CC=cc
62MAKE_FLAGS+= 	CFLAGS_FOR_BUILD="${HOSTCFLAGS}" HOST_CC=cc
63.elif defined(TARGET_ARCH) && defined(CROSSDIR)
64CONFIGTARGET=	--target=${TARGET_ARCH}-unknown-openbsd${OSREV}
65CONFIGPREFIX=	${CROSSDIR}/usr
66MAKE_FLAGS+=	GCC_FOR_TARGET="./xgcc -B./ -I${CROSSDIR}/usr/include"
67PATH=		/bin:/usr/bin:/sbin:/usr/sbin:${CROSSDIR}/usr/bin
68GXX_INCDIR=	${CROSSDIR}/usr/include/g++
69GNUCFLAGS=	${CFLAGS} ${COPTS} -DOPENBSD_CROSS -I${LIBIBERTY_INCLUDES}
70VAXHOST_CFLAGS=	-DIN_GCC -DHAVE_CONFIG_H -O0
71.else
72CONFIGTARGET=
73CONFIGPREFIX=	/usr
74PATH=		/bin:/usr/bin:/sbin:/usr/sbin
75.endif
76
77all:	config.status
78	exec env PATH="${PATH}" ${MAKE} ${MAKE_FLAGS} all doc proto
79
80tconfig.h: config.status
81	exec ${MAKE} ${MAKE_FLAGS} tconfig.h
82
83tree-check.h: config.status
84	exec ${MAKE} ${MAKE_FLAGS} $@
85
86
87.FORCE:	.IGNORE
88
89.include <bsd.own.mk>
90
91.ifdef GLOBAL_AUTOCONF_CACHE
92CF=	--cache-file=${GLOBAL_AUTOCONF_CACHE}
93.else
94CF=
95.endif
96
97config.status: gcc/Makefile.in gcc/configure gcc/c-parse.in
98	PATH="${PATH}" \
99	INSTALL_PROGRAM="${INSTALL} ${INSTALL_COPY} ${INSTALL_STRIP}" \
100	CPPFLAGS=-I${LIBIBERTY_INCLUDES} \
101	MAKEINFO='makeinfo --no-split' \
102	/bin/sh ${.CURDIR}/gcc/configure --with-gnu-as --with-gnu-ld \
103		--prefix=${CONFIGPREFIX} --mandir='$$(prefix)/share/man' \
104		--with-local-prefix=/usr ${CF} \
105		${LANGUAGES} --enable-cpp --disable-nls \
106		--with-gxx-include-dir=${GXX_INCDIR} \
107		--enable-__cxa_atexit \
108		--enable-threads=posix \
109		${CONFIGTARGET} ${GCCARCH} && touch config.status
110
111.ifdef NOMAN
112maninstall:
113	@echo NOMAN is set
114.endif
115
116# XXX INSTALL_TARGET should be install-normal, more or less
117# the only reason is not so is because our man handling is special
118# (pre-formatted) and also because of cpp, that we install by hand
119# elsewhere, until we get rid of that old `compatibility' script.
120
121target_path: config.status
122	__target=`sed -n '/^target=/s/target=//p' Makefile`; \
123	__version=`sed -n '/^gcc_version=/s/gcc_version=//p' Makefile`; \
124	echo /usr/lib/gcc-lib/$$__target/$$__version >target_path
125
126install:	maninstall target_path
127	${MAKE} ${MAKE_FLAGS} \
128		prefix=/usr \
129		INSTALL_PROGRAM="${INSTALL} ${INSTALL_COPY} ${INSTALL_STRIP}" \
130		GXX_TARGET_INSTALL_NAME=${.OBJDIR}/dummy1 \
131		CXX_TARGET_INSTALL_NAME=${.OBJDIR}/dummy2 \
132		infodir=/usr/share/info \
133		tooldir=/tmp assertdir=/tmp \
134		bindir=$(BINDIR) \
135		install-common install-multilib \
136		install-info intl.install \
137		lang.install-normal
138	chown -R ${BINOWN}:${BINGRP} ${DESTDIR}/usr/lib/gcc-lib
139	chmod -R a+rX ${DESTDIR}/usr/lib/gcc-lib
140	mkdir -p ${DESTDIR}/usr/libexec ${DESTDIR}/usr/bin
141#	if [ -e ${DESTDIR}/usr/lib/libf2c.a ]; then \
142#		chown ${BINOWN}:${BINGRP} ${DESTDIR}/usr/lib/libf2c.a; \
143#		chmod 444 ${DESTDIR}/usr/lib/libf2c.a; \
144#	fi
145	if [ -e ${DESTDIR}/usr/include/f2c.h ]; then \
146		chown ${BINOWN}:${BINGRP} ${DESTDIR}/usr/include/f2c.h; \
147		chmod 444 ${DESTDIR}/usr/include/f2c.h; \
148	fi
149	${INSTALL} ${INSTALL_COPY} ${INSTALL_STRIP} -m 755 cpp \
150	   ${DESTDIR}/usr/libexec/cpp
151	${INSTALL} ${INSTALL_COPY} ${INSTALL_STRIP} -m 755 xgcc \
152	   ${DESTDIR}/usr/bin/gcc
153	ln -f ${DESTDIR}/usr/bin/gcc ${DESTDIR}/usr/bin/cc
154
155clean cleandir:
156	-@if [ -e Makefile ]; then ${MAKE} distclean; fi
157	-rm -f ${CLEANFILES}
158
159depend: config.status
160	exec ${MAKE} ${MAKE_FLAGS} generated-manpages
161
162FILES= ${.CURDIR}/gcc/unwind.h
163.if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "amd64"
164FILES+=${.CURDIR}/gcc/config/i386/mmintrin.h \
165	${.CURDIR}/gcc/config/i386/xmmintrin.h \
166	${.CURDIR}/gcc/config/i386/emmintrin.h \
167	${.CURDIR}/gcc/config/i386/pmmintrin.h
168.elif ${MACHINE_ARCH} == "powerpc"
169FILES+=${.CURDIR}/gcc/config/rs6000/altivec.h
170.endif
171
172includes:
173	mkdir -p ${DESTDIR}${GCCINC}
174	for i in ${FILES}; do \
175		j=`basename $$i`; \
176		cmp -s $$i ${DESTDIR}${GCCINC}/$$j || \
177		    ${INSTALL} ${INSTALL_COPY} -m 444 $$i ${DESTDIR}${GCCINC}/$$j; \
178		ln -sf ${GCCINC}/$$j ${DESTDIR}/usr/include/$$j; \
179	done
180
181lint:
182	# Nothing here so far...
183
184tags:
185	# Nothing here so far...
186
187.include <bsd.obj.mk>
188.include <bsd.subdir.mk>
189.ifndef NOMAN
190.include <bsd.man.mk>
191.endif
192