diff options
Diffstat (limited to 'lib/build-obj.mk')
-rw-r--r-- | lib/build-obj.mk | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/lib/build-obj.mk b/lib/build-obj.mk new file mode 100644 index 0000000..95c95b2 --- /dev/null +++ b/lib/build-obj.mk @@ -0,0 +1,73 @@ +# Copyright 2022 Alejandro Colomar <alx@kernel.org> +# SPDX-License-Identifier: LGPL-3.0-or-later WITH LGPL-3.0-linking-exception + + +ifndef LIB_BUILD_OBJ_MK_ +LIB_BUILD_OBJ_MK_ := 1 + + +include $(srcdir)/lib/build.mk +include $(srcdir)/lib/cmd.mk +include $(srcdir)/lib/src.mk +include $(srcdir)/lib/verbose.mk +include $(srcdir)/lib/version.mk + + +_TU_gch := $(addsuffix .gch,$(_TU_h)) +_TU_i := $(addsuffix .i,$(_TU_c)) +_TU_s := $(addsuffix .s,$(_TU_c)) +_TU_o := $(addsuffix .o,$(_TU_c)) + + +$(_TU_gch): %.gch: % $(mk) $(_LIB_pc_u) | %.d $$(@D)/ + $(info CC (pch) $@) + for opt in g 0 1 2 s 3 fast; do \ + $(CC) $(CPPFLAGS) $(CFLAGS) -O$$opt -c -o $*.O$$opt.gch $<; \ + done + $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $< + +$(_TU_i): %.i: % $(mk) $(_LIB_pc_u) | %.d $$(@D)/ + $(info CC (cpp) $@) + for opt in g 0 1 2 s 3 fast; do \ + $(CC) $(CPPFLAGS) $(CFLAGS) -O$$opt -E -o $*.O$$opt.i $<; \ + done + $(CC) $(CPPFLAGS) $(CFLAGS) -E -o $@ $< + +$(_TU_s): %.s: %.i $(mk) $(_LIB_pc_u) | %.d $$(@D)/ + $(info CC $@) + for opt in g 0 1 2 s 3 fast; do \ + $(CC) $(CPPFLAGS) $(CFLAGS) -O$$opt -S -o $*.O$$opt.s $*.O$$opt.i; \ + done + $(CC) $(CPPFLAGS) $(CFLAGS) -S -o $@ $< + +$(_TU_o): %.c.o: %.c.s %.h.gch $(mk) $(_LIB_pc_u) | %.c.d $$(@D)/ + $(info CC (as) $@) + for opt in g 0 1 2 s 3 fast; do \ + $(CC) $(CPPFLAGS) $(CFLAGS) -O$$opt -c -o $*.c.O$$opt.o $*.c.O$$opt.s; \ + done + $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $< + + +.PHONY: build-obj-pch +build-obj-pch: $(_TU_gch) + @: + +.PHONY: build-obj-cpp +build-obj-cpp: $(_TU_i) + @: + +.PHONY: build-obj-cc +build-obj-cc: $(_TU_s) + @: + +.PHONY: build-obj-as +build-obj-as: $(_TU_o) + @: + + +.PHONY: build-obj +build-obj: build-obj-as + @: + + +endif # include guard |