All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 0/34] Switch over to real Kbuild
@ 2013-12-11 11:01 Masahiro Yamada
  2013-12-11 11:01 ` [U-Boot] [PATCH 01/34] .gitignore: ingore files generated by Kbuild Masahiro Yamada
                   ` (34 more replies)
  0 siblings, 35 replies; 42+ messages in thread
From: Masahiro Yamada @ 2013-12-11 11:01 UTC (permalink / raw)
  To: u-boot


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

^ permalink raw reply	[flat|nested] 42+ messages in thread

end of thread, other threads:[~2013-12-18 16:21 UTC | newest]

Thread overview: 42+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-12-11 11:01 [U-Boot] [PATCH 0/34] Switch over to real Kbuild Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 01/34] .gitignore: ingore files generated by Kbuild Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 02/34] Makefile.host.tmp: add a new script to refactor tools Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 03/34] tools: convert makefiles to kbuild style Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 04/34] board: samsung: refactor host programs Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 05/34] examples: Use scripts/Makefile.build Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 06/34] nand-spl: " Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 07/34] Makfile: move suffix rules to Makefile.build Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 08/34] Makefile: move some variable definitions to the top Makefile Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 09/34] Makefile: move BFD_ROOT_DIR to tools/gdb/Makefile Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 10/34] Kbuild: import Kbuild.include from linux v3.12 tag Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 11/34] Kbuild: Use Kbuild.include Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 12/34] Makefile: move more flags to the top Makefile Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 13/34] Makefile: refactor include path settings Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 14/34] Makefile: move more stuff to top Makefile Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 15/34] Makefile: move some flags to spl/Makefile Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 16/34] Makefile: move some flags to examples makefiles Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 17/34] Kbuild: change out-of-tree building Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 18/34] Kbuild: add dummy obj-y to create built-in.o Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 19/34] Makefile: rename scripts/Makefile.build to scripts/Makefile.build.tmp Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 20/34] Kbuild: import more build scripts from Linux v3.12 tag Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 21/34] Kbuild: use Linux Kernel build scripts Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 22/34] Kbuild: delete temporary " Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 23/34] Kbuild: move some lines to more suitable place Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 24/34] Kbuild: convert some make rules to Kbuild style Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 25/34] Kbuild: move include directives of board configuration files Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 26/34] Kbuild: generate {spl, tpl}-autoconf.mk only when it is necessary Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 27/34] Makefile: remove a cleaning target "tidy" Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 28/34] Kbuild: change the top Makefile to more Kbuild-ish structure Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 29/34] examples: move api/ and standalone/ to examples/Makefile Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 30/34] Kbuild: refactor Makefile and spl/Makefile more Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 31/34] Makefile: Do not pass MTD_VERSION from the top Makefile Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 32/34] Makefile: refactor tools-all targets Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 33/34] Kbuild: use scripts/Makefile.clean Masahiro Yamada
2013-12-11 11:01 ` [U-Boot] [PATCH 34/34] Kbuild: support simultaneous board configuration and "make all" Masahiro Yamada
2013-12-11 19:21 ` [U-Boot] [PATCH 0/34] Switch over to real Kbuild Simon Glass
2013-12-12  2:53   ` Masahiro Yamada
2013-12-12 23:39     ` Simon Glass
2013-12-13 22:35       ` Simon Glass
2013-12-16  9:42         ` Masahiro Yamada
2013-12-18 16:21           ` Simon Glass
2013-12-16 11:01         ` Masahiro Yamada

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.