summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorMasahiro Yamada <masahiroy@kernel.org>2020-05-19 16:13:50 +0900
committerSascha Hauer <s.hauer@pengutronix.de>2020-05-25 08:51:37 +0200
commitdc4cff0209ba243c5438fb278c46cbdb7889f44c (patch)
tree29828fb0a1a264d41a4ac1714385e807321ddd84 /scripts
parentf74113df7e90c07951c60ed01a6828c64cdcd9bb (diff)
downloadbarebox-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.build33
-rw-r--r--scripts/Makefile.lib9
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)