summaryrefslogtreecommitdiffstats
path: root/config/config.mk
blob: c8d7f198cd83ebe2f795570d7fc150cd4054925d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# Copyright © Tavian Barnes <tavianator@tavianator.com>
# SPDX-License-Identifier: 0BSD

# Makefile fragment that implements `make config`

include config/prelude.mk
include config/exports.mk

# Makefile fragments generated by `make config`
MKS := \
    ${GEN}/vars.mk \
    ${GEN}/flags.mk \
    ${GEN}/deps.mk \
    ${GEN}/objs.mk \
    ${GEN}/pkgs.mk

# The main configuration file, which includes the others
${CONFIG}: ${MKS}
	${MSG} "[ GEN] $@"
	@printf '# %s\n' "$@" >$@
	@printf 'include $${GEN}/%s\n' ${.ALLSRC:${GEN}/%=%} >>$@
	${VCAT} ${CONFIG}
.PHONY: ${CONFIG}

# Saves the configurable variables
${GEN}/vars.mk::
	@${MKDIR} ${@D}
	${MSG} "[ GEN] $@"
	@printf '# %s\n' "$@" >$@
	@printf 'PREFIX := %s\n' "$$XPREFIX" >>$@
	@printf 'MANDIR := %s\n' "$$XMANDIR" >>$@
	@printf 'OS := %s\n' "$${OS:-$$(uname)}" >>$@
	@printf 'ARCH := %s\n' "$${ARCH:-$$(uname -m)}" >>$@
	@printf 'CC := %s\n' "$$XCC" >>$@
	@printf 'INSTALL := %s\n' "$$XINSTALL" >>$@
	@printf 'MKDIR := %s\n' "$$XMKDIR" >>$@
	@printf 'RM := %s\n' "$$XRM" >>$@
	@printf 'PKGS :=\n' >>$@
	${VCAT} $@

# Sets the build flags.  This depends on vars.mk and uses a recursive make so
# that the default flags can depend on variables like ${OS}.
${GEN}/flags.mk: ${GEN}/vars.mk
	@+${MAKE} -sf config/flags.mk
.PHONY: ${GEN}/flags.mk

# Check for dependency generation support
${GEN}/deps.mk: ${GEN}/flags.mk
	@+${MAKE} -sf config/deps.mk
.PHONY: ${GEN}/deps.mk

# Lists file.o: file.c dependencies
${GEN}/objs.mk::
	@${MKDIR} ${@D}
	${MSG} "[ GEN] $@"
	@printf '# %s\n' "$@" >$@
	@for obj in ${OBJS:${OBJ}/%.o=%}; do printf '$${OBJ}/%s.o: %s.c\n' "$$obj" "$$obj"; done >>$@

# External dependencies
PKG_MKS := \
    ${GEN}/libacl.mk \
    ${GEN}/libcap.mk \
    ${GEN}/libselinux.mk \
    ${GEN}/liburing.mk \
    ${GEN}/oniguruma.mk

# Auto-detect dependencies and their build flags
${GEN}/pkgs.mk: ${PKG_MKS}
	@printf '# %s\n' "$@" >$@
	@printf 'include $${GEN}/%s\n' ${.ALLSRC:${GEN}/%=%} >>$@
	@+${MAKE} -sf config/pkgs.mk
.PHONY: ${GEN}/pkgs.mk

# Auto-detect dependencies
${PKG_MKS}: ${GEN}/flags.mk
	@+${MAKE} -sf config/pkg.mk TARGET=$@
.PHONY: ${PKG_MKS}