summaryrefslogtreecommitdiff
path: root/Makefile.rules
diff options
context:
space:
mode:
authorVadim Bendebury <vbendeb@chromium.org>2020-02-24 17:20:57 -0800
committerCommit Bot <commit-bot@chromium.org>2020-03-31 23:24:37 +0000
commit804d65e5fd86057e78c0d0b5f6139172d20b8207 (patch)
tree186908de441fd55d8a056a226188e63187b327fd /Makefile.rules
parent3ab80b560a9b434fe9a3fa82c546009fca56cfd1 (diff)
downloadchrome-ec-804d65e5fd86057e78c0d0b5f6139172d20b8207.tar.gz
make: add preprocessor stage
For the upcoming introduction of transitioning Cr50 console communications to packet mode, there is a need to be able to replace all print function invocations in the code with calls to packet sending function. This replacement is easiest to make in C preprocessor outputs, as there all macros are replaced with actual function invocations. This patch adds a configuration option CONFIG_EXTRACT_PRINTF_STRINGS, when enabled, building of the image object files starts happening in three steps instead of one, instead of .c => .o transition, the steps are .c => .E => .Ep => .o, where .E is the C preprocessor output, and .Ep is result of post processing by ./util/util_precompile.py. BUG=b:149964350 TEST=image layout does not change if CONFIG_EXTRACT_PRINTF_STRINGS is not defined. With the rest of the patches applied defining the above config option allows to build a Cr50 image supporting packet console communications mode. Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Change-Id: I20b8ba7c5d13cb54ac6adbdbce856d92023ce997 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2113122 Reviewed-by: Randall Spangler <rspangler@chromium.org>
Diffstat (limited to 'Makefile.rules')
-rw-r--r--Makefile.rules14
1 files changed, 13 insertions, 1 deletions
diff --git a/Makefile.rules b/Makefile.rules
index 1f9b05b1af..ecbccceb80 100644
--- a/Makefile.rules
+++ b/Makefile.rules
@@ -83,6 +83,9 @@ cmd_run_fuzz = build/host/$*/$*.exe -seed=1 -runs=1 $(silent) \
cmd_exe = $(CC) $(ro-objs) $(HOST_TEST_LDFLAGS) $(LDFLAGS_EXTRA) -o $@
cmd_c_to_o = $(CC) $(C_WARN) $(CFLAGS) -MMD -MP -MF $@.d -c $< \
-MT $(@D)/$(@F) -o $(@D)/$(@F)
+cmd_c_to_e = $(CC) $(C_WARN) $(CFLAGS) -MMD -MP -MF $@.d -E $< \
+ -MT $(@D)/$(@F) -o $(@D)/$(@F)
+cmd_ep_to_o = $(CC) $(C_WARN) $(CFLAGS) -x c -c $< -o $(@D)/$(@F)
cmd_cxx_to_o = $(CXX) -std=c++11 $(CFLAGS) $(CXXFLAGS) -MMD -MP -MF $@.d -c $< \
-MT $(@D)/$(@F) -o $(@D)/$(@F)
cmd_c_to_build = $(BUILDCC) $(BUILD_CFLAGS) \
@@ -482,9 +485,19 @@ $(out)/RO/%.o.cmd:%.c
$(file > $@,$(subst .o.cmd,.o,$(cmd_c_to_o)))
$(out)/RO/%.o:%.c
$(call quiet,c_to_o,CC )
+ifeq ($(CONFIG_EXTRACT_PRINTF_STRINGS),)
$(out)/RW/%.o:%.c
$(call quiet,c_to_o,CC )
+$(rw-objs): | $(out)/ec_version.h
+else
+$(out)/RW/%.o:$(out)/RW/%.Ep
+ $(call quiet,ep_to_o,EO )
+$(out)/RW/%.E:%.c
+ $(call quiet,c_to_e,CE )
+
+$(rw-es): | $(out)/ec_version.h
+endif
$(out)/RO/%.o:%.cc
$(call quiet,cxx_to_o,CXX )
$(out)/RW/%.o:%.cc
@@ -537,7 +550,6 @@ endif
# that truly depend on ec_version.h will have that information encoded in their
# .d file.
$(ro-objs): | $(out)/ec_version.h
-$(rw-objs): | $(out)/ec_version.h
$(sharedlib-objs): | $(out)/ec_version.h
$(out)/ec_version.h: