|
@@ -271,11 +271,17 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
|
|
|
else if [ -x /bin/bash ]; then echo /bin/bash; \
|
|
|
else echo sh; fi ; fi)
|
|
|
|
|
|
+HOST_LFS_CFLAGS := $(shell getconf LFS_CFLAGS 2>/dev/null)
|
|
|
+HOST_LFS_LDFLAGS := $(shell getconf LFS_LDFLAGS 2>/dev/null)
|
|
|
+HOST_LFS_LIBS := $(shell getconf LFS_LIBS 2>/dev/null)
|
|
|
+
|
|
|
HOSTCC = cc
|
|
|
HOSTCXX = c++
|
|
|
-HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer \
|
|
|
- $(if $(CONFIG_TOOLS_DEBUG),-g)
|
|
|
-HOSTCXXFLAGS = -O2
|
|
|
+KBUILD_HOSTCFLAGS := -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer \
|
|
|
+ $(if $(CONFIG_TOOLS_DEBUG),-g) $(HOST_LFS_CFLAGS) $(HOSTCFLAGS)
|
|
|
+KBUILD_HOSTCXXFLAGS := -O2 $(HOST_LFS_CFLAGS) $(HOSTCXXFLAGS)
|
|
|
+KBUILD_HOSTLDFLAGS := $(HOST_LFS_LDFLAGS) $(HOSTLDFLAGS)
|
|
|
+KBUILD_HOSTLDLIBS := $(HOST_LFS_LIBS) $(HOSTLDLIBS)
|
|
|
|
|
|
# With the move to GCC 6, we have implicitly upgraded our language
|
|
|
# standard to GNU11 (see https://gcc.gnu.org/gcc-5/porting_to.html).
|
|
@@ -284,11 +290,11 @@ HOSTCXXFLAGS = -O2
|
|
|
# these that our host tools are GNU11 (i.e. C11 w/ GNU extensions).
|
|
|
CSTD_FLAG := -std=gnu11
|
|
|
ifeq ($(HOSTOS),linux)
|
|
|
-HOSTCFLAGS += $(CSTD_FLAG)
|
|
|
+KBUILD_HOSTCFLAGS += $(CSTD_FLAG)
|
|
|
endif
|
|
|
|
|
|
ifeq ($(HOSTOS),cygwin)
|
|
|
-HOSTCFLAGS += -ansi
|
|
|
+KBUILD_HOSTCFLAGS += -ansi
|
|
|
endif
|
|
|
|
|
|
# Mac OS X / Darwin's C preprocessor is Apple specific. It
|
|
@@ -315,17 +321,17 @@ os_x_after = $(shell if [ $(DARWIN_MAJOR_VERSION) -ge $(1) -a \
|
|
|
|
|
|
# Snow Leopards build environment has no longer restrictions as described above
|
|
|
HOSTCC = $(call os_x_before, 10, 5, "cc", "gcc")
|
|
|
-HOSTCFLAGS += $(call os_x_before, 10, 4, "-traditional-cpp")
|
|
|
-HOSTLDFLAGS += $(call os_x_before, 10, 5, "-multiply_defined suppress")
|
|
|
+KBUILD_HOSTCFLAGS += $(call os_x_before, 10, 4, "-traditional-cpp")
|
|
|
+KBUILD_HOSTLDFLAGS += $(call os_x_before, 10, 5, "-multiply_defined suppress")
|
|
|
|
|
|
# since Lion (10.7) ASLR is on by default, but we use linker generated lists
|
|
|
# in some host tools which is a problem then ... so disable ASLR for these
|
|
|
# tools
|
|
|
-HOSTLDFLAGS += $(call os_x_before, 10, 7, "", "-Xlinker -no_pie")
|
|
|
+KBUILD_HOSTLDFLAGS += $(call os_x_before, 10, 7, "", "-Xlinker -no_pie")
|
|
|
|
|
|
# macOS Mojave (10.14.X)
|
|
|
# Undefined symbols for architecture x86_64: "_PyArg_ParseTuple"
|
|
|
-HOSTLDFLAGS += $(call os_x_after, 10, 14, "-lpython -dynamclib", "")
|
|
|
+KBUILD_HOSTLDFLAGS += $(call os_x_after, 10, 14, "-lpython -dynamclib", "")
|
|
|
endif
|
|
|
|
|
|
# Decide whether to build built-in, modular, or both.
|
|
@@ -417,6 +423,23 @@ KBUILD_CFLAGS := -Wall -Wstrict-prototypes \
|
|
|
-fno-builtin -ffreestanding $(CSTD_FLAG)
|
|
|
KBUILD_CFLAGS += -fshort-wchar -fno-strict-aliasing
|
|
|
KBUILD_AFLAGS := -D__ASSEMBLY__
|
|
|
+KBUILD_LDFLAGS :=
|
|
|
+
|
|
|
+ifeq ($(cc-name),clang)
|
|
|
+ifneq ($(CROSS_COMPILE),)
|
|
|
+CLANG_TARGET := --target=$(notdir $(CROSS_COMPILE:%-=%))
|
|
|
+GCC_TOOLCHAIN_DIR := $(dir $(shell which $(LD)))
|
|
|
+CLANG_PREFIX := --prefix=$(GCC_TOOLCHAIN_DIR)
|
|
|
+GCC_TOOLCHAIN := $(realpath $(GCC_TOOLCHAIN_DIR)/..)
|
|
|
+endif
|
|
|
+ifneq ($(GCC_TOOLCHAIN),)
|
|
|
+CLANG_GCC_TC := --gcc-toolchain=$(GCC_TOOLCHAIN)
|
|
|
+endif
|
|
|
+KBUILD_CFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) $(CLANG_PREFIX)
|
|
|
+KBUILD_AFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) $(CLANG_PREFIX)
|
|
|
+KBUILD_CFLAGS += $(call cc-option, -no-integrated-as)
|
|
|
+KBUILD_AFLAGS += $(call cc-option, -no-integrated-as)
|
|
|
+endif
|
|
|
|
|
|
# Don't generate position independent code
|
|
|
KBUILD_CFLAGS += $(call cc-option,-fno-PIE)
|
|
@@ -428,12 +451,12 @@ UBOOTVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SU
|
|
|
|
|
|
export VERSION PATCHLEVEL SUBLEVEL UBOOTRELEASE UBOOTVERSION
|
|
|
export ARCH CPU BOARD VENDOR SOC CPUDIR BOARDDIR
|
|
|
-export CONFIG_SHELL HOSTCC HOSTCFLAGS HOSTLDFLAGS CROSS_COMPILE AS LD CC
|
|
|
-export CPP AR NM LDR STRIP OBJCOPY OBJDUMP
|
|
|
+export CONFIG_SHELL HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE AS LD CC
|
|
|
+export CPP AR NM LDR STRIP OBJCOPY OBJDUMP KBUILD_HOSTLDFLAGS KBUILD_HOSTLDLIBS
|
|
|
export MAKE LEX YACC AWK PERL PYTHON PYTHON2 PYTHON3
|
|
|
-export HOSTCXX HOSTCXXFLAGS CHECK CHECKFLAGS DTC DTC_FLAGS
|
|
|
+export HOSTCXX KBUILD_HOSTCXXFLAGS CHECK CHECKFLAGS DTC DTC_FLAGS
|
|
|
|
|
|
-export KBUILD_CPPFLAGS NOSTDINC_FLAGS UBOOTINCLUDE OBJCOPYFLAGS LDFLAGS
|
|
|
+export KBUILD_CPPFLAGS NOSTDINC_FLAGS UBOOTINCLUDE OBJCOPYFLAGS KBUILD_LDFLAGS
|
|
|
export KBUILD_CFLAGS KBUILD_AFLAGS
|
|
|
|
|
|
export CC_VERSION_TEXT := $(shell $(CC) --version | head -n 1)
|
|
@@ -657,6 +680,9 @@ endif
|
|
|
KBUILD_CFLAGS += $(call cc-option,-fno-stack-protector)
|
|
|
KBUILD_CFLAGS += $(call cc-option,-fno-delete-null-pointer-checks)
|
|
|
|
|
|
+# disable stringop warnings in gcc 8+
|
|
|
+KBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation)
|
|
|
+
|
|
|
# change __FILE__ to the relative path from the srctree
|
|
|
KBUILD_CFLAGS += $(call cc-option,-fmacro-prefix-map=$(srctree)/=)
|
|
|
|
|
@@ -681,7 +707,19 @@ ifeq ($(cc-name),clang)
|
|
|
KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,)
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier)
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning, gnu)
|
|
|
+KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
|
|
|
+# Quiet clang warning: comparison of unsigned expression < 0 is always false
|
|
|
+KBUILD_CFLAGS += $(call cc-disable-warning, tautological-compare)
|
|
|
+# CLANG uses a _MergedGlobals as optimization, but this breaks modpost, as the
|
|
|
+# source of a reference will be _MergedGlobals and not on of the whitelisted names.
|
|
|
+# See modpost pattern 2
|
|
|
+KBUILD_CFLAGS += $(call cc-option, -mno-global-merge,)
|
|
|
KBUILD_CFLAGS += $(call cc-option, -fcatch-undefined-behavior)
|
|
|
+else
|
|
|
+
|
|
|
+# These warnings generated too much noise in a regular build.
|
|
|
+# Use make W=1 to enable them (see scripts/Makefile.extrawarn)
|
|
|
+KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
|
|
|
endif
|
|
|
|
|
|
# turn jbsr into jsr for m68k
|
|
@@ -1691,7 +1729,7 @@ ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(ARCH)/Makefile.postlink)
|
|
|
# Rule to link u-boot
|
|
|
# May be overridden by arch/$(ARCH)/config.mk
|
|
|
quiet_cmd_u-boot__ ?= LD $@
|
|
|
- cmd_u-boot__ ?= $(LD) $(LDFLAGS) $(LDFLAGS_u-boot) -o $@ \
|
|
|
+ cmd_u-boot__ ?= $(LD) $(KBUILD_LDFLAGS) $(LDFLAGS_u-boot) -o $@ \
|
|
|
-T u-boot.lds $(u-boot-init) \
|
|
|
--start-group $(u-boot-main) --end-group \
|
|
|
$(PLATFORM_LIBS) -Map u-boot.map; \
|