[U-Boot] [PATCH v2 00/19] First step towards Kbuild: Use Kbuild style makefiles

Masahiro Yamada yamada.m at jp.panasonic.com
Thu Sep 26 13:51:07 CEST 2013


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:
This series is _NOT_ RFC.
I believe what these patches are doing is clear.
01/19 changes less than 100 lines.
02/19-19/19 changes lots of makefiles, but the conversion rule is simple.

So, I expect this series will be reviewed in a few weeks
and applied to master when the next merge window opens
or hopefully included into u-boot-2013.10 release.


Note3:
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.

Note4:
Of course, scripts/Makefile.build added by 01/19 patch is temporary.
It shall be replaced with the one of Linux Kernel in future.


Note5:
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.



Changes for v2:
   01/19: fix commit log (purely cosmetic)
   02/19: updated 3 files to rebase on the master
            arch/arm/cpu/armv7/mx6/Makefile
            arch/arm/cpu/armv7/socfpga/Makefile
            arch/arm/cpu/armv7/zynq/Makefile
   03/19-10/19: No change
   11/19: updated 6 files to rebase on the master
            drivers/serial/Makefile
            drivers/mmc/Makefile
            drivers/video/Makefile
            drivers/watchdog/Makefile
            drivers/rtc/Makefile
            drivers/i2c/Makefile
   12/19-17/19: No change
   18/19: fixed one file
            arch/powerpc/cpu/mpc8260/Makefile
           (See version 1 thread for detailed readon why this file should be fixed)
   19/19: No change

Cc: Simon Glass <sjg at chromium.org>
Cc: Tom Rini <trini at ti.com>
Cc: Gerhard Sittig <gsi at 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                                   |  42 +++-
 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/arm925t/Makefile              |  30 +--
 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                |  32 +--
 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        |  51 +---
 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/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/omap1510inn/Makefile              |  24 +-
 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                       |  25 +-
 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                   |  48 +---
 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             |  25 +-
 drivers/power/fuel_gauge/Makefile          |  25 +-
 drivers/power/pmic/Makefile                |  31 +--
 drivers/qe/Makefile                        |  25 +-
 drivers/rtc/Makefile                       | 108 ++++----
 drivers/serial/Makefile                    |  82 +++---
 drivers/sound/Makefile                     |  30 +--
 drivers/spi/Makefile                       |  82 +++---
 drivers/tpm/Makefile                       |  29 +--
 drivers/twserial/Makefile                  |  24 +-
 drivers/usb/eth/Makefile                   |  28 +--
 drivers/usb/gadget/Makefile                |  54 ++--
 drivers/usb/host/Makefile                  |  74 ++----
 drivers/usb/musb-new/Makefile              |  36 +--
 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                               |  24 +-
 170 files changed, 1515 insertions(+), 5099 deletions(-)
 create mode 100644 scripts/Makefile.build

-- 
1.8.1.2



More information about the U-Boot mailing list