Kbuild in U-Boot has been talked for a while and RFC patches were posted by Simon Glass.
(Refer to "RFC: Add Kbuild system to U-Boot" posted by Simon, May 12, 2013) Simon's effort is a good start point but varous critical features were missing from his patch series. I have also been eager to introduce Kbuild to U-Boot. So I have been working on this task for a while with a little different migration path from Simon's way. At last I succeeded to build a few boards with support of SPL build, Out-of-tree build, correct output file names, which were missing from Simon's patches. While I were working on my local branch, the build system and makefiles in U-Boot master repository always kept changing, of course. Now my fruit got too old to fit with the current u-boot/master anymore. But if someone is interested in my work, I can push my local branch to somewhere in my GitHub space. (RFC quality, but might be helpful for just discussions) I recognize those patches are so rough that they could support only a few ARM boards. Perfectly covering all architectures and all boards without breaking any U-Boot features is a too big task for a sigle indivisual. Even if I could do that, the patch series would be extremely big size and the adjustment for U-Boot would be complecated. So the review would probably take very long time. Along with the review process, as time goes by, the posted patches would become not appled to the master branch. So we would need to repeat post, review, fix, rebase on the master and post again, review, ... again and again for a very big patch series. I began to be wondering whether it is really possible to switch to Kbuild in this way. So I decided to begin with what I can do, one by one. By stepping little by litte, we can get close to Kbuild and finally we will arrive at our goal. I think this strategy is more realistic rather than adding a big change at one time. Before importing a real Kbuild, I'd like to adjust our makefiles in the form suitable for Kbuild. First of all, this series converts makefiles in sub directories to Kbuild style. What this series do is quite simple: - Moving common lines in sub makefiles to a new file 'scripts/Makefile.build' - Renaming COBJS-y and SOBJS-y to obj-y in each sub makefile. - A little bit more tweaks That's all. 01/19 creates scripts/Makefile.build and tweaks Makefile and spl/Makefile to use scripts/Makefile.build. U-Boot conventional makefiles are like this: 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 makefiles. Writing those lines in all makefiles is a big waste. So common lines have been pushed into scripts/Makefile.build. In addition, scripts/Makefile.build includes a glue code for supporting 'obj-y'. Be aware U-Boot conventional (non-Kbuild) makefile sytle is still supported. So we can change sub makefiles little by little in the following patches. 02/19-19/19 change sub makefiles into a Kbuild suitable form using obj-y. In order to avoid creating a big patch file, they are divided by CPU architectures and categories. 02/19-07/19: refactor under arch/arm/ 08/19-16/19: refactor libraries which are commonly used for all architectures 17/19 : refactor under arch/sandbox 18/19 : refactor under arch/powerpc/ 19/19 : refactor under board/ti/ Conversion rule is pretty easy: (1) Delete common parts at top and bottom. (2) Rename COBJS -> obj-y SOBJS -> obj-y COBJS-$(CONFIG_FOO) -> obj-$(CONFIG_FOO) SOBJS-$(CONFIG_FOO) -> obj-$(CONFIG_FOO) START -> extra-y We can convert almost automatically althogh in some cases we may need to tweak a little. I refactored more than 150 makefiles in this series. But we still have more than 600 makefiles. (Most of them reside under board/ directory) We can convert them lator little by little. Your contribution is welcome! :-) Note1: This series breaks _NO_ features in U-Boot beucase it just moves common parts into scripts/Makefile.build In order to prove this series does no harm, I compiled all boards excepts nds32 and nios2 architectures and checked md5sum matching for ./u-boot (and spl/u-boot-spl if it exists). I tried md5sum for version 1 and I did the same thing again for version 2. I confirmed md5sum perfectly matched. For the detailed steps how to compare md5sum, please refer to the discussion in version 1: [U-Boot] [PATCH 00/19] First step towards Kbuild: Use Kbuild style makefiles Note2: obj-y := foo/ (descending into foo sub directory) syntax is not supprted in this series. It is implemented in upcoming patch series. The reason why I postpone this feature is I don't want to add a big change at one time. Adjusting for Kbuild little by litte is my strategy here for easy review. Note3: Of course, scripts/Makefile.build added by 01/19 patch is temporary. It shall be replaced with the one of Linux Kernel in future. Note4: 01/19 is a prerequisite for 02/19 to 19/19. But 02/19 thru 19/19 are order-independent. If some of 02/19-19/19 becomes not applied to u-boot/master, they can be omitted. Note5: I confirmed this series can be applied on v2013.10 Cc: Simon Glass <s...@chromium.org> Cc: Tom Rini <tr...@ti.com> Cc: Gerhard Sittig <g...@denx.de> Masahiro Yamada (19): Makefile: prepare for using Kbuild-style Makefile armv7: convert makefiles to Kbuild style arm926ejs: convert makefiles to Kbuild style arm920t: convert makefiles to Kbuild style arm720t: convert makefiles to Kbuild style ARM: convert makefiles to Kbuild style ARM: imx-common: convert makefiles to Kbuild style drivers: net: convert makefiles to Kbuild style drivers: mtd: convert makefiles to Kbuild style drivers: usb: convert makefiles to Kbuild style drivers: convert makefiles to Kbuild style fs: convert makefiles to Kbuild style common: convert makefiles to Kbuild style net: convert a makefile to Kbuild style lib: convert makefiles to Kbuild style disk: convert a makefile to Kbuild style sandbox: convert makefiles to Kbuild style powerpc: convert makefiles to Kbuild style board: ti: convert makefiles to Kbuild style Makefile | 44 +++- arch/arm/cpu/arm1136/Makefile | 26 +- arch/arm/cpu/arm1136/mx31/Makefile | 27 +- arch/arm/cpu/arm1136/mx35/Makefile | 28 +-- arch/arm/cpu/arm1176/Makefile | 26 +- arch/arm/cpu/arm1176/bcm2835/Makefile | 25 +- arch/arm/cpu/arm1176/tnetv107x/Makefile | 27 +- arch/arm/cpu/arm720t/Makefile | 26 +- arch/arm/cpu/arm720t/tegra-common/Makefile | 25 +- arch/arm/cpu/arm720t/tegra114/Makefile | 25 +- arch/arm/cpu/arm720t/tegra20/Makefile | 23 +- arch/arm/cpu/arm720t/tegra30/Makefile | 23 +- arch/arm/cpu/arm920t/Makefile | 28 +-- arch/arm/cpu/arm920t/a320/Makefile | 25 +- arch/arm/cpu/arm920t/at91/Makefile | 33 +-- arch/arm/cpu/arm920t/ep93xx/Makefile | 24 +- arch/arm/cpu/arm920t/imx/Makefile | 27 +- arch/arm/cpu/arm920t/ks8695/Makefile | 26 +- arch/arm/cpu/arm920t/s3c24x0/Makefile | 29 +-- arch/arm/cpu/arm926ejs/Makefile | 28 +-- arch/arm/cpu/arm926ejs/armada100/Makefile | 23 +- arch/arm/cpu/arm926ejs/at91/Makefile | 59 ++--- arch/arm/cpu/arm926ejs/davinci/Makefile | 48 +--- arch/arm/cpu/arm926ejs/kirkwood/Makefile | 31 +-- arch/arm/cpu/arm926ejs/lpc32xx/Makefile | 23 +- arch/arm/cpu/arm926ejs/mb86r0x/Makefile | 25 +- arch/arm/cpu/arm926ejs/mx25/Makefile | 23 +- arch/arm/cpu/arm926ejs/mx27/Makefile | 23 +- arch/arm/cpu/arm926ejs/mxs/Makefile | 26 +- arch/arm/cpu/arm926ejs/nomadik/Makefile | 25 +- arch/arm/cpu/arm926ejs/omap/Makefile | 26 +- arch/arm/cpu/arm926ejs/orion5x/Makefile | 29 +-- arch/arm/cpu/arm926ejs/pantheon/Makefile | 23 +- arch/arm/cpu/arm926ejs/spear/Makefile | 36 +-- arch/arm/cpu/arm926ejs/versatile/Makefile | 26 +- arch/arm/cpu/arm946es/Makefile | 26 +- arch/arm/cpu/arm_intcm/Makefile | 26 +- arch/arm/cpu/armv7/Makefile | 36 +-- arch/arm/cpu/armv7/am33xx/Makefile | 51 +--- arch/arm/cpu/armv7/at91/Makefile | 31 +-- arch/arm/cpu/armv7/exynos/Makefile | 34 +-- arch/arm/cpu/armv7/highbank/Makefile | 24 +- arch/arm/cpu/armv7/mx5/Makefile | 25 +- arch/arm/cpu/armv7/mx6/Makefile | 25 +- arch/arm/cpu/armv7/omap-common/Makefile | 43 +--- arch/arm/cpu/armv7/omap3/Makefile | 41 +-- arch/arm/cpu/armv7/omap4/Makefile | 31 +-- arch/arm/cpu/armv7/omap5/Makefile | 33 +-- arch/arm/cpu/armv7/rmobile/Makefile | 50 +--- arch/arm/cpu/armv7/s5p-common/Makefile | 29 +-- arch/arm/cpu/armv7/s5pc1xx/Makefile | 27 +- arch/arm/cpu/armv7/socfpga/Makefile | 29 +-- arch/arm/cpu/armv7/tegra-common/Makefile | 24 +- arch/arm/cpu/armv7/tegra114/Makefile | 22 +- arch/arm/cpu/armv7/tegra20/Makefile | 26 +- arch/arm/cpu/armv7/tegra30/Makefile | 22 +- arch/arm/cpu/armv7/u8500/Makefile | 25 +- arch/arm/cpu/armv7/vf610/Makefile | 25 +- arch/arm/cpu/armv7/zynq/Makefile | 31 +-- arch/arm/cpu/ixp/Makefile | 30 +-- arch/arm/cpu/pxa/Makefile | 36 +-- arch/arm/cpu/sa1100/Makefile | 28 +-- arch/arm/cpu/tegra-common/Makefile | 25 +- arch/arm/cpu/tegra114-common/Makefile | 23 +- arch/arm/cpu/tegra20-common/Makefile | 29 +-- arch/arm/cpu/tegra30-common/Makefile | 26 +- arch/arm/imx-common/Makefile | 35 +-- arch/arm/lib/Makefile | 86 ++----- arch/powerpc/cpu/74xx_7xx/Makefile | 28 +-- arch/powerpc/cpu/mpc512x/Makefile | 51 ++-- arch/powerpc/cpu/mpc5xx/Makefile | 27 +- arch/powerpc/cpu/mpc5xxx/Makefile | 54 ++-- arch/powerpc/cpu/mpc824x/Makefile | 28 +-- arch/powerpc/cpu/mpc8260/Makefile | 32 +-- arch/powerpc/cpu/mpc83xx/Makefile | 58 ++--- arch/powerpc/cpu/mpc85xx/Makefile | 233 ++++++++--------- arch/powerpc/cpu/mpc86xx/Makefile | 50 ++-- arch/powerpc/cpu/mpc8xx/Makefile | 58 ++--- arch/powerpc/cpu/mpc8xxx/Makefile | 30 +-- arch/powerpc/cpu/mpc8xxx/ddr/Makefile | 30 +-- arch/powerpc/cpu/ppc4xx/Makefile | 90 +++---- arch/powerpc/lib/Makefile | 78 ++---- arch/sandbox/cpu/Makefile | 23 +- arch/sandbox/lib/Makefile | 25 +- board/sandbox/sandbox/Makefile | 21 +- board/ti/am335x/Makefile | 29 +-- board/ti/am3517crane/Makefile | 19 +- board/ti/am43xx/Makefile | 29 +-- board/ti/beagle/Makefile | 24 +- board/ti/dra7xx/Makefile | 27 +- board/ti/evm/Makefile | 19 +- board/ti/omap5912osk/Makefile | 24 +- board/ti/omap5_uevm/Makefile | 27 +- board/ti/omap730p2/Makefile | 24 +- board/ti/panda/Makefile | 21 +- board/ti/sdp3430/Makefile | 21 +- board/ti/sdp4430/Makefile | 23 +- board/ti/ti814x/Makefile | 29 +-- board/ti/ti816x/Makefile | 27 +- board/ti/tnetv107xevm/Makefile | 25 +- common/Makefile | 389 ++++++++++++++--------------- common/spl/Makefile | 36 +-- disk/Makefile | 34 +-- drivers/bios_emulator/Makefile | 23 +- drivers/block/Makefile | 52 ++-- drivers/bootcount/Makefile | 30 +-- drivers/crypto/Makefile | 25 +- drivers/dfu/Makefile | 27 +- drivers/dma/Makefile | 30 +-- drivers/fpga/Makefile | 44 +--- drivers/gpio/Makefile | 73 ++---- drivers/hwmon/Makefile | 40 +-- drivers/i2c/Makefile | 68 ++--- drivers/input/Makefile | 36 +-- drivers/misc/Makefile | 52 ++-- drivers/mmc/Makefile | 71 ++---- drivers/mtd/Makefile | 44 +--- drivers/mtd/nand/Makefile | 102 +++----- drivers/mtd/onenand/Makefile | 27 +- drivers/mtd/spi/Makefile | 36 +-- drivers/mtd/ubi/Makefile | 28 +-- drivers/net/Makefile | 136 +++++----- drivers/net/fm/Makefile | 59 ++--- drivers/net/npe/Makefile | 24 +- drivers/net/phy/Makefile | 60 ++--- drivers/pci/Makefile | 44 +--- drivers/pcmcia/Makefile | 34 +-- drivers/power/Makefile | 47 +--- drivers/power/battery/Makefile | 27 +- drivers/power/fuel_gauge/Makefile | 25 +- drivers/power/mfd/Makefile | 29 +-- drivers/power/pmic/Makefile | 35 +-- drivers/qe/Makefile | 25 +- drivers/rtc/Makefile | 108 ++++---- drivers/serial/Makefile | 82 +++--- drivers/sound/Makefile | 30 +-- drivers/spi/Makefile | 84 +++---- drivers/tpm/Makefile | 29 +-- drivers/twserial/Makefile | 24 +- drivers/usb/eth/Makefile | 28 +-- drivers/usb/gadget/Makefile | 58 ++--- drivers/usb/host/Makefile | 74 ++---- drivers/usb/musb-new/Makefile | 35 +-- drivers/usb/musb/Makefile | 36 +-- drivers/usb/phy/Makefile | 24 +- drivers/usb/ulpi/Makefile | 28 +-- drivers/video/Makefile | 86 +++---- drivers/watchdog/Makefile | 38 +-- fs/Makefile | 24 +- fs/cbfs/Makefile | 24 +- fs/cramfs/Makefile | 29 +-- fs/ext4/Makefile | 27 +- fs/fat/Makefile | 31 +-- fs/fdos/Makefile | 27 +- fs/jffs2/Makefile | 38 +-- fs/reiserfs/Makefile | 26 +- fs/sandbox/Makefile | 23 +- fs/ubifs/Makefile | 29 +-- fs/yaffs2/Makefile | 33 +-- fs/zfs/Makefile | 25 +- lib/Makefile | 114 ++++----- lib/libfdt/Makefile | 27 +- lib/lzma/Makefile | 24 +- lib/lzo/Makefile | 24 +- lib/rsa/Makefile | 22 +- lib/tizen/Makefile | 24 +- lib/zlib/Makefile | 22 +- net/Makefile | 46 +--- scripts/Makefile.build | 48 ++++ spl/Makefile | 26 +- 170 files changed, 1518 insertions(+), 5100 deletions(-) create mode 100644 scripts/Makefile.build -- 1.8.1.2 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot