[U-Boot] Question about board-specific Makefile actions

James Chargin jimccrown at gmail.com
Fri Mar 13 19:08:36 CET 2015


Dear Masahiro,

Your help has enabled me to make my board Makefile do what I want 
(except for the clean target, see below).

On 03/12/2015 09:20 PM, Masahiro Yamada wrote:
> Hi James,
>
> 2015-03-13 3:35 GMT+09:00 James Chargin <jimccrown at gmail.com>:
>> I could still use some help with this from someone who really knows how the
>> make system works.
>>
>> Tom and Simon provided hints that were helpful, as I note below.
>>
>>
>> On 03/09/2015 08:34 AM, James Chargin wrote:
>>>
>>> So, is no one willing to offer a hint?
>>>
>>> Thanks,
>>> Jim
>>>
>>> On 03/03/2015 01:39 PM, James Chargin wrote:
>>>>
>>>> I have a custom board in a git workspace for U-Boot 2014.07. I've copied
>>>> most of this from the .../board/ti/beagle. My board directory Makefile
>>>> looks like
>>>>
>>>> 8<---
>>>> obj-y := board.o
>>>> 8<---
>>>>
>>>> I'd like to add a few files to this directory that are processed during
>>>> "make all" and have any newly derived files deleted during "make clean".
>>>>
>>>> ...
>> Is there any documentation you could point me at that might explain the way
>> these Makefiles interact?
>
> As Simon suggested, Documentation/kbuild/makefiles.txt of Linux Kernel
> is the best one.

This document has been very helpful. Thank you both for pointing it out.

>> I know most of this was derived from somewhere
>> else (Linux kernel?) as part of the move to KConfig. But I have no ...
>
> To be precise, you should say Kbuild, not Kconfig.
> Kbuild and Kconfig should be considered separately.
>
>   Kbuild - build system
>   Kconfig - configuration system
>
> They both originate in Linux Kernel.
>
> U-Boot switched to Kbuild at 2014.04-rc1, and to Kconfig at 2014.10-rc1.
>
> You mentioned you are using u-boot v2014.07.
> So, you are building U-Boot with Kbuild,
> but using the old, conventional configuration system (mkconfig + boards.cfg).
>
> Your questions in this thread are all about Kbuild.

I appreciate your clear explanation here.

I have watched the Kbuild and KConfig conversion threads in the mailing 
list for some time. But having been previously working with U-Boot 
2010.12, this is my first experience with either. It will be useful to 
know they are separate in this way.

>> Remaining problems:
>>
>> 1) I can't figure out how to clean my newly created derived .img file. I've
>> tried each of the following four lines (one at a time), but none worked
>> CLEAN_FILES += test.img
>> CLEAN_FILES := test.img
>
> CLEAN_FILES is only available at the top-level Makefile.
>
> Add
> CLEAN_FILES += board/my_board/test.img
> to the top-level Makefile, and it should work.
>
>
>> clean-files += test.img
>> clean-files := test.img
>
> These are correct in sub-directory Makefiles in general,
> but unfortunately, "make clean" does not descend into board/ directory
> for some reason.
>
> So, they do not work in board/*/Makefile

Should this be considered a bug in the build system? Should make descend 
into the board directory? Or, at least, should there not be a way for a 
board directory to indicate which of any locally generated derived 
objects should be cleaned up?

I hesitate to add to the top level Makefile for my specific board.

>> 2) More generally, I'd like to be able to add some arbitrary make steps that
>> are peculiar to my boards Makefile, but I can't figure this out either, so
>> far.
>>
>> I've tried adding my_all to extra-y and then adding steps for my_all,
>> similar to the following.
>>
>> 8<---
>> extra-y := test.img my_all
>>
>> .PHONY my_all
>> my_all : test1.txt
>>          # some arbitrary commands to be executed if test1.txt isn't present
>>          cp -f test.txt test1.txt
>> 8<---
>>
>> In this case, make reports an error
>>
>> make[1]: *** No rule to make target `board/my_board/my_all', needed by
>> `__build'.  Stop.
>> make: *** [board/my_board] Error 2
>>
>> Any help would be appreciated.
>>
>
>
> If you want to generate board/my_board/test1.txt from board/my_board/test.txt,
> the board/my_board/Makefile should look like this:
>
> 8<----
>
> extra-y := test1.txt
>
> $(obj)/test1.txt: $(src)/test.txt
>           cp -f $< $@
> 8<----

This is actually the fix for many of my problems. Prepending $(obj) and 
$(src) apparently allows make to see the file dependencies as I intend.

> ...
> Add the following to the top-level Makefile
> 8<----
> CLEAN_FILES += board/my_board/test1.txt
> 8<----
>

Again, I hesitate to add to the top level Makefile.

> I do not think you need to use PHONY target, but
> if you really want use it, you can do like this.
>
> 8<----
>
> __build: my_all
>
> PHONY += my_all
>
> my_all:
>          echo "Hello, World"
> 8<----

As you suggest, I did not use .PHONY.

This explanation might be a nice addition to the Kbuild makefile.txt.


Again, thank you very much for your attention.

Jim
-- 
Jim Chargin
AJA Video Systems                       jimc at aja.com
(530) 271-3334                          http://www.aja.com


More information about the U-Boot mailing list