[U-Boot] [RFC PATCH 5/7] Adjust Kconfig scripts for use by U-Boot
Simon Glass
sjg at chromium.org
Mon May 13 04:25:38 CEST 2013
This is an intial stab at changing Kconfig for U-Boot. So far it is missing
many things, notably SPL support and binary output. Also the output file is
vmlinux instead of u-boot.
Linux modules are not supported, but it is quite possible that some
enterprising soul will want to implement modules in U-Boot. For that reason
and to minimise conflicts with future Kbuild updates, modules support is
disabled rather than removed.
Signed-off-by: Simon Glass <sjg at chromium.org>
---
Makefile.kbuild | 37 +++++++++++++++++++++++++++++++------
scripts/Makefile | 7 +------
scripts/Makefile.build | 1 +
scripts/Makefile.lib | 10 ++++++----
scripts/kconfig/Makefile | 15 +++++++++++++--
scripts/link-vmlinux.sh | 13 +++++++------
6 files changed, 59 insertions(+), 24 deletions(-)
diff --git a/Makefile.kbuild b/Makefile.kbuild
index 2547cca..dc241d4 100644
--- a/Makefile.kbuild
+++ b/Makefile.kbuild
@@ -2,7 +2,12 @@ VERSION = 2013
PATCHLEVEL = 04
SUBLEVEL =
EXTRAVERSION =
-NAME = Unicycling Gorilla
+NAME = Uncular Umbrella
+ifneq "$(SUBLEVEL)" ""
+U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
+else
+U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL)$(EXTRAVERSION)
+endif
# *DOCUMENTATION*
# To see a list of typical targets execute "make help"
@@ -172,6 +177,9 @@ export SRCTREE TOPDIR OBJTREE
# Export U-Boot variables
export BOARD CPU SOC VENDOR
+TIMESTAMP_FILE = $(objtree)/include/generated/timestamp_autogenerated.h
+VERSION_FILE = $(objtree)/include/generated/version_autogenerated.h
+
# SUBARCH tells the usermode build what the underlying arch is. That is set
# first, and if a usermode build is happening, the "ARCH=um" on the command
# line overrides the setting of ARCH below. If a native build is happening,
@@ -807,9 +815,6 @@ fs-y := $(patsubst %/, %/built-in.o, $(fs-y))
init-y := $(patsubst %/, %/built-in.o, $(init-y))
net-y := $(patsubst %/, %/built-in.o, $(net-y))
spl-y := $(patsubst %/, %/built-in.o, $(spl-y))
-# libs-y1 := $(patsubst %/, %/lib.a, $(libs-y))
-# libs-y2 := $(patsubst %/, %/built-in.o, $(libs-y))
-# libs-y := $(libs-y1) $(libs-y2)
libs-y := $(patsubst %/, %/built-in.o, $(libs-y))
@@ -875,7 +880,7 @@ PHONY += prepare archprepare prepare0 prepare1 prepare2 prepare3
# prepare3 is used to check if we are building in a separate output directory,
# and if so do:
# 1) Check that make has not been executed in the kernel src $(srctree)
-prepare3: include/config/kernel.release
+prepare3: include/config/kernel.release $(TIMESTAMP_FILE) $(VERSION_FILE)
ifneq ($(KBUILD_SRC),)
@$(kecho) ' Using $(srctree) as source for kernel'
$(Q)if [ -f $(srctree)/.config -o -d $(srctree)/include/config ]; then \
@@ -906,6 +911,26 @@ prepare: prepare0
# KERNELRELEASE can change from a few different places, meaning version.h
# needs to be updated, so this check is forced on all builds
+$(VERSION_FILE):
+ @mkdir -p $(dir $(VERSION_FILE))
+ @( localvers='$(shell $(TOPDIR)/tools/setlocalversion $(TOPDIR))' ; \
+ printf '#define PLAIN_VERSION "%s%s"\n' \
+ "$(U_BOOT_VERSION)" "$${localvers}" ; \
+ printf '#define U_BOOT_VERSION "U-Boot %s%s"\n' \
+ "$(U_BOOT_VERSION)" "$${localvers}" ; \
+ ) > $@.tmp
+ @( printf '#define CC_VERSION_STRING "%s"\n' \
+ '$(shell $(CC) --version | head -n 1)' )>> $@.tmp
+ @( printf '#define LD_VERSION_STRING "%s"\n' \
+ '$(shell $(LD) -v | head -n 1)' )>> $@.tmp
+ @cmp -s $@ $@.tmp && rm -f $@.tmp || mv -f $@.tmp $@
+
+$(TIMESTAMP_FILE):
+ @mkdir -p $(dir $(TIMESTAMP_FILE))
+ @LC_ALL=C date +'#define U_BOOT_DATE "%b %d %C%y"' > $@.tmp
+ @LC_ALL=C date +'#define U_BOOT_TIME "%T"' >> $@.tmp
+ @cmp -s $@ $@.tmp && rm -f $@.tmp || mv -f $@.tmp $@
+
uts_len := 64
define filechk_utsrelease.h
if [ `echo -n "$(KERNELRELEASE)" | wc -c ` -gt $(uts_len) ]; then \
@@ -1107,7 +1132,7 @@ clean: archclean vmlinuxclean
#
mrproper: rm-dirs := $(wildcard $(MRPROPER_DIRS))
mrproper: rm-files := $(wildcard $(MRPROPER_FILES))
-mrproper-dirs := $(addprefix _mrproper_,Documentation/DocBook scripts)
+mrproper-dirs := $(addprefix _mrproper_,scripts)
PHONY += $(mrproper-dirs) mrproper archmrproper
$(mrproper-dirs):
diff --git a/scripts/Makefile b/scripts/Makefile
index 01e7adb..aedf135 100644
--- a/scripts/Makefile
+++ b/scripts/Makefile
@@ -33,10 +33,5 @@ build_unifdef: scripts/unifdef FORCE
build_docproc: scripts/docproc FORCE
@:
-subdir-$(CONFIG_MODVERSIONS) += genksyms
-subdir-y += mod
-subdir-$(CONFIG_SECURITY_SELINUX) += selinux
-subdir-$(CONFIG_DTC) += dtc
-
# Let clean descend into subdirs
-subdir- += basic kconfig package selinux
+subdir- += basic kconfig
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index 0e801c3..82f099e 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -32,6 +32,7 @@ subdir-ccflags-y :=
# Read auto.conf if it exists, otherwise ignore
-include include/config/auto.conf
+-include $(objtree)/include/config/autoconf.mk
include scripts/Kbuild.include
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
index 07125e6..8d960ad 100644
--- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib
@@ -27,7 +27,7 @@ lib-y := $(filter-out $(obj-y), $(sort $(lib-y) $(lib-m)))
# ---------------------------------------------------------------------------
# o if we encounter foo/ in $(obj-y), replace it by foo/built-in.o
# and add the directory to the list of dirs to descend into: $(subdir-y)
-# o if we encounter foo/ in $(obj-m), remove it from $(obj-m)
+# o if we encounter foo/ in $(obj-m), remove it from $(obj-m)
# and add the directory to the list of dirs to descend into: $(subdir-m)
# Determine modorder.
@@ -144,14 +144,16 @@ __a_flags = $(call flags,_a_flags)
__cpp_flags = $(call flags,_cpp_flags)
endif
-c_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \
+_nostdinc_flags = $(filter-out $(CFLAGS_REMOVE_$(basetarget).o), $(NOSTDINC_FLAGS))
+
+c_flags = -Wp,-MD,$(depfile) $(_nostdinc_flags) $(LINUXINCLUDE) \
$(__c_flags) $(modkern_cflags) \
-D"KBUILD_STR(s)=\#s" $(basename_flags) $(modname_flags)
-a_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \
+a_flags = -Wp,-MD,$(depfile) $(_nostdinc_flags) $(LINUXINCLUDE) \
$(__a_flags) $(modkern_aflags)
-cpp_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \
+cpp_flags = -Wp,-MD,$(depfile) $(_nostdinc_flags) $(LINUXINCLUDE) \
$(__cpp_flags)
ld_flags = $(LDFLAGS) $(ldflags-y)
diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
index bd9b673..27d3890 100644
--- a/scripts/kconfig/Makefile
+++ b/scripts/kconfig/Makefile
@@ -106,8 +106,19 @@ else
$(Q)$< --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
endif
-%_defconfig: $(obj)/conf
- $(Q)$< --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
+sinclude $(objtree)/include/config.mk
+
+SRCARCH = $(ARCH)
+
+CONFIGDIR := board/$(VENDOR)/$(BOARD)/configs
+
+# Create a default config if needed
+%_config: $(obj)/conf
+ $(Q)if [ ! -f $(CONFIGDIR)/$@ ]; then \
+ mkdir -p $(CONFIGDIR); \
+ touch $(CONFIGDIR)/$@; \
+ fi
+ $(Q)$< --defconfig=$(CONFIGDIR)/$@ $(Kconfig)
# Help text used by make help
help:
diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh
index b3d907e..bc42b06 100644
--- a/scripts/link-vmlinux.sh
+++ b/scripts/link-vmlinux.sh
@@ -52,10 +52,15 @@ vmlinux_link()
{
local lds="${objtree}/${KBUILD_LDS}"
- if [ "${SRCARCH}" != "um" ]; then
+ if [ "${SRCARCH}" == "sandbox" ]; then
+ # Use gcc for sandbox, so we find the right libraries
+ ${CC} -o ${2} -T ${lds} ${KBUILD_VMLINUX_INIT} \
+ -Wl,--start-group ${KBUILD_VMLINUX_MAIN} \
+ -Wl,--end-group ${FINAL_LIBS}
+ elif [ "${SRCARCH}" != "um" ]; then
${LD} ${LDFLAGS} ${LDFLAGS_vmlinux} -o ${2} \
-T ${lds} ${KBUILD_VMLINUX_INIT} \
- --start-group ${KBUILD_VMLINUX_MAIN} --end-group ${1}
+ --start-group ${KBUILD_VMLINUX_MAIN} --end-group
else
${CC} ${CFLAGS_vmlinux} -o ${2} \
-Wl,-T,${lds} ${KBUILD_VMLINUX_INIT} \
@@ -136,10 +141,6 @@ fi
#link vmlinux.o
info LD vmlinux.o
-modpost_link vmlinux.o
-
-# modpost vmlinux.o to check for section mismatches
-${MAKE} -f "${srctree}/scripts/Makefile.modpost" vmlinux.o
# Update version
info GEN .version
--
1.8.2.1
More information about the U-Boot
mailing list