Re: [U-Boot] [PATCH v2 01/19] Makefile: prepare for using Kbuild-style Makefile
Hi Masahiro, On Sun, Oct 20, 2013 at 10:56 PM, Masahiro Yamada yamad...@jp.panasonic.com wrote: Hello, Simon. Would looking for obj- be better or worse? At first I thought of this but I was kind of worried whether all makefiles should forcibly have obj-y or obj-. arch/arm/cpu/armv7/tegra114/ arch/arm/cpu/armv7/tegra30/ directories have no source files but only a Makefile. After all, I simply added obj- := line in them, so I think your suggestion will work. If you prefer to search obj-, I will consider to change at version 3. No, it doesn't matter, it sounds like what you are doing is just as good, and it is temporary as you say. I wonder how temporary? I posted a new series Third step towards Kbuild: Convert rest of makefiles (consists of 18 patch files) The series deletes the temporary grep switch. Altough it is Tom who decides when the series should be applied, I hope it is not so late. The merge window only opened recently so it should be fine. Regards, Simon Best Regards Masahiro Yamada ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v2 01/19] Makefile: prepare for using Kbuild-style Makefile
Hello, Simon. Would looking for obj- be better or worse? At first I thought of this but I was kind of worried whether all makefiles should forcibly have obj-y or obj-. arch/arm/cpu/armv7/tegra114/ arch/arm/cpu/armv7/tegra30/ directories have no source files but only a Makefile. After all, I simply added obj- := line in them, so I think your suggestion will work. If you prefer to search obj-, I will consider to change at version 3. No, it doesn't matter, it sounds like what you are doing is just as good, and it is temporary as you say. I wonder how temporary? I posted a new series Third step towards Kbuild: Convert rest of makefiles (consists of 18 patch files) The series deletes the temporary grep switch. Altough it is Tom who decides when the series should be applied, I hope it is not so late. Best Regards Masahiro Yamada ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v2 01/19] Makefile: prepare for using Kbuild-style Makefile
Hello Simon +# Tentative step for Kbuild-style makefiles coexist with conventional U-Boot style makefiles +# U-Boot conventional sub makefiles always include some other makefiles. +# So, the build system searches a line beginning with include before entering into the sub makefile +# in order to distinguish which style it is. Would looking for obj- be better or worse? At first I thought of this but I was kind of worried whether all makefiles should forcibly have obj-y or obj-. arch/arm/cpu/armv7/tegra114/ arch/arm/cpu/armv7/tegra30/ directories have no source files but only a Makefile. After all, I simply added obj- := line in them, so I think your suggestion will work. If you prefer to search obj-, I will consider to change at version 3. In any case, this ugly grep switch is tentative. I want to refactor all makefiles and delete this switch as soon as possible. an indent might help here, and below. I will fix at v3. + fi $(LIBS): depend $(SUBDIR_TOOLS) - $(MAKE) -C $(dir $(subst $(obj),,$@)) + if grep -q ^include $(dir $(subst $(obj),,$@))Makefile; then \ This check seems to appear a lot - could it become a $(call ...) perhaps? I did not care so much about this part becuase it is temporary. But re-writing it shortly with $(call ...) is not difficult. I will try at v3. Thanks for your advice. Re testing, I used: $ ./tools/buildman/buildman -b try-kbuild -k and confirmed that the binaries do change, for example, with cm41xx: $ wc ... 13485418 123176 try-kbuild/01_of_20_g0c5274e6_Prepare-v2013.04-rc4/cm41xx/u-boot.bin 13485417 123188 try-kbuild/02_of_20_gd3068182_Makefile--prepare-fo/cm41xx/u-boot.bin The change may well be harmless though. It is probably because of include/generated/version_autogenerated.h The length of PLAIN_VERSION and U_BOOT_VERSION changes because the output `git describe` command is used for here. Actually I gave it a try. For master branch (Prepare v2013.04-rc4), I got: #define PLAIN_VERSION 2013.10-rc4 #define U_BOOT_VERSION U-Boot 2013.10-rc4 #define CC_VERSION_STRING arm-linux-gnueabi-gcc (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3 #define LD_VERSION_STRING GNU ld (GNU Binutils for Ubuntu) 2.23.2 For try-kbuild branch (Makefile: prepare for using Kbuild-style Makefile) I got: #define PLAIN_VERSION 2013.10-rc4-1-gc31a399 #define U_BOOT_VERSION U-Boot 2013.10-rc4-1-gc31a399 #define CC_VERSION_STRING arm-linux-gnueabi-gcc (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3 #define LD_VERSION_STRING GNU ld (GNU Binutils for Ubuntu) 2.23.2 For the list of things you should take into account to get identical output files, please refer the thread of version1 of this series: [U-Boot] [PATCH 00/19] First step towards Kbuild: Use Kbuild style makefiles Message-Id: 20130917093533.738a.aa925...@jp.panasonic.com (2) Git commit hash Git commit hash is contained in include/generated/version_autogenerated.h. So, I also modified include/version.h not to include it as follows: #ifndef DO_DEPS_ONLY -#include generated/version_autogenerated.h +/* #include generated/version_autogenerated.h */ +#define PLAIN_VERSION __DUMMY__ +#define U_BOOT_VERSION __DUMMY__ +#define CC_VERSION_STRING __DUMMY__ +#define LD_VERSION_STRING __DUMMY__ #endif This is what I did when I compared md5sum. After applying above as a prerequisite commit, I tried 'tools/buildman/buildman -b try-kbuild -k' again and I got the same size for cm41xx/u-boot.bin If you compare the size of u-boot.bin, please take care of the order of object files too. I also mentioned this in the thread of v1. It would be nice to add a feature to buildman to compare binaries. Of course we would need to add a Makefile option to disable the timestamp embedding first, since all binaries are different because of that. Sounds a good idea. I will take a look when I have time. Best Regards Masahiro Yamada ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v2 01/19] Makefile: prepare for using Kbuild-style Makefile
Hi Masahiro, On Fri, Oct 4, 2013 at 3:59 AM, Masahiro Yamada yamad...@jp.panasonic.com wrote: Hello Simon +# Tentative step for Kbuild-style makefiles coexist with conventional U-Boot style makefiles +# U-Boot conventional sub makefiles always include some other makefiles. +# So, the build system searches a line beginning with include before entering into the sub makefile +# in order to distinguish which style it is. Would looking for obj- be better or worse? At first I thought of this but I was kind of worried whether all makefiles should forcibly have obj-y or obj-. arch/arm/cpu/armv7/tegra114/ arch/arm/cpu/armv7/tegra30/ directories have no source files but only a Makefile. After all, I simply added obj- := line in them, so I think your suggestion will work. If you prefer to search obj-, I will consider to change at version 3. No, it doesn't matter, it sounds like what you are doing is just as good, and it is temporary as you say. I wonder how temporary? In any case, this ugly grep switch is tentative. I want to refactor all makefiles and delete this switch as soon as possible. an indent might help here, and below. I will fix at v3. + fi $(LIBS): depend $(SUBDIR_TOOLS) - $(MAKE) -C $(dir $(subst $(obj),,$@)) + if grep -q ^include $(dir $(subst $(obj),,$@))Makefile; then \ This check seems to appear a lot - could it become a $(call ...) perhaps? I did not care so much about this part becuase it is temporary. But re-writing it shortly with $(call ...) is not difficult. I will try at v3. Thanks for your advice. Re testing, I used: $ ./tools/buildman/buildman -b try-kbuild -k and confirmed that the binaries do change, for example, with cm41xx: $ wc ... 13485418 123176 try-kbuild/01_of_20_g0c5274e6_Prepare-v2013.04-rc4/cm41xx/u-boot.bin 13485417 123188 try-kbuild/02_of_20_gd3068182_Makefile--prepare-fo/cm41xx/u-boot.bin The change may well be harmless though. It is probably because of include/generated/version_autogenerated.h The length of PLAIN_VERSION and U_BOOT_VERSION changes because the output `git describe` command is used for here. Actually I gave it a try. For master branch (Prepare v2013.04-rc4), I got: #define PLAIN_VERSION 2013.10-rc4 #define U_BOOT_VERSION U-Boot 2013.10-rc4 #define CC_VERSION_STRING arm-linux-gnueabi-gcc (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3 #define LD_VERSION_STRING GNU ld (GNU Binutils for Ubuntu) 2.23.2 For try-kbuild branch (Makefile: prepare for using Kbuild-style Makefile) I got: #define PLAIN_VERSION 2013.10-rc4-1-gc31a399 #define U_BOOT_VERSION U-Boot 2013.10-rc4-1-gc31a399 #define CC_VERSION_STRING arm-linux-gnueabi-gcc (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3 #define LD_VERSION_STRING GNU ld (GNU Binutils for Ubuntu) 2.23.2 For the list of things you should take into account to get identical output files, please refer the thread of version1 of this series: [U-Boot] [PATCH 00/19] First step towards Kbuild: Use Kbuild style makefiles Message-Id: 20130917093533.738a.aa925...@jp.panasonic.com (2) Git commit hash Git commit hash is contained in include/generated/version_autogenerated.h. So, I also modified include/version.h not to include it as follows: #ifndef DO_DEPS_ONLY -#include generated/version_autogenerated.h +/* #include generated/version_autogenerated.h */ +#define PLAIN_VERSION __DUMMY__ +#define U_BOOT_VERSION __DUMMY__ +#define CC_VERSION_STRING __DUMMY__ +#define LD_VERSION_STRING __DUMMY__ #endif This is what I did when I compared md5sum. After applying above as a prerequisite commit, I tried 'tools/buildman/buildman -b try-kbuild -k' again and I got the same size for cm41xx/u-boot.bin If you compare the size of u-boot.bin, please take care of the order of object files too. I also mentioned this in the thread of v1. It would be nice to add a feature to buildman to compare binaries. Of course we would need to add a Makefile option to disable the timestamp embedding first, since all binaries are different because of that. Sounds a good idea. I will take a look when I have time. Regards, Simon ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v2 01/19] Makefile: prepare for using Kbuild-style Makefile
Hi, On Thu, Sep 26, 2013 at 5:51 AM, Masahiro Yamada yamad...@jp.panasonic.comwrote: In every sub directory, Makefile is like follows: include $(TOPDIR)/config.mk LIB = $(obj)libfoo.o COBJS := ... COBJS += ... SOBJS := ... SRCS:= $(SOBJS:.o=.S) $(COBJS:.o=.c) OBJS:= $(addprefix $(obj),$(COBJS) $(SOBJS)) all: $(obj).depend $(LIB) $(LIB): $(OBJS) $(call cmd_link_o_target, $(OBJS)) # include $(SRCTREE)/rules.mk sinclude $(obj).depend # Top and bottom parts are common in almost all sub-makefiles. This is a big waste. This commit pushes common parts of makefiles into script/Makefile.build. Going forward sub-makefiles only need to describe this part: COBJS := ... COBJS += ... SOBJS := ... But, script/Makefile.build includes the glue code to support obj-y, the following style (the same as Kbuild) is preferable: obj-y := ... obj-$(CONFIG_FOO) += ... obj-$(CONFIG_BAR) += ... The conventional (non-Kbuild) Makefile style is still supported. This is achieved by greping the Makefile before entering into it. U-Boot conventional sub makefiles always include some other makefiles. So the build system searches a line beginning with include keyword in the makefile in order to distinguish which style it is. If the Makefile include a include line, we assume it is a conventional U-Boot style. Otherwise, it is treated as a Kbuild-style makefile. (At first, I tried to grep rules.mk keyword instead, but I found it does not work. Almost all sub makefiles include rules.mk, but there exist three exception: - board/avnet/fx12mm/Makefile - board/avnet/v5fx30teval/Makefile - board/xilinx/ml507/Makefile These three makefiles include rules.mk indirectly. Anyway, they look weird, so they should be fixed lator.) With this tweak, we can switch sub-makefiles from U-Boot style to Kbuild style little by little. This refactoring of sub makefiles is the first step towards Kbuild, and makes it easy to import a real Kbuild from Linux Kernel. Note that this refactoring breaks nothing because it just moves the common parts into scripts/Makefile.build. Note one more thing: obj-y := foo/ # descending into foo sub directory syntax is not supported yet. (This feature will be implemented in the upcoming commit.) Of course, scripts/Makefile.build added by this commit is temporary. It shall be replaced with the one of Linux Kernel in future. Signed-off-by: Masahiro Yamada yamad...@jp.panasonic.com Cc: Simon Glass s...@chromium.org Cc: Tom Rini tr...@ti.com --- Changes for v2: - fix commit log (purely cosmetic) Makefile | 34 ++ scripts/Makefile.build | 48 spl/Makefile | 20 ++-- 3 files changed, 96 insertions(+), 6 deletions(-) create mode 100644 scripts/Makefile.build diff --git a/Makefile b/Makefile index 07abef4..36bbd09 100644 --- a/Makefile +++ b/Makefile @@ -593,14 +593,35 @@ ifeq ($(CONFIG_KALLSYMS),y) $(GEN_UBOOT) $(obj)common/system_map.o endif +# Tentative step for Kbuild-style makefiles coexist with conventional U-Boot style makefiles +# U-Boot conventional sub makefiles always include some other makefiles. +# So, the build system searches a line beginning with include before entering into the sub makefile +# in order to distinguish which style it is. Would looking for obj- be better or worse? +# If the Makefile include a include line, we assume it is an U-Boot style makefile. +# Otherwise, it is treated as a Kbuild-style makefile. + +# We do not need to build $(OBJS) explicitly. +# It is built while we are at $(CPUDIR)/lib$(CPU).o build. $(OBJS): depend - $(MAKE) -C $(CPUDIR) $(if $(REMOTE_BUILD),$@,$(notdir $@)) + if grep -q ^include $(CPUDIR)/Makefile; then \ + $(MAKE) -C $(CPUDIR) $(if $(REMOTE_BUILD),$@,$(notdir $@)); \ an indent might help here, and below. + fi $(LIBS): depend $(SUBDIR_TOOLS) - $(MAKE) -C $(dir $(subst $(obj),,$@)) + if grep -q ^include $(dir $(subst $(obj),,$@))Makefile; then \ This check seems to appear a lot - could it become a $(call ...) perhaps? + $(MAKE) -C $(dir $(subst $(obj),,$@)); \ + else \ + $(MAKE) -C $(dir $(subst $(obj),,$@)) -f $(TOPDIR)/scripts/Makefile.build; \ + mv $(dir $@)built-in.o $@; \ + fi $(LIBBOARD): depend $(LIBS) - $(MAKE) -C $(dir $(subst $(obj),,$@)) + if grep -q ^include $(dir $(subst $(obj),,$@))/Makefile; then \ + $(MAKE) -C $(dir
[U-Boot] [PATCH v2 01/19] Makefile: prepare for using Kbuild-style Makefile
In every sub directory, Makefile is like follows: include $(TOPDIR)/config.mk LIB = $(obj)libfoo.o COBJS := ... COBJS += ... SOBJS := ... SRCS:= $(SOBJS:.o=.S) $(COBJS:.o=.c) OBJS:= $(addprefix $(obj),$(COBJS) $(SOBJS)) all: $(obj).depend $(LIB) $(LIB): $(OBJS) $(call cmd_link_o_target, $(OBJS)) # include $(SRCTREE)/rules.mk sinclude $(obj).depend # Top and bottom parts are common in almost all sub-makefiles. This is a big waste. This commit pushes common parts of makefiles into script/Makefile.build. Going forward sub-makefiles only need to describe this part: COBJS := ... COBJS += ... SOBJS := ... But, script/Makefile.build includes the glue code to support obj-y, the following style (the same as Kbuild) is preferable: obj-y := ... obj-$(CONFIG_FOO) += ... obj-$(CONFIG_BAR) += ... The conventional (non-Kbuild) Makefile style is still supported. This is achieved by greping the Makefile before entering into it. U-Boot conventional sub makefiles always include some other makefiles. So the build system searches a line beginning with include keyword in the makefile in order to distinguish which style it is. If the Makefile include a include line, we assume it is a conventional U-Boot style. Otherwise, it is treated as a Kbuild-style makefile. (At first, I tried to grep rules.mk keyword instead, but I found it does not work. Almost all sub makefiles include rules.mk, but there exist three exception: - board/avnet/fx12mm/Makefile - board/avnet/v5fx30teval/Makefile - board/xilinx/ml507/Makefile These three makefiles include rules.mk indirectly. Anyway, they look weird, so they should be fixed lator.) With this tweak, we can switch sub-makefiles from U-Boot style to Kbuild style little by little. This refactoring of sub makefiles is the first step towards Kbuild, and makes it easy to import a real Kbuild from Linux Kernel. Note that this refactoring breaks nothing because it just moves the common parts into scripts/Makefile.build. Note one more thing: obj-y := foo/ # descending into foo sub directory syntax is not supported yet. (This feature will be implemented in the upcoming commit.) Of course, scripts/Makefile.build added by this commit is temporary. It shall be replaced with the one of Linux Kernel in future. Signed-off-by: Masahiro Yamada yamad...@jp.panasonic.com Cc: Simon Glass s...@chromium.org Cc: Tom Rini tr...@ti.com --- Changes for v2: - fix commit log (purely cosmetic) Makefile | 34 ++ scripts/Makefile.build | 48 spl/Makefile | 20 ++-- 3 files changed, 96 insertions(+), 6 deletions(-) create mode 100644 scripts/Makefile.build diff --git a/Makefile b/Makefile index 07abef4..36bbd09 100644 --- a/Makefile +++ b/Makefile @@ -593,14 +593,35 @@ ifeq ($(CONFIG_KALLSYMS),y) $(GEN_UBOOT) $(obj)common/system_map.o endif +# Tentative step for Kbuild-style makefiles coexist with conventional U-Boot style makefiles +# U-Boot conventional sub makefiles always include some other makefiles. +# So, the build system searches a line beginning with include before entering into the sub makefile +# in order to distinguish which style it is. +# If the Makefile include a include line, we assume it is an U-Boot style makefile. +# Otherwise, it is treated as a Kbuild-style makefile. + +# We do not need to build $(OBJS) explicitly. +# It is built while we are at $(CPUDIR)/lib$(CPU).o build. $(OBJS): depend - $(MAKE) -C $(CPUDIR) $(if $(REMOTE_BUILD),$@,$(notdir $@)) + if grep -q ^include $(CPUDIR)/Makefile; then \ + $(MAKE) -C $(CPUDIR) $(if $(REMOTE_BUILD),$@,$(notdir $@)); \ + fi $(LIBS): depend $(SUBDIR_TOOLS) - $(MAKE) -C $(dir $(subst $(obj),,$@)) + if grep -q ^include $(dir $(subst $(obj),,$@))Makefile; then \ + $(MAKE) -C $(dir $(subst $(obj),,$@)); \ + else \ + $(MAKE) -C $(dir $(subst $(obj),,$@)) -f $(TOPDIR)/scripts/Makefile.build; \ + mv $(dir $@)built-in.o $@; \ + fi $(LIBBOARD): depend $(LIBS) - $(MAKE) -C $(dir $(subst $(obj),,$@)) + if grep -q ^include $(dir $(subst $(obj),,$@))/Makefile; then \ + $(MAKE) -C $(dir $(subst $(obj),,$@)); \ + else \ + $(MAKE) -C $(dir $(subst $(obj),,$@)) -f $(TOPDIR)/scripts/Makefile.build; \ + mv $(dir $@)built-in.o $@; \ + fi $(SUBDIRS):depend $(MAKE) -C $@ all @@ -637,7 +658,12 @@ depend dep:$(TIMESTAMP_FILE) $(VERSION_FILE) \