1#         $NetBSD: Makefile,v 1.17 2023/08/01 05:57:56 mrg Exp $
2
3REQUIRETOOLS=       yes
4NOLINT=             # defined
5
6UNSUPPORTED_COMPILER.clang=   # defined
7
8.include <bsd.init.mk>
9
10LIB=                objc
11GCC_MACHINE_ARCH?=  ${MACHINE_ARCH:S/earmv5/earm/}
12
13.if ${MKGCC} != "no"
14
15SHLIB_MAJOR=        4
16SHLIB_MINOR=        0
17
18# XXX just while all platforms defs.mk are updated..
19.if exists(${.CURDIR}/arch/${GCC_MACHINE_ARCH}/defs.mk)
20# Machine-dependent definitions (include file names).
21.include "${.CURDIR}/arch/${GCC_MACHINE_ARCH}/defs.mk"
22EXTRA_FAKEHEADERS=
23.else
24# Machine-independent definitions (include file names).
25.include "${.CURDIR}/defs.mk"
26EXTRA_FAKEHEADERS=
27.endif
28
29LIBGCCOBJ!=    cd ${.CURDIR}/../libgcc/libgcc && ${PRINTOBJDIR}
30
31DIST=               ${GCCDIST}
32GNUHOSTDIST=        ${DIST}
33GCCARCH=  ${GCC_SUBDIR}/usr.bin/gcc/arch/${GCC_MACHINE_ARCH}
34LIBOBJCARCH=        ${GCC_SUBDIR}/lib/libobjc/arch/${GCC_MACHINE_ARCH}
35GCCLIBXX= ${GCC_SUBDIR}/lib/libstdc++-v3/arch/${GCC_MACHINE_ARCH}
36
37SRCS=               ${G_OBJC_SOURCE_FILES} ${G_C_SOURCE_FILES}
38
39GCPPFLAGS=          ${G_ALL_CFLAGS} ${G_INCLUDES}
40CPPFLAGS+=          -I. -I${.CURDIR}/arch/${GCC_MACHINE_ARCH}
41CPPFLAGS+=          -I${GCCARCH} ${GCPPFLAGS:M-D*} ${GCPPFLAGS:M-I*:N-I.*}
42CPPFLAGS+=          -I${GCCLIBXX}
43CPPFLAGS+=          -I${DIST}/libobjc/objc-private
44
45BUILDSYMLINKS=      ${.CURDIR}/../libstdc++-v3/arch/${GCC_MACHINE_ARCH} bits
46DPSRCS+=  bits
47
48.for f in Protocol.m Object.m NXConstStr.m linking.m
49OBJCOPTS.${f}=      -fgnu-runtime
50.endfor
51
52.for f in thr.c thr-objc.c
53COPTS.${f}=         -Wno-missing-noreturn
54.endfor
55
56COPTS+=             -fno-strict-aliasing -fexceptions
57OBJCOPTS+=          -fno-strict-aliasing -fexceptions
58
59OBJCOPTS.Object.m = -Wno-stack-protector
60COPTS.sendmsg.c = -Wno-stack-protector
61COPTS.objc-act.c = -Wno-stack-protector
62
63INCS=               ${G_OBJC_H}
64INCSDIR=  /usr/include/objc
65
66DPSRCS+=  runtime-info.h
67CLEANFILES+=        rtscratch rtscratch.s runtime-info.h
68runtime-info.h:
69          ${_MKTARGET_CREATE}
70          touch rtscratch
71          `${OBJC} --print-prog-name=cc1obj` -print-objc-runtime-info rtscratch >$@
72
73${OBJS} ${POBJS} ${SOBJS}: runtime-info.h
74
75${SRCS}: tconfig.h options.h
76
77.include "../Makefile.gthr"
78.include "../Makefile.tconfigh"
79.include "../Makefile.hacks"
80
81# XXX just while all platforms defs.mk are updated..
82.if exists(${.CURDIR}/arch/${GCC_MACHINE_ARCH}/defs.mk)
83optionlist: ${G_ALL_OPT_FILES} ${LIBOBJCARCH}/defs.mk Makefile ${DIST}/gcc/opt-gather.awk
84          ${TOOL_AWK} -f ${DIST}/gcc/opt-gather.awk ${G_ALL_OPT_FILES} \
85                    > ${.TARGET}
86
87.if ${MACHINE_ARCH} == "vax" || ${MACHINE_ARCH} == "mipseb"
88OPTION_FLAGS=-v header_name="config.h system.h coretypes.h options.h tm.h" \
89          -f ${DIST}/gcc/opt-read.awk
90OPTION_DEPS=${DIST}/gcc/opt-read.awk
91.endif
92
93options.h: optionlist ${DIST}/gcc/opt-functions.awk ${DIST}/gcc/opth-gen.awk \
94          ${OPTION_DEPS}
95          ${TOOL_AWK} -f ${DIST}/gcc/opt-functions.awk \
96                    -f ${DIST}/gcc/opth-gen.awk ${OPTION_FLAGS} \
97                    < optionlist > ${.TARGET}
98
99CLEANFILES+=        options.h optionlist
100.endif
101
102.include <bsd.lib.mk>
103
104.PATH: ${DIST}/libobjc ${DIST}/libobjc/objc ${DIST}/libobjc/objc-private
105
106# XXX insn-modes.h
107BINBACKENDOBJ!=     cd ${.CURDIR}/../../usr.bin/backend && ${PRINTOBJDIR}
108CPPFLAGS+=          -I${BINBACKENDOBJ}
109
110.else
111.include <bsd.prog.mk>        # do nothing
112.endif
113
114COPTS.archive.c+=   -Wno-error
115COPTS.sendmsg.c+=   -Wno-error
116COPTS.encoding.c+=  -Wno-pointer-arith  # sizeof(void)
117COPTS+=                       -Wno-missing-prototypes
118
119# XXXGCC12
120OBJCOPTS.Object.m+= -Wno-error=objc-root-class
121