Hi James,
2015-03-13 3:35 GMT+09:00 James Chargin <jimccr...@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". >>> >>> I've experimented with various Makefile contents but I can't get the new >>> files processed or any newly derived files deleted. U-Boot's makefile >>> system is quite large for my experience level and it seems I don't have >>> enough understanding. >>> >>> A new file might contain some hush commands that are to be executed from >>> the U-Boot command line. I'd like to use "source" to process these >>> commands. The "source" command requires that its argument be an image (I >>> get this into memory via TFTP), so I'd like "make all" to transform the >>> text file containing the hush commands into the image file. I'd also >>> like "make clean" to delete the derived image file. >>> >>> So, if my hush commands are in a text file called test.txt, I'd like >>> "make all" to apply mkimage so that a test.img is generated. I'd also >>> like "make clean" to delete test.img. >>> >>> I tried various changes to my Makefile, but the most likely seeming >>> changes are >>> >>> 8<--- >>> IMG = test.img >>> >>> obj-y := board.o >>> board.o : $(IMG) >>> >>> %.img : %.txt >>> $(srctree)/tools/mkimage -T script -n $* -C none -d $< $@ >>> >>> CLEAN_FILES += $(IMG) >>> CLEAN_DIRS += . >>> 8<--- I assume you put these lines into your own board/my_board/Makefile. You cannot use CLEAN_FILES, CLEAN_DIRS in sub-directory Makefiles. They are only available at the top-level Makefile. Instead, "clean-files" is available in sub Makefiles. but, it is redundant if you are willing to add it to extra-y because files in $(extra-y) are automatically cleaned up. >>> This doesn't work, nor has any other approach I've taken. mkimage is >>> never run for "make all" and test.img doesn't get deleted if I create a >>> fake one and run "make clean" >>> >>> Could someone offer a solution, either directly, or by pointing at an >>> existing board that does something similar? > > > On 03/09/2015 08:54 AM, Tom Rini wrote: >> >> >> Off the top of my head, try throwing test.img into obj-y ? >> > > Adding text.img to obj-y did cause the .img file to get generated, but it > also added text.img to the list of files supplied to ld, causing the final > u-boot link to fail Right. As you have already noticed, you should use extra-y for your purpose. > > On 03/09/2015 11:49 AM, Simon Glass wrote: > >> Also you may want to add a command like cmd_img_txt (see Makefile.lib >> for examples). Did you need to add anything to ALL-y? > > > Your mention of Makefile.lib prompted my to look there for other targets I > might use. I discovered extra-y and adding > > extra-y := test.img Yes, this is correct. > to my board's Makefile caused the correct operations. > > As you suggest, I added cmd_my_mkimage, which while not actually needed, is > a very nice way to have a non-verbose progress report in the make output. > >> Another option is to put this outside the U-Boot build system, and >> just run mkimage later. > > > I really want these steps to be part of the normal board make. Requiring a > separate manual build step will inevitably result in that separate step > being forgotten (most probably by me). > > > 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. > 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. > experience with the kernel build system and following make's debug output is > difficult, at best. Some overview of how makes are done would be quite > helpful to me and maybe to other non-U-Boot-developers. > > > 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 += board/aja/helo/helo_setupdeveloper.img > 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 > 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<---- If you like the log to look more nicely, you can write like below: 8<---- extra-y := test1.txt quiet_cmd_copy = COPY $@ cmd_copy = cp -f $< $@ $(obj)/test1.txt: $(src)/test.txt $(call cmd,copy) 8<----- Add the following to the top-level Makefile 8<---- CLEAN_FILES += board/my_board/test1.txt 8<---- 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<---- -- Best Regards Masahiro Yamada _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot