diff options
Diffstat (limited to 'build')
-rw-r--r-- | build/auto.mk | 54 | ||||
-rw-r--r-- | build/config.mk | 21 | ||||
-rw-r--r-- | build/exports.mk | 5 | ||||
-rw-r--r-- | build/flags.mk | 61 | ||||
-rw-r--r-- | build/header.mk | 4 | ||||
-rw-r--r-- | build/pkgs.mk | 4 |
6 files changed, 93 insertions, 56 deletions
diff --git a/build/auto.mk b/build/auto.mk new file mode 100644 index 0000000..9cdf9e3 --- /dev/null +++ b/build/auto.mk @@ -0,0 +1,54 @@ +# Copyright © Tavian Barnes <tavianator@tavianator.com> +# SPDX-License-Identifier: 0BSD + +# Makefile that generates gen/auto.mk + +include build/prelude.mk +include gen/vars.mk +include gen/early.mk +include gen/late.mk +include build/exports.mk + +# Auto-detected flags +AUTO_FLAGS := \ + gen/flags/std.mk \ + gen/flags/bind-now.mk \ + gen/flags/deps.mk \ + gen/flags/pthread.mk \ + gen/flags/Wformat.mk \ + gen/flags/Wimplicit-fallthrough.mk \ + gen/flags/Wimplicit.mk \ + gen/flags/Wmissing-decls.mk \ + gen/flags/Wmissing-var-decls.mk \ + gen/flags/Wshadow.mk \ + gen/flags/Wsign-compare.mk \ + gen/flags/Wstrict-prototypes.mk \ + gen/flags/Wundef-prefix.mk + +gen/auto.mk: ${AUTO_FLAGS} + ${MSG} "[ GEN] $@" + @printf '# %s\n' "$@" >$@ + @cat $^ >>$@ + @cat ${^:%=%.log} >gen/flags.log + ${VCAT} $@ +.PHONY: gen/auto.mk + +# Check that the C compiler works at all +cc:: + @build/cc.sh -q build/empty.c -o gen/.cc.out; \ + ret=$$?; \ + build/msg-if.sh "[ CC ] build/empty.c" test $$ret -eq 0; \ + exit $$ret + +# The short name of the config test +SLUG = ${@:gen/%.mk=%} +# The source file to build +CSRC = build/${SLUG}.c +# The hidden output file name +OUT = ${SLUG:flags/%=gen/flags/.%.out} + +${AUTO_FLAGS}: cc + @${MKDIR} ${@D} + @build/flags-if.sh ${CSRC} -o ${OUT} >$@ 2>$@.log; \ + build/msg-if.sh "[ CC ] ${SLUG}.c" test $$? -eq 0 +.PHONY: ${AUTO_FLAGS} diff --git a/build/config.mk b/build/config.mk index 663926c..be57678 100644 --- a/build/config.mk +++ b/build/config.mk @@ -10,8 +10,16 @@ include build/exports.mk config: gen/config.mk gen/config.h .PHONY: config +# All the generated makefile fragments +MKS := \ + gen/vars.mk \ + gen/early.mk \ + gen/auto.mk \ + gen/pkgs.mk \ + gen/late.mk + # The main configuration file, which includes the others -gen/config.mk: gen/vars.mk gen/flags.mk gen/pkgs.mk +gen/config.mk: ${MKS} ${MSG} "[ GEN] $@" @printf '# %s\n' "$@" >$@ @printf 'include %s\n' $^ >>$@ @@ -36,16 +44,17 @@ gen/vars.mk:: # 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 +gen/early.mk gen/late.mk: gen/vars.mk @+XMAKEFLAGS="$$MAKEFLAGS" ${MAKE} -sf build/flags.mk $@ -.PHONY: gen/flags.mk + +# Auto-detected build flags +gen/auto.mk: gen/early.mk gen/late.mk + @+XMAKEFLAGS="$$MAKEFLAGS" ${MAKE} -sf build/auto.mk $@ # Auto-detect dependencies and their build flags -gen/pkgs.mk: gen/flags.mk +gen/pkgs.mk: gen/auto.mk @+XMAKEFLAGS="$$MAKEFLAGS" ${MAKE} -sf build/pkgs.mk $@ -.PHONY: gen/pkgs.mk # Compile-time feature detection gen/config.h: gen/pkgs.mk @+XMAKEFLAGS="$$MAKEFLAGS" ${MAKE} -sf build/header.mk $@ -.PHONY: gen/config.h diff --git a/build/exports.mk b/build/exports.mk index 913a1aa..a616c59 100644 --- a/build/exports.mk +++ b/build/exports.mk @@ -17,4 +17,9 @@ export XCFLAGS=${_CFLAGS} export XLDFLAGS=${_LDFLAGS} export XLDLIBS=${_LDLIBS} +export CONF_CPPFLAGS=${CPPFLAGS} ${EXTRA_CPPFLAGS} +export CONF_CFLAGS=${CFLAGS} ${EXTRA_CFLAGS} +export CONF_LDFLAGS=${LDFLAGS} ${EXTRA_LDFLAGS} +export CONF_LDLIBS=${LDLIBS} ${EXTRA_LDLIBS} + export XNOLIBS=${NOLIBS} diff --git a/build/flags.mk b/build/flags.mk index 00876d1..c64a80b 100644 --- a/build/flags.mk +++ b/build/flags.mk @@ -1,7 +1,7 @@ # Copyright © Tavian Barnes <tavianator@tavianator.com> # SPDX-License-Identifier: 0BSD -# Makefile that generates gen/flags.mk +# Makefile that generates gen/{early,late}.mk include build/prelude.mk include gen/vars.mk @@ -79,32 +79,10 @@ _CFLAGS += ${LTO_CFLAGS,${_LTO}} # Configurable flags CFLAGS ?= -g -Wall -# Add the configurable flags last so they can override ours -_CPPFLAGS += ${CPPFLAGS} ${EXTRA_CPPFLAGS} -_CFLAGS += ${CFLAGS} ${EXTRA_CFLAGS} -_LDFLAGS += ${LDFLAGS} ${EXTRA_LDFLAGS} -# (except LDLIBS, as earlier libs override later ones) -_LDLIBS := ${LDLIBS} ${EXTRA_LDLIBS} ${_LDLIBS} - include build/exports.mk -# Conditionally-supported flags -AUTO_FLAGS := \ - gen/flags/std.mk \ - gen/flags/bind-now.mk \ - gen/flags/deps.mk \ - gen/flags/pthread.mk \ - gen/flags/Wformat.mk \ - gen/flags/Wimplicit-fallthrough.mk \ - gen/flags/Wimplicit.mk \ - gen/flags/Wmissing-decls.mk \ - gen/flags/Wmissing-var-decls.mk \ - gen/flags/Wshadow.mk \ - gen/flags/Wsign-compare.mk \ - gen/flags/Wstrict-prototypes.mk \ - gen/flags/Wundef-prefix.mk - -gen/flags.mk: ${AUTO_FLAGS} +# Saves the internal flags +gen/early.mk:: ${MSG} "[ GEN] $@" @printf '# %s\n' "$@" >$@ @printf '_CPPFLAGS := %s\n' "$$XCPPFLAGS" >>$@ @@ -113,27 +91,14 @@ gen/flags.mk: ${AUTO_FLAGS} @printf '_LDLIBS := %s\n' "$$XLDLIBS" >>$@ @printf 'NOLIBS := %s\n' "$$XNOLIBS" >>$@ @test "${OS}-${SAN}" != FreeBSD-y || printf 'POSTLINK = elfctl -e +noaslr $$@\n' >>$@ - @cat $^ >>$@ - @cat ${^:%=%.log} >gen/flags.log ${VCAT} $@ -.PHONY: gen/flags.mk - -# Check that the C compiler works at all -cc:: - @build/cc.sh -q build/empty.c -o gen/.cc.out; \ - ret=$$?; \ - build/msg-if.sh "[ CC ] build/empty.c" test $$ret -eq 0; \ - exit $$ret - -# The short name of the config test -SLUG = ${@:gen/%.mk=%} -# The source file to build -CSRC = build/${SLUG}.c -# The hidden output file name -OUT = ${SLUG:flags/%=gen/flags/.%.out} - -${AUTO_FLAGS}: cc - @${MKDIR} ${@D} - @build/flags-if.sh ${CSRC} -o ${OUT} >$@ 2>$@.log; \ - build/msg-if.sh "[ CC ] ${SLUG}.c" test $$? -eq 0 -.PHONY: ${AUTO_FLAGS} + +# Save explicit flags from ./configure separately so they can override the rest +gen/late.mk:: + ${MSG} "[ GEN] $@" + @printf '# %s\n' "$@" >$@ + @printf '_CPPFLAGS += %s\n' "$$CONF_CPPFLAGS" >>$@ + @printf '_CFLAGS += %s\n' "$$CONF_CFLAGS" >>$@ + @printf '_LDFLAGS += %s\n' "$$CONF_LDFLAGS" >>$@ + @printf '_LDLIBS := %s $${_LDLIBS}\n' "$$CONF_LDLIBS" >>$@ + ${VCAT} $@ diff --git a/build/header.mk b/build/header.mk index 723922e..ae52c12 100644 --- a/build/header.mk +++ b/build/header.mk @@ -5,8 +5,10 @@ include build/prelude.mk include gen/vars.mk -include gen/flags.mk +include gen/early.mk +include gen/auto.mk include gen/pkgs.mk +include gen/late.mk include build/exports.mk # All header fragments we generate diff --git a/build/pkgs.mk b/build/pkgs.mk index f45c357..bed17be 100644 --- a/build/pkgs.mk +++ b/build/pkgs.mk @@ -5,7 +5,9 @@ include build/prelude.mk include gen/vars.mk -include gen/flags.mk +include gen/early.mk +include gen/auto.mk +include gen/late.mk include build/exports.mk HEADERS := ${ALL_PKGS:%=gen/with/%.h} |