11# Copyright © Tavian Barnes <[email protected] >22# SPDX-License-Identifier: 0BSD
33
4- # Makefile that generates gen/flags .mk
4+ # Makefile that generates gen/{early,late} .mk
55
66include build/prelude.mk
77include gen/vars.mk
@@ -79,32 +79,10 @@ _CFLAGS += ${LTO_CFLAGS,${_LTO}}
7979# Configurable flags
8080CFLAGS ?= -g -Wall
8181
82- # Add the configurable flags last so they can override ours
83- _CPPFLAGS += ${CPPFLAGS} ${EXTRA_CPPFLAGS}
84- _CFLAGS += ${CFLAGS} ${EXTRA_CFLAGS}
85- _LDFLAGS += ${LDFLAGS} ${EXTRA_LDFLAGS}
86- # (except LDLIBS, as earlier libs override later ones)
87- _LDLIBS := ${LDLIBS} ${EXTRA_LDLIBS} ${_LDLIBS}
88-
8982include build/exports.mk
9083
91- # Conditionally-supported flags
92- AUTO_FLAGS := \
93- gen/flags/std.mk \
94- gen/flags/bind-now.mk \
95- gen/flags/deps.mk \
96- gen/flags/pthread.mk \
97- gen/flags/Wformat.mk \
98- gen/flags/Wimplicit-fallthrough.mk \
99- gen/flags/Wimplicit.mk \
100- gen/flags/Wmissing-decls.mk \
101- gen/flags/Wmissing-var-decls.mk \
102- gen/flags/Wshadow.mk \
103- gen/flags/Wsign-compare.mk \
104- gen/flags/Wstrict-prototypes.mk \
105- gen/flags/Wundef-prefix.mk
106-
107- gen/flags.mk : ${AUTO_FLAGS}
84+ # Saves the internal flags
85+ gen/early.mk ::
10886 ${MSG} " [ GEN] $@ "
10987 @printf ' # %s\n' " $@ " > $@
11088 @printf ' _CPPFLAGS := %s\n' " $$ XCPPFLAGS" >> $@
@@ -113,27 +91,14 @@ gen/flags.mk: ${AUTO_FLAGS}
11391 @printf ' _LDLIBS := %s\n' " $$ XLDLIBS" >> $@
11492 @printf ' NOLIBS := %s\n' " $$ XNOLIBS" >> $@
11593 @test " ${OS} -${SAN} " ! = FreeBSD-y || printf ' POSTLINK = elfctl -e +noaslr $$@\n' >> $@
116- @cat $^ >> $@
117- @cat ${^:% =% .log} > gen/flags.log
11894 ${VCAT} $@
119- .PHONY : gen/flags.mk
120-
121- # Check that the C compiler works at all
122- cc ::
123- @build/cc.sh -q build/empty.c -o gen/.cc.out; \
124- ret=$$? ; \
125- build/msg-if.sh " [ CC ] build/empty.c" test $$ ret -eq 0; \
126- exit $$ ret
127-
128- # The short name of the config test
129- SLUG = ${@:gen/%.mk=%}
130- # The source file to build
131- CSRC = build/${SLUG}.c
132- # The hidden output file name
133- OUT = ${SLUG:flags/%=gen/flags/.%.out}
134-
135- ${AUTO_FLAGS} : cc
136- @${MKDIR} ${@ D}
137- @build/flags-if.sh ${CSRC} -o ${OUT} > $@ 2> $@ .log; \
138- build/msg-if.sh " [ CC ] ${SLUG} .c" test $$? -eq 0
139- .PHONY : ${AUTO_FLAGS}
95+
96+ # Save explicit flags from ./configure separately so they can override the rest
97+ gen/late.mk ::
98+ ${MSG} " [ GEN] $@ "
99+ @printf ' # %s\n' " $@ " > $@
100+ @printf ' _CPPFLAGS += %s\n' " $$ CONF_CPPFLAGS" >> $@
101+ @printf ' _CFLAGS += %s\n' " $$ CONF_CFLAGS" >> $@
102+ @printf ' _LDFLAGS += %s\n' " $$ CONF_LDFLAGS" >> $@
103+ @printf ' _LDLIBS := %s $${_LDLIBS}\n' " $$ CONF_LDLIBS" >> $@
104+ ${VCAT} $@
0 commit comments