]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - mk/own.mk
Import bmake-20200902
[FreeBSD/FreeBSD.git] / mk / own.mk
1 # $Id: own.mk,v 1.41 2020/08/19 17:51:53 sjg Exp $
2
3 .if !target(__${.PARSEFILE}__)
4 __${.PARSEFILE}__:
5
6 .if !target(__init.mk__)
7 .include "init.mk"
8 .endif
9
10 .if !defined(NOMAKECONF) && !defined(NO_MAKECONF)
11 MAKECONF?=      /etc/mk.conf
12 .-include "${MAKECONF}"
13 .endif
14
15 .include <host-target.mk>
16
17 TARGET_OSNAME?= ${_HOST_OSNAME}
18 TARGET_OSREL?= ${_HOST_OSREL}
19 TARGET_OSTYPE?= ${HOST_OSTYPE}
20 TARGET_HOST?= ${HOST_TARGET}
21
22 # these may or may not exist
23 .-include <${TARGET_HOST}.mk>
24 .-include <config.mk>
25
26 RM?= rm
27 LN?= ln
28 INSTALL?= install
29
30 prefix?=        /usr
31 .if exists(${prefix}/lib)
32 libprefix?=     ${prefix}
33 .else
34 libprefix?=     /usr
35 .endif
36
37 # FreeBSD at least does not set this
38 MACHINE_ARCH?=  ${MACHINE}
39 # we need to make sure these are defined too in case sys.mk fails to.
40 COMPILE.s?=     ${CC} ${AFLAGS} -c
41 LINK.s?=        ${CC} ${AFLAGS} ${LDFLAGS}
42 COMPILE.S?=     ${CC} ${AFLAGS} ${CPPFLAGS} -c -traditional-cpp
43 LINK.S?=        ${CC} ${AFLAGS} ${CPPFLAGS} ${LDFLAGS}
44 COMPILE.c?=     ${CC} ${CFLAGS} ${CPPFLAGS} -c
45 LINK.c?=        ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}
46 CXXFLAGS?=      ${CFLAGS}
47 COMPILE.cc?=    ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c
48 LINK.cc?=       ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS}
49 COMPILE.m?=     ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} -c
50 LINK.m?=        ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} ${LDFLAGS}
51 COMPILE.f?=     ${FC} ${FFLAGS} -c
52 LINK.f?=        ${FC} ${FFLAGS} ${LDFLAGS}
53 COMPILE.F?=     ${FC} ${FFLAGS} ${CPPFLAGS} -c
54 LINK.F?=        ${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS}
55 COMPILE.r?=     ${FC} ${FFLAGS} ${RFLAGS} -c
56 LINK.r?=        ${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS}
57 LEX.l?=         ${LEX} ${LFLAGS}
58 COMPILE.p?=     ${PC} ${PFLAGS} ${CPPFLAGS} -c
59 LINK.p?=        ${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS}
60 YACC.y?=        ${YACC} ${YFLAGS}
61
62 # for suffix rules
63 IMPFLAGS?=      ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}}
64 .for s in .c .cc
65 COMPILE.$s += ${IMPFLAGS}
66 LINK.$s +=  ${IMPFLAGS}
67 .endfor
68
69 PRINT.VAR.MAKE = MAKESYSPATH=${MAKESYSPATH:U${.PARSEDIR}} ${.MAKE}
70 .if empty(.MAKEFLAGS:M-V*)
71 .if defined(MAKEOBJDIRPREFIX) || defined(MAKEOBJDIR)
72 PRINTOBJDIR=    ${PRINT.VAR.MAKE} -r -V .OBJDIR -f /dev/null xxx
73 .else
74 PRINTOBJDIR=    ${PRINT.VAR.MAKE} -V .OBJDIR
75 .endif
76 .else
77 PRINTOBJDIR=    echo # prevent infinite recursion
78 .endif
79
80 # we really like to have SRCTOP and OBJTOP defined...
81 .if !defined(SRCTOP) || !defined(OBJTOP)
82 .-include <srctop.mk>
83 .endif
84
85 .if !defined(SRCTOP) || !defined(OBJTOP)
86 # dpadd.mk is rather pointless without these
87 OPTIONS_DEFAULT_NO+= DPADD_MK
88 .endif
89
90 # process options
91 OPTIONS_DEFAULT_NO+= \
92         INSTALL_AS_USER \
93         GPROF \
94         PROG_LDORDER_MK \
95         LIBTOOL \
96         LINT \
97
98 OPTIONS_DEFAULT_YES+= \
99         ARCHIVE \
100         AUTODEP \
101         CRYPTO \
102         DOC \
103         DPADD_MK \
104         GDB \
105         KERBEROS \
106         LINKLIB \
107         MAN \
108         NLS \
109         OBJ \
110         PIC \
111         SHARE \
112         SKEY \
113         YP \
114
115 OPTIONS_DEFAULT_DEPENDENT+= \
116         CATPAGES/MAN \
117         LDORDER_MK/PROG_LDORDER_MK \
118         OBJDIRS/OBJ \
119         PICINSTALL/LINKLIB \
120         PICLIB/PIC \
121         PROFILE/LINKLIB \
122         STAGING_PROG/STAGING \
123
124 .include <options.mk>
125
126 .if ${MK_INSTALL_AS_USER} == "yes"
127 # We ignore this if user is root.
128 _uid!=  id -u
129 .if ${_uid} != 0
130 .if !defined(USERGRP)
131 USERGRP!=  id -g
132 .export USERGRP
133 .endif
134 .for x in BIN CONF DOC INC INFO FILES KMOD LIB MAN NLS PROG SHARE
135 $xOWN=  ${USER}
136 $xGRP=  ${USERGRP}
137 $x_INSTALL_OWN=
138 .endfor
139 .endif
140 .endif
141
142 # override this in sys.mk
143 ROOT_GROUP?=    wheel
144 BINGRP?=        ${ROOT_GROUP}
145 BINOWN?=        root
146 BINMODE?=       555
147 NONBINMODE?=    444
148 DIRMODE?=       755
149
150 INCLUDEDIR?=    ${prefix}/include
151 INCDIR?=        ${INCLUDEDIR}
152
153 # Define MANZ to have the man pages compressed (gzip)
154 #MANZ=          1
155
156 MANTARGET?= cat
157 MANDIR?=        ${prefix}/share/man/${MANTARGET}
158 MANGRP?=        ${BINGRP}
159 MANOWN?=        ${BINOWN}
160 MANMODE?=       ${NONBINMODE}
161
162 INCLUDEDIR?=    ${libprefix}/include
163 LIBDIR?=        ${libprefix}/lib
164 SHLIBDIR?=      ${libprefix}/lib
165 .if ${USE_SHLIBDIR:Uno} == "yes"
166 _LIBSODIR?=     ${SHLIBDIR}
167 .else
168 _LIBSODIR?=     ${LIBDIR}
169 .endif
170 # this is where ld.*so lives
171 SHLINKDIR?=     /usr/libexec
172 LINTLIBDIR?=    ${libprefix}/libdata/lint
173 LIBGRP?=        ${BINGRP}
174 LIBOWN?=        ${BINOWN}
175 LIBMODE?=       ${NONBINMODE}
176
177 DOCDIR?=        ${prefix}/share/doc
178 DOCGRP?=        ${BINGRP}
179 DOCOWN?=        ${BINOWN}
180 DOCMODE?=       ${NONBINMODE}
181
182 NLSDIR?=        ${prefix}/share/nls
183 NLSGRP?=        ${BINGRP}
184 NLSOWN?=        ${BINOWN}
185 NLSMODE?=       ${NONBINMODE}
186
187 KMODDIR?=       ${prefix}/lkm
188 KMODGRP?=       ${BINGRP}
189 KMODOWN?=       ${BINOWN}
190 KMODMODE?=      ${NONBINMODE}
191
192 SHAREGRP?=      ${BINGRP}
193 SHAREOWN?=      ${BINOWN}
194 SHAREMODE?=     ${NONBINMODE}
195
196 COPY?=          -c
197 STRIP_FLAG?=    -s
198
199 .if ${TARGET_OSNAME} == "NetBSD"
200 .if exists(/usr/libexec/ld.elf_so)
201 OBJECT_FMT=ELF
202 .endif
203 OBJECT_FMT?=a.out
204 .endif
205 # sys.mk should set something appropriate if need be.
206 OBJECT_FMT?=ELF
207
208 .if (${_HOST_OSNAME} == "FreeBSD")
209 CFLAGS+= ${CPPFLAGS}
210 .endif
211
212 # allow for per target flags
213 # apply the :T:R first, so the more specific :T can override if needed
214 CPPFLAGS += ${CPPFLAGS_${.TARGET:T:R}} ${CPPFLAGS_${.TARGET:T}}
215 CFLAGS += ${CFLAGS_${.TARGET:T:R}} ${CFLAGS_${.TARGET:T}}
216
217 # Define SYS_INCLUDE to indicate whether you want symbolic links to the system
218 # source (``symlinks''), or a separate copy (``copies''); (latter useful
219 # in environments where it's not possible to keep /sys publicly readable)
220 #SYS_INCLUDE=   symlinks
221
222 # don't try to generate PIC versions of libraries on machines
223 # which don't support PIC.
224 .if  (${MACHINE_ARCH} == "vax") || \
225     ((${MACHINE_ARCH} == "mips") && defined(STATIC_TOOLCHAIN)) || \
226     ((${MACHINE_ARCH} == "alpha") && defined(ECOFF_TOOLCHAIN))
227 MK_PIC=no
228 .endif
229
230 # No lint, for now.
231 NOLINT=
232
233
234 .if ${MK_LINKLIB} == "no"
235 MK_PICINSTALL=  no
236 MK_PROFILE=     no
237 .endif
238
239 .if ${MK_MAN} == "no"
240 MK_CATPAGES=    no
241 .endif
242
243 .if ${MK_OBJ} == "no"
244 MK_OBJDIRS=     no
245 MK_AUTO_OBJ=    no
246 .endif
247
248 .if ${MK_SHARE} == "no"
249 MK_CATPAGES=    no
250 MK_DOC=         no
251 MK_INFO=        no
252 MK_MAN=         no
253 MK_NLS=         no
254 .endif
255
256 # :U incase not using our sys.mk
257 .if ${MK_META_MODE:Uno} == "yes"
258 # should all be set by sys.mk if not default
259 TARGET_SPEC_VARS ?= MACHINE
260 .if ${TARGET_SPEC_VARS:[#]} > 1
261 TARGET_SPEC_VARS_REV := ${TARGET_SPEC_VARS:[-1..1]}
262 .else
263 TARGET_SPEC_VARS_REV = ${TARGET_SPEC_VARS}
264 .endif
265 .if ${MK_STAGING} == "yes"
266 STAGE_ROOT?= ${OBJROOT}/stage
267 STAGE_OBJTOP?= ${STAGE_ROOT}/${TARGET_SPEC_VARS_REV:ts/}
268 .endif
269 .endif
270
271 .endif