1#	$OpenBSD: Makefile.bsd-wrapper,v 1.32 2023/09/06 12:15:30 jca Exp $
2
3.include <bsd.own.mk>
4
5TARGET_ARCH?=	${MACHINE_ARCH}
6
7SUBDIRS=	opcodes bfd
8CONF_SUBDIRS=	opcodes bfd
9
10CFLAGS+=	-std=gnu89
11CFLAGS+=	${PIE_DEFAULT}
12XCFLAGS=	CC="${CC}" CFLAGS="${CFLAGS} ${COPTS}" LDFLAGS="${LDSTATIC}"
13# This allows moving the whole binutils installation around for
14# testing purposes
15PREFIX=/usr
16.if ${PREFIX} != "/usr"
17MANDIR=${PREFIX}/share/man/man
18.endif
19
20MAN=		binutils/doc/addr2line.1 binutils/doc/objcopy.1 \
21		binutils/doc/objdump.1 binutils/doc/readelf.1 \
22		c++filt.1
23
24#### gdb comes from older binutils at the moment
25###CONF_SUBDIRS+=      gdb
26###SUBDIRS+=   gdb
27###INST_SUBDIRS+=      gdb
28###MAN+=               gdb/gdb.1
29
30SUBDIRS+=	binutils
31CONF_SUBDIRS+=	binutils
32INST_SUBDIRS+=	binutils
33MAN+=		binutils/doc/strings.1
34
35.if (${TARGET_ARCH} != "aarch64" && ${TARGET_ARCH} != "powerpc64" && \
36    ${TARGET_ARCH} != "riscv64")
37SUBDIRS+=	 ld gas
38CONF_SUBDIRS+=	 ld gas
39INST_SUBDIRS+=	 ld gas
40MAN+=		gas/doc/as.1	ld/ld.bfd.1
41.endif
42
43.if ${AR_VERSION:L} == "binutils"
44MAN+=		binutils/doc/ar.1 binutils/doc/ranlib.1
45.else
46# skip installing ar(1) and ranlib(1) which is am__EXEEXT_7 and am__EXEEXT_9
47SKIP_AR=	am__EXEEXT_7= am__EXEEXT_9=
48.endif
49
50.if ${LINKER_VERSION:L} == "bfd"
51MAN+=		binutils/doc/strip.1
52maninstall:
53		cd ${DESTDIR}${MANDIR}1 && rm -f ld.1 && ln ld.bfd.1 ld.1
54.else
55# skip installing strip(1) which is am__EXEEXT_14
56SKIP_STRIP=	am__EXEEXT_14=
57.endif
58
59# Used by the GNU Makefile
60ALL_MODULES=${SUBDIRS:S/^/all-/g}
61CONFIGURE_MODULES=${CONF_SUBDIRS:S/^/configure-/g}
62CONFIGURE_HOST_MODULES=${CONF_SUBDIRS:S/^/configure-/g}
63ALL_HOST_MODULES=${SUBDIRS:S/^/all-/g}
64INSTALL_MODULES=${INST_SUBDIRS:S/^/install-/g}
65INFO_HOST_MODULES=${SUBDIRS:S/^/info-/g}
66INSTALL_INFO_HOST_MODULES=${INST_SUBDIRS:S/^/install-info-/g}
67
68.if defined(CROSSDIR)
69CONFIGTARGET=--target=${TARGET_ARCH}-unknown-openbsd${OSREV}
70.else
71CONFIGTARGET=
72.endif
73
74.if ${TARGET_ARCH} == "aarch64" || ${TARGET_ARCH} == "powerpc64" || \
75    ${TARGET_ARCH} == "riscv64"
76CONFIGTARGET+=--without-gnu-ld
77CONFIGTARGET+=--without-gnu-as
78.endif
79
80all:	config.status
81.for t in all info
82	SUBDIRS='${SUBDIRS}' \
83	  CONFIGURE_HOST_MODULES='${CONFIGURE_HOST_MODULES}' \
84	  ${MAKE} ${XCFLAGS} \
85	    scriptdir=${PREFIX}/libdata \
86	    tooldir=${PREFIX} \
87	    MAKEINFO='makeinfo --no-split' \
88	    MAKEINFOFLAGS='' \
89	    BSDSRCDIR=${BSDSRCDIR} \
90	    ALL_MODULES="${ALL_MODULES}" \
91	    ALL_HOST_MODULES='${ALL_HOST_MODULES}' \
92	    INFO_HOST_MODULES='${INFO_HOST_MODULES}' $t
93.endfor
94
95.include <bsd.own.mk>
96
97.ifdef GLOBAL_AUTOCONF_CACHE
98CF=	--cache-file=${GLOBAL_AUTOCONF_CACHE}
99.else
100CF=
101.endif
102
103do-config: .USE
104	PATH="/bin:/usr/bin:/sbin:/usr/sbin" \
105	MAKEINFO='makeinfo --no-split' \
106	${XCFLAGS} \
107	sh ${.CURDIR}/configure --prefix=${PREFIX} \
108	    --infodir='$${prefix}/share/info' \
109	    --disable-nls --disable-gdbtk --disable-install-libbfd ${CF} \
110	    --disable-werror \
111	    ${CONFIGTARGET}
112	cd ${.OBJDIR} && \
113	    sed -e 's,SUBDIRS *=,SUBDIRS ?=,' <Makefile >Makefile.tmp && \
114	    mv -f Makefile.tmp Makefile
115	cd ${.OBJDIR} && \
116	    ${XCFLAGS} \
117	    ${MAKE} ${CONFIGURE_MODULES}
118
119gas/doc/as.1: config.status
120	cd ${.OBJDIR}/gas/doc && ${MAKE} as.1
121
122ld/ld.bfd.1: config.status
123	cd ${.OBJDIR}/ld && ${MAKE} ld.1
124	mv ld/ld.1 ld/ld.bfd.1
125
126config: do-config
127.ifndef GLOBAL_AUTOCONF_CACHE
128	-rm -f config.cache
129.endif
130
131config.status: do-config
132
133# Need to pass SUBDIRS because of install-info
134install: maninstall
135.for t in install install-info
136	${INSTALL} -d -o ${BINOWN} -g ${BINGRP} \
137	    ${DESTDIR}${PREFIX}/libdata/ldscripts
138	SUBDIRS='${INST_SUBDIRS}' ${MAKE} DESTDIR='${DESTDIR}' \
139	    INSTALL_MAN= \
140	    scriptdir=${PREFIX}/libdata \
141	    tooldir=${PREFIX} \
142	    BSDSRCDIR=${BSDSRCDIR} \
143	    INSTALL_MODULES='${INSTALL_MODULES}' \
144	    INSTALL_PROGRAM='${INSTALL} -c ${INSTALL_STRIP} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE}' \
145	    INSTALL_DATA='${INSTALL} -c -o ${DOCOWN} -g ${DOCGRP} -m ${NONBINMODE}' \
146	    INSTALL_INFO_HOST_MODULES='${INSTALL_INFO_HOST_MODULES}' \
147	    ${SKIP_AR} ${SKIP_STRIP} \
148	      $t
149.endfor
150.if ${LINKER_VERSION:L} == "bfd"
151	rm -f ${DESTDIR}${PREFIX}/bin/ld
152	ln ${DESTDIR}${PREFIX}/bin/ld.bfd ${DESTDIR}${PREFIX}/bin/ld
153.endif
154
155clean cleandir:
156	-@if [ -e Makefile ]; then ${MAKE} distclean; fi
157
158c++filt.1: binutils/doc/cxxfilt.man
159	sed -e 's,@PROGRAM@,c++filt,' <${.CURDIR}/binutils/doc/cxxfilt.man >$@
160
161tags:
162	# Nothing here so far...
163
164BEFOREMAN=config.status
165
166.PHONY: config
167
168.include <bsd.obj.mk>
169.include <bsd.subdir.mk>
170
171.ifdef NOMAN
172maninstall:
173	@echo NOMAN is set
174.else
175.include <bsd.man.mk>
176.endif
177