Search code examples
makefileconfigu-boot

How to generate a list of source files compiled for a particular board configuration in u-boot sources?


U-boot being a bootloader targeted at different architecture and SoC's, there are several source files, and only some of them makes it to the final executable for a particular board. For example, in the arch/ directory, there is one directory per architecture. If the build is for an ARM architecture SoC, only some of the files in arch/arm/ will be compiled into the executable.

Which of the source files get compiled into the executable depends on the configuration of the build. This configuration is controlled by a file present in configs/ directory. In case of BeagleBone Black, this file is configs/am335x_boneblack_defconfig. This file defines several variables, which are used in Makefiles.

A part of the configs/am335x_defconfig is shown below:

CONFIG_ARM=y
CONFIG_ARCH_OMAP2PLUS=y
CONFIG_TI_COMMON_CMD_OPTIONS=y
CONFIG_AM33XX=y
CONFIG_DISTRO_DEFAULTS=y

The variables defined in these files are later referenced in other Makefiles. For example, the CONFIG_AM33XX variable defined above is referenced in /arch/arm/mach-omap2/am33xx/Makefile as shown below:

obj-$(CONFIG_AM33XX)    += clock_am33xx.o
obj-$(CONFIG_TI814X)    += clock_ti814x.o
obj-$(CONFIG_AM43XX)    += clock_am43xx.o

ifneq ($(CONFIG_AM43XX)$(CONFIG_AM33XX),)
obj-y   += clock.o
endif

I guess while executing the command

$make am335x_boneblack_defconfig

the value of the variable CONFIG_AM33XX gets replaced in some transient copy of the Makefile, so that the content of the above makefile gets replaced by

obj-y += clock_am33xx.o

Figuring out which source files are included in the final executable just by searching for the config variables in all the Makefiles is a tedious task. I need a way to create a list of source files which gets compiled for a particular config file automatically. Is there a way to do it?


Solution

  • Just do a clean build and search for all object files:

    make mrproper
    make foo_defconfig
    make -j6
    find . -name '*.o'
    

    You probably want to exclude directories tools/ and scripts/.