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