[U-Boot] [PATCH 0/34] Switch over to real Kbuild
Simon Glass
sjg at chromium.org
Wed Dec 11 20:21:56 CET 2013
Hi Massihiro,
On 11 December 2013 04:01, Masahiro Yamada <yamada.m at jp.panasonic.com> wrote:
>
> We switched to Kbuild style makefiles at v2014.01-rc1 release.
> With that modification, we can write makefiles simpler.
> But it is NOT real Kbuild.
>
> As the next step, this series imports (+ adjusts) build scripts
> from Linux Kernel under scripts/ directory.
> By applying this series, we can get more advantages:
> - short log
> - perfect dependency tracking
> - preparation to the next step: Kconfig
> - other things...
>
> Kbuild without Kconfig
> ----------------------
>
> At first, to make things clearer, let me explain
> the difference between "Kbuild" and "Kconfig".
> They are, I think, sometimes confusing.
>
> Kbuild - build system used for Linux Kernel.
> Some features of Kbuild are:
>
> (a) We can describe makefiles simple.
> Just addi objects to "obj-y" like this:
> obj-$(CONFIG_FOO) += foo.o
>
> (b) We can describe directory descending nicely
> Add a directory name to "obj-y" like this:
> obj-$(CONFIG_BAR) += bar/
>
> (c) Short log like follows:
> CC common/foo.o
> CC common/bar.o
> LD common/built-in.o
>
> (d) Perfect dependency tracking
> I think this is the biggest advantage.
> To be honest, the dependency tracing of U-Boot build system
> was not reliable.
>
> Kconfig - A tool to manage CONFIG macros.
> We can handle the dependency among CONFIG macros.
> Kconfig allows us to modify CONFIG settings easily
> by "make config".
> GUI interface are also available by "make menuconfig"
> All defined CONFIG macros are stored into ".config" file
>
> I think most of you are already familiar with above.
> I definitely want to port both of these, but I want to do one by one: Kbuild first.
> (If we do Kbuild and Kconfig at the same time, it might be messed up.)
>
> So, I want to do "Kbuild without Kconfig" in this series.
> The conventional tool (mkconfig + boards.cfg file)
> is used for board configuration.
>
> How to apply this series ?
> --------------------------
>
> Before importing new features, I wanted to clean up some parts of makefiles.
> I posted many trivial patches to refactor makefiles.
>
> This series uses the followings as prerequisites:
>
> [1] blackfin: Do not generate unused header bootrom-asm-offsets.h
> http://patchwork.ozlabs.org/patch/295141/
>
> [2] sandbox: Use system headers first for sandbox's os.c in a different way
> http://patchwork.ozlabs.org/patch/294233/
>
> [3] .gitignore: ignore spl/ and tpl/ directories except spl/Makefile
> http://patchwork.ozlabs.org/patch/294271/
>
> [4] Makefile: delete a make rule of $(LDSCRIPT)
> http://patchwork.ozlabs.org/patch/294717/
>
> [5] post: descend only when CONFIG_HAS_POST is defined
> http://patchwork.ozlabs.org/patch/294741/
>
> [6] Makefile: Select objects by CONFIG_ rather than $(ARCH) or $(CPU)
> http://patchwork.ozlabs.org/patch/294742/
>
> [7] drivers/usb/gadget: select objects by obj-$(CONFIG-...)
> http://patchwork.ozlabs.org/patch/294745/
>
> [8] drivers/mtd: descend into sub directories only when it is necessary
> http://patchwork.ozlabs.org/patch/294746/
>
> [9] Makefile: Move some scripts imported from Linux
> http://patchwork.ozlabs.org/patch/294780/
>
> [10] Makefile: delete unnecessary CPPFLAGS settings
> http://patchwork.ozlabs.org/patch/294829/
>
> [11] Makefile: delete unnecessary lines
> http://patchwork.ozlabs.org/patch/295052/
>
> [12] Makefile: Do not create empty autoconf.mk on error
> http://patchwork.ozlabs.org/patch/295779/
>
> [13] Makefile: use two double-quotations as a pair
> http://patchwork.ozlabs.org/patch/296718/
>
> [14] Makefile: correct dependencies of asm-offsets.[hs]
> http://patchwork.ozlabs.org/patch/296722/
>
> [15] examples: x86: delete 82559_eeprom
> http://patchwork.ozlabs.org/patch/297608/
>
> [16] Makefile, .gitignore: Cleanup non-existing binaries
> http://patchwork.ozlabs.org/patch/297609/
>
> [17] spl/Makefile: merge LIBS-y += arch/$(ARCH)/imx-common
> http://patchwork.ozlabs.org/patch/299660/
>
> You need to apply above patches beforehand to use this series.
> They are simple patches, so I hope they will be reviewed and applied first.
Can you please push a branch somewhere with all of these and kbuild?
Regards,
Simon
On 11 December 2013 04:01, Masahiro Yamada <yamada.m at jp.panasonic.com> wrote:
>
> We switched to Kbuild style makefiles at v2014.01-rc1 release.
> With that modification, we can write makefiles simpler.
> But it is NOT real Kbuild.
>
> As the next step, this series imports (+ adjusts) build scripts
> from Linux Kernel under scripts/ directory.
> By applying this series, we can get more advantages:
> - short log
> - perfect dependency tracking
> - preparation to the next step: Kconfig
> - other things...
>
> Kbuild without Kconfig
> ----------------------
>
> At first, to make things clearer, let me explain
> the difference between "Kbuild" and "Kconfig".
> They are, I think, sometimes confusing.
>
> Kbuild - build system used for Linux Kernel.
> Some features of Kbuild are:
>
> (a) We can describe makefiles simple.
> Just addi objects to "obj-y" like this:
> obj-$(CONFIG_FOO) += foo.o
>
> (b) We can describe directory descending nicely
> Add a directory name to "obj-y" like this:
> obj-$(CONFIG_BAR) += bar/
>
> (c) Short log like follows:
> CC common/foo.o
> CC common/bar.o
> LD common/built-in.o
>
> (d) Perfect dependency tracking
> I think this is the biggest advantage.
> To be honest, the dependency tracing of U-Boot build system
> was not reliable.
>
> Kconfig - A tool to manage CONFIG macros.
> We can handle the dependency among CONFIG macros.
> Kconfig allows us to modify CONFIG settings easily
> by "make config".
> GUI interface are also available by "make menuconfig"
> All defined CONFIG macros are stored into ".config" file
>
> I think most of you are already familiar with above.
> I definitely want to port both of these, but I want to do one by one: Kbuild first.
> (If we do Kbuild and Kconfig at the same time, it might be messed up.)
>
> So, I want to do "Kbuild without Kconfig" in this series.
> The conventional tool (mkconfig + boards.cfg file)
> is used for board configuration.
>
> How to apply this series ?
> --------------------------
>
> Before importing new features, I wanted to clean up some parts of makefiles.
> I posted many trivial patches to refactor makefiles.
>
> This series uses the followings as prerequisites:
>
> [1] blackfin: Do not generate unused header bootrom-asm-offsets.h
> http://patchwork.ozlabs.org/patch/295141/
>
> [2] sandbox: Use system headers first for sandbox's os.c in a different way
> http://patchwork.ozlabs.org/patch/294233/
>
> [3] .gitignore: ignore spl/ and tpl/ directories except spl/Makefile
> http://patchwork.ozlabs.org/patch/294271/
>
> [4] Makefile: delete a make rule of $(LDSCRIPT)
> http://patchwork.ozlabs.org/patch/294717/
>
> [5] post: descend only when CONFIG_HAS_POST is defined
> http://patchwork.ozlabs.org/patch/294741/
>
> [6] Makefile: Select objects by CONFIG_ rather than $(ARCH) or $(CPU)
> http://patchwork.ozlabs.org/patch/294742/
>
> [7] drivers/usb/gadget: select objects by obj-$(CONFIG-...)
> http://patchwork.ozlabs.org/patch/294745/
>
> [8] drivers/mtd: descend into sub directories only when it is necessary
> http://patchwork.ozlabs.org/patch/294746/
>
> [9] Makefile: Move some scripts imported from Linux
> http://patchwork.ozlabs.org/patch/294780/
>
> [10] Makefile: delete unnecessary CPPFLAGS settings
> http://patchwork.ozlabs.org/patch/294829/
>
> [11] Makefile: delete unnecessary lines
> http://patchwork.ozlabs.org/patch/295052/
>
> [12] Makefile: Do not create empty autoconf.mk on error
> http://patchwork.ozlabs.org/patch/295779/
>
> [13] Makefile: use two double-quotations as a pair
> http://patchwork.ozlabs.org/patch/296718/
>
> [14] Makefile: correct dependencies of asm-offsets.[hs]
> http://patchwork.ozlabs.org/patch/296722/
>
> [15] examples: x86: delete 82559_eeprom
> http://patchwork.ozlabs.org/patch/297608/
>
> [16] Makefile, .gitignore: Cleanup non-existing binaries
> http://patchwork.ozlabs.org/patch/297609/
>
> [17] spl/Makefile: merge LIBS-y += arch/$(ARCH)/imx-common
> http://patchwork.ozlabs.org/patch/299660/
>
> You need to apply above patches beforehand to use this series.
> They are simple patches, so I hope they will be reviewed and applied first.
>
> How to Build ?
> --------------
>
> We can build the same as before.
> Do board configuraton and then run "make".
>
> $ make omap4_panda_config
> Configuring for omap4_panda board...
> $ make CROSS_COMPILE=arm-linux-gnueabi-
> GEN include/autoconf.mk.dep
> GEN include/autoconf.mk
> CC lib/asm-offsets.s
> GEN include/generated/generic-asm-offsets.h
> CC arch/arm/cpu/armv7/omap4/asm-offsets.s
> GEN include/generated/asm-offsets.h
> HOSTCC scripts/basic/fixdep
> ...
>
> You will find a difference at a glance, short log
> If you need detail log message, please add "V=1".
> (You can also use "V=2")
>
> Please note we can not use any more
> $ make omap4_panda CROSS_COMPILE=arm-linux-gnueabi-
> to do board configuration and "make" at the same time.
>
> Instead, we can use Kbuild-ish way for that purpose:
> $ make omap4_panda_config all CROSS_COMPILE=arm-linux-gnuabi-
>
> This series keeps the other features:
>
> - Support out-of-tree build
> You can use "O=<dir_name>" like this
> $ mkdir build_dir
> $ make omap4_panda_config all O=build_dir CROSS_COMPILE=arm-linux-gnueabi-
>
> - Works with parallel make option
> Add "-j" option for this. Compiling will get faster.
>
> - Of cource, SPL, TPL build are supported
> (nand_spl also works. But "nand_spl" is obsolete and we should switch to "spl".
> Until when should we continue to maintain nand_spl?)
>
> - Breaks no boards (except some boards which are already broken)
> I built all target boards to prove correctness of this series
> at least for compile test.
>
> My Next Plan
> ------------
>
> - Import Kconfig
> Use "make config", "make menuconfig", "make defconfig", etc. in U-Boot.
>
> - More refactoring
> Some parts of makefiles are still dirty.
> I want to refactor more makefiles in follow-up patches.
>
> - Use "obj-m" for standalone program?? Loadable module??
> I have not deceided about this yet.
>
>
>
> Masahiro Yamada (34):
> .gitignore: ingore files generated by Kbuild
> Makefile.host.tmp: add a new script to refactor tools
> tools: convert makefiles to kbuild style
> board: samsung: refactor host programs
> examples: Use scripts/Makefile.build
> nand-spl: Use scripts/Makefile.build
> Makfile: move suffix rules to Makefile.build
> Makefile: move some variable definitions to the top Makefile
> Makefile: move BFD_ROOT_DIR to tools/gdb/Makefile
> Kbuild: import Kbuild.include from linux v3.12 tag
> Kbuild: Use Kbuild.include
> Makefile: move more flags to the top Makefile
> Makefile: refactor include path settings
> Makefile: move more stuff to top Makefile
> Makefile: move some flags to spl/Makefile
> Makefile: move some flags to examples makefiles
> Kbuild: change out-of-tree building
> Kbuild: add dummy obj-y to create built-in.o
> Makefile: rename scripts/Makefile.build to scripts/Makefile.build.tmp
> Kbuild: import more build scripts from Linux v3.12 tag
> Kbuild: use Linux Kernel build scripts
> Kbuild: delete temporary build scripts
> Kbuild: move some lines to more suitable place
> Kbuild: convert some make rules to Kbuild style
> Kbuild: move include directives of board configuration files
> Kbuild: generate {spl,tpl}-autoconf.mk only when it is necessary
> Makefile: remove a cleaning target "tidy"
> Kbuild: change the top Makefile to more Kbuild-ish structure
> examples: move api/ and standalone/ to examples/Makefile
> Kbuild: refactor Makefile and spl/Makefile more
> Makefile: Do not pass MTD_VERSION from the top Makefile
> Makefile: refactor tools-all targets
> Kbuild: use scripts/Makefile.clean
> Kbuild: support simultaneous board configuration and "make all"
>
> .gitignore | 21 +-
> MAKEALL | 6 +-
> Makefile | 1240 +++++++++++++-------
> arch/arm/cpu/arm1136/config.mk | 2 +-
> arch/arm/cpu/arm926ejs/config.mk | 2 +-
> arch/arm/cpu/arm926ejs/davinci/config.mk | 2 +-
> arch/arm/cpu/armv7/am33xx/config.mk | 2 +-
> arch/arm/cpu/armv7/config.mk | 2 +-
> arch/arm/cpu/armv7/omap3/config.mk | 2 +-
> arch/arm/cpu/armv7/omap4/config.mk | 2 +-
> arch/arm/cpu/armv7/omap5/config.mk | 2 +-
> arch/arm/cpu/armv7/socfpga/config.mk | 2 +-
> arch/arm/cpu/armv7/tegra114/Makefile | 3 +-
> arch/arm/cpu/armv7/tegra30/Makefile | 3 +-
> arch/arm/imx-common/Makefile | 2 +-
> arch/blackfin/config.mk | 10 +-
> arch/blackfin/cpu/Makefile | 10 +-
> arch/blackfin/lib/Makefile | 5 +-
> arch/m68k/cpu/mcf5227x/Makefile | 2 +-
> arch/m68k/cpu/mcf523x/Makefile | 2 +-
> arch/m68k/cpu/mcf52x2/Makefile | 2 +-
> arch/m68k/cpu/mcf532x/Makefile | 2 +-
> arch/m68k/cpu/mcf5445x/Makefile | 2 +-
> arch/m68k/cpu/mcf547x_8x/Makefile | 2 +-
> arch/mips/cpu/mips32/config.mk | 2 +-
> arch/mips/cpu/mips64/config.mk | 2 +-
> arch/mips/cpu/xburst/config.mk | 2 +-
> arch/nds32/config.mk | 2 +-
> arch/nds32/cpu/n1213/Makefile | 3 +
> arch/powerpc/cpu/mpc8xx/Makefile | 2 +-
> arch/powerpc/lib/Makefile | 4 +-
> arch/sandbox/cpu/Makefile | 11 +-
> arch/sparc/config.mk | 3 +-
> arch/x86/lib/Makefile | 2 +-
> board/ait/cam_enc_4xx/config.mk | 2 +-
> board/avionic-design/medcom-wide/Makefile | 2 +-
> board/avionic-design/plutux/Makefile | 2 +-
> board/avionic-design/tec/Makefile | 2 +-
> board/bct-brettl2/config.mk | 7 +-
> board/bf518f-ezbrd/config.mk | 7 +-
> board/bf526-ezbrd/config.mk | 7 +-
> board/bf527-ad7160-eval/config.mk | 7 +-
> board/bf527-ezkit/config.mk | 7 +-
> board/bf527-sdp/config.mk | 7 +-
> board/bf533-ezkit/config.mk | 7 +-
> board/bf533-stamp/config.mk | 7 +-
> board/bf537-stamp/config.mk | 7 +-
> board/bf538f-ezkit/config.mk | 7 +-
> board/bf548-ezkit/config.mk | 7 +-
> board/bf561-acvilon/config.mk | 7 +-
> board/bf561-ezkit/config.mk | 7 +-
> board/br4/config.mk | 7 +-
> board/cm-bf527/config.mk | 7 +-
> board/cm-bf533/config.mk | 7 +-
> board/cm-bf537e/config.mk | 7 +-
> board/cm-bf537u/config.mk | 7 +-
> board/cm-bf548/config.mk | 7 +-
> board/cm-bf561/config.mk | 7 +-
> board/compal/paz00/Makefile | 2 +-
> board/compulab/trimslice/Makefile | 2 +-
> board/cray/L1/Makefile | 10 +-
> board/freescale/common/Makefile | 5 +-
> board/h2200/Makefile | 2 +-
> board/ip04/config.mk | 7 +-
> board/matrix_vision/mvblm7/Makefile | 4 +-
> board/matrix_vision/mvblx/Makefile | 2 +-
> board/matrix_vision/mvsmr/Makefile | 2 +-
> board/nvidia/common/Makefile | 2 +-
> board/pcs440ep/config.mk | 2 +-
> board/pr1/config.mk | 7 +-
> board/samsung/origen/Makefile | 23 +-
> .../origen/tools/{mkv310_image.c => mkorigenspl.c} | 0
> board/samsung/smdkv310/Makefile | 16 +-
> .../tools/{mkv310_image.c => mksmdkv310spl.c} | 0
> board/sandburst/karef/Makefile | 2 +-
> board/sandburst/metrobox/Makefile | 2 +-
> board/spear/common/Makefile | 5 +-
> board/spear/x600/Makefile | 5 +-
> board/st-ericsson/snowball/Makefile | 2 +-
> board/st-ericsson/u8500/Makefile | 2 +-
> board/tcm-bf518/config.mk | 7 +-
> board/tcm-bf537/config.mk | 7 +-
> common/Makefile | 11 +-
> config.mk | 333 +-----
> disk/Makefile | 2 +-
> doc/DocBook/Makefile | 17 -
> drivers/bios_emulator/Makefile | 5 +-
> drivers/hwmon/Makefile | 2 +-
> drivers/net/npe/Makefile | 4 +-
> drivers/rtc/Makefile | 2 +-
> drivers/usb/musb-new/Makefile | 7 +-
> dts/Makefile | 20 +-
> examples/Makefile | 9 +
> examples/api/Makefile | 44 +-
> examples/standalone/Makefile | 71 +-
> fs/ubifs/Makefile | 2 +-
> fs/yaffs2/Makefile | 9 +-
> lib/Makefile | 2 +-
> lib/lzma/Makefile | 2 +-
> mkconfig | 2 +-
> nand_spl/board/amcc/acadia/Makefile | 45 +-
> nand_spl/board/amcc/bamboo/Makefile | 45 +-
> nand_spl/board/amcc/canyonlands/Makefile | 45 +-
> nand_spl/board/amcc/kilauea/Makefile | 43 +-
> nand_spl/board/amcc/sequoia/Makefile | 47 +-
> nand_spl/board/freescale/mpc8315erdb/Makefile | 47 +-
> nand_spl/board/freescale/mpc8536ds/Makefile | 59 +-
> nand_spl/board/freescale/mpc8569mds/Makefile | 59 +-
> nand_spl/board/freescale/mpc8572ds/Makefile | 59 +-
> nand_spl/board/freescale/p1023rds/Makefile | 60 +-
> nand_spl/board/freescale/p1_p2_rdb/Makefile | 59 +-
> nand_spl/board/sheldon/simpc8313/Makefile | 48 +-
> net/Makefile | 2 +-
> post/lib_powerpc/fpu/Makefile | 30 +-
> rules.mk | 51 -
> scripts/Kbuild.include | 282 +++++
> scripts/Makefile | 2 +
> scripts/Makefile.build | 519 +++++++-
> scripts/Makefile.clean | 108 ++
> scripts/Makefile.host | 170 +++
> scripts/Makefile.lib | 375 ++++++
> scripts/basic/.gitignore | 1 +
> scripts/basic/Makefile | 15 +
> scripts/basic/fixdep.c | 462 ++++++++
> scripts/mkmakefile | 59 +
> spl/Makefile | 185 +--
> tools/.gitignore | 2 +-
> tools/Makefile | 330 ++----
> tools/crc32.c | 1 +
> tools/easylogo/Makefile | 12 +-
> tools/env/Makefile | 34 +-
> tools/env/crc32.c | 1 +
> tools/env/ctype.c | 1 +
> tools/env/env_attr.c | 1 +
> tools/env/env_flags.c | 1 +
> tools/env/linux_string.c | 1 +
> tools/env_embedded.c | 1 +
> tools/fdt.c | 1 +
> tools/fdt_ro.c | 1 +
> tools/fdt_rw.c | 1 +
> tools/fdt_strerror.c | 1 +
> tools/fdt_wip.c | 1 +
> tools/gdb/Makefile | 64 +-
> tools/image-fit.c | 1 +
> tools/image-sig.c | 1 +
> tools/image.c | 1 +
> tools/kernel-doc/Makefile | 21 +-
> tools/md5.c | 1 +
> tools/rsa-sign.c | 1 +
> tools/sha1.c | 1 +
> 150 files changed, 3537 insertions(+), 1994 deletions(-)
> rename board/samsung/origen/tools/{mkv310_image.c => mkorigenspl.c} (100%)
> rename board/samsung/smdkv310/tools/{mkv310_image.c => mksmdkv310spl.c} (100%)
> create mode 100644 examples/Makefile
> delete mode 100644 rules.mk
> create mode 100644 scripts/Kbuild.include
> create mode 100644 scripts/Makefile
> create mode 100644 scripts/Makefile.clean
> create mode 100644 scripts/Makefile.host
> create mode 100644 scripts/Makefile.lib
> create mode 100644 scripts/basic/.gitignore
> create mode 100644 scripts/basic/Makefile
> create mode 100644 scripts/basic/fixdep.c
> create mode 100644 scripts/mkmakefile
> create mode 100644 tools/crc32.c
> create mode 100644 tools/env/crc32.c
> create mode 100644 tools/env/ctype.c
> create mode 100644 tools/env/env_attr.c
> create mode 100644 tools/env/env_flags.c
> create mode 100644 tools/env/linux_string.c
> create mode 100644 tools/env_embedded.c
> create mode 100644 tools/fdt.c
> create mode 100644 tools/fdt_ro.c
> create mode 100644 tools/fdt_rw.c
> create mode 100644 tools/fdt_strerror.c
> create mode 100644 tools/fdt_wip.c
> create mode 100644 tools/image-fit.c
> create mode 100644 tools/image-sig.c
> create mode 100644 tools/image.c
> create mode 100644 tools/md5.c
> create mode 100644 tools/rsa-sign.c
> create mode 100644 tools/sha1.c
>
> --
> 1.8.3.2
>
More information about the U-Boot
mailing list