diff options
author | Masahiro Yamada <masahiroy@kernel.org> | 2020-05-19 16:13:50 +0900 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2020-05-25 08:51:37 +0200 |
commit | dc4cff0209ba243c5438fb278c46cbdb7889f44c (patch) | |
tree | 29828fb0a1a264d41a4ac1714385e807321ddd84 /scripts | |
parent | f74113df7e90c07951c60ed01a6828c64cdcd9bb (diff) | |
download | barebox-dc4cff0209ba243c5438fb278c46cbdb7889f44c.tar.gz barebox-dc4cff0209ba243c5438fb278c46cbdb7889f44c.tar.xz |
kbuild: unify barebox and pbl build commands
The current Linux uses the unified build command for built-in objects
and module objects. This is possible because part-of-module is set to
y when the target is being built for a module. If so, quiet_modtag is
set to [M], and modkern_cflags is set to KBUILD_CFLAGS_MODULE instead
of KBUILD_CFLAGS_KERNEL.
Currently, barebox uses a separate build command for pbl, but the
difference between cmd_cc_o_c and cmd_pbl_cc_o_c is just
"-D__PBL__ $(PBL_CPPFLAGS)".
By using the same approach as Linux, they can be unified.
Set part-of-pbl flag to y when the target is being built for pbl.
Merge cmd_as_o_S and cmd_link_o_target as well.
This also changes the shortlog style as follows:
PBLCC -> CC [P]
PBLAS -> AS [P]
PBLLD -> LD [P]
This is more consistent with the policy in the Linux build system.
In Linux, a capital letter enclosed square blackets indicates which
target the object is being built for.
CC object built for built-in
CC [M] object built for modules
CC [U] object built for userspace (proposed for Linux 5.8-rc1)
The idea behind this is we use the same compiler $(CC) for them.
Only the difference is the compiler flags. On the other hand, host
programs are compiled by a different tool, $(HOSTCC), hence the
shortlog is 'HOSTCC'.
Barebox supports module builds (it seems), but the [P] notation does
not conflict with [M] because pbl has a limited memory footprint.
We never expect pbl can support the module feature.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/Makefile.build | 33 | ||||
-rw-r--r-- | scripts/Makefile.lib | 9 |
2 files changed, 13 insertions, 29 deletions
diff --git a/scripts/Makefile.build b/scripts/Makefile.build index f575a07fdf..ed2bb28c55 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -118,24 +118,17 @@ cmd_cc_i_c = $(CPP) $(c_flags) -o $@ $< quiet_cmd_cc_o_c = CC $(quiet_modtag) $@ cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $< -quiet_cmd_pbl_cc_o_c = PBLCC $@ - cmd_pbl_cc_o_c = $(CC) -D__PBL__ $(c_flags) $(PBL_CPPFLAGS) -c -o $@ $< define rule_cc_o_c $(call cmd,checksrc) $(call cmd_and_fixdep,cc_o_c) endef -define rule_pbl_cc_o_c - $(call cmd,checksrc) - $(call cmd_and_fixdep,pbl_cc_o_c) -endef - # Built-in and composite module parts %.pbl.o: %.c FORCE $(call cmd,force_checksrc) - $(call if_changed_rule,pbl_cc_o_c) + $(call if_changed_rule,cc_o_c) %.o: %.c FORCE $(call cmd,force_checksrc) @@ -168,11 +161,8 @@ cmd_as_s_S = $(CPP) $(a_flags) -o $@ $< quiet_cmd_as_o_S = AS $(quiet_modtag) $@ cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $< -quiet_cmd_pbl_as_o_S = PBLAS $@ -cmd_pbl_as_o_S = $(CC) -D__PBL__ $(a_flags) $(PBL_CPPFLAGS) -c -o $@ $< - %.pbl.o: %.S FORCE - $(call if_changed_dep,pbl_as_o_S) + $(call if_changed_dep,as_o_S) %.o: %.S FORCE $(call if_changed_dep,as_o_S) @@ -198,31 +188,22 @@ $(sort $(subdir-obj-y)): $(subdir-ym) ; # # Rule to compile a set of .o files into one .o file # -ifdef builtin-target -quiet_cmd_link_o_target = LD $@ + # If the list of objects to link is empty, just create an empty built-in.o -cmd_link_o_target = $(if $(strip $(obj-y)),\ - $(LD) $(ld_flags) -r -o $@ $(filter $(obj-y), $^),\ +quiet_cmd_link_o_target = LD $(quiet_modtag) $@ +cmd_link_o_target = $(if $(strip $(real-prereqs)),\ + $(LD) $(ld_flags) -r -o $@ $(real-prereqs),\ rm -f $@; $(AR) rcs $@) $(builtin-target): $(obj-y) FORCE $(call if_changed,link_o_target) targets += $(builtin-target) -endif # builtin-target - -ifdef pbl-target -quiet_cmd_pbl_link_o_target = PBLLD $@ -# If the list of objects to link is empty, just create an empty built-in-pbl.o -cmd_pbl_link_o_target = $(if $(strip $(pbl-y)),\ - $(LD) $(ld_flags) -r -o $@ $(filter $(pbl-y), $^),\ - rm -f $@; $(AR) rcs $@) $(pbl-target): $(pbl-y) FORCE - $(call if_changed,pbl_link_o_target) + $(call if_changed,link_o_target) targets += $(pbl-target) -endif # pbl-target # # Rule to compile a set of .o files into one .a file diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib index a6cba747fd..55d251844d 100644 --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib @@ -154,7 +154,10 @@ __cpp_flags = $(call flags,_cpp_flags) endif part-of-module = $(if $(filter $(basename $@).o, $(real-obj-m)),y) -quiet_modtag = $(if $(part-of-module),[M], ) +part-of-pbl = $(if $(filter $(basename $@).o, $(pbl-y) $(pbl-target)),y) +quiet_modtag = $(if $(part-of-pbl),[P],$(if $(part-of-module),[M], )) + +pbl_cppflags = $(if $(part-of-pbl), -D__PBL__ $(PBL_CPPFLAGS)) modkern_cflags = \ $(if $(part-of-module), \ @@ -166,11 +169,11 @@ modkern_aflags = $(if $(part-of-module), \ $(KBUILD_AFLAGS_KERNEL) $(AFLAGS_KERNEL)) c_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(KBUILD_CPPFLAGS) \ - $(__c_flags) $(modkern_cflags) \ + $(__c_flags) $(modkern_cflags) $(pbl_cppflags) \ -D"KBUILD_STR(s)=\#s" $(basename_flags) $(modname_flags) a_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(KBUILD_CPPFLAGS) \ - $(__a_flags) $(modkern_aflags) + $(__a_flags) $(modkern_aflags) $(pbl_cppflags) cpp_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(__cpp_flags) |