# # Copyright 2015 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # Targets for building U-Boot # # The following must be set before including this file: # TARGET_UBOOT_SRC must be set the base of a U-Boot tree. # TARGET_UBOOT_DEFCONFIG must name a base U-Boot config. # TARGET_UBOOT_ARCH must be set to match U-Boot arch. # # The following may be set: # TARGET_UBOOT_CROSS_COMPILE_PREFIX to override toolchain. # TARGET_UBOOT_CONFIGS to specify a set of additional U-Boot config files. # TARGET_UBOOT_ENV to specify an environment to be compiled into uboot.env. # TARGET_UBOOT_ENV_SIZE to specify the size reserved in U-Boot for the env. ifeq ($(TARGET_UBOOT_SRC),) $(error TARGET_UBOOT_SRC not defined but uboot.mk included) endif ifeq ($(TARGET_UBOOT_DEFCONFIG),) $(error TARGET_UBOOT_DEFCONFIG not defined) endif ifeq ($(TARGET_UBOOT_ARCH),) $(error TARGET_UBOOT_ARCH not defined) endif ifeq ($(TARGET_UBOOT_ENV_SIZE),) ifneq ($(TARGET_UBOOT_ENV),) $(error If TARGET_UBOOT_ENV is set TARGET_UBOOT_ENV_SIZE must also be set. See\ CONFIG_ENV_SIZE in the selected U-Boot board config file.) endif endif # These may be assigned in target BoardConfig.mk. TARGET_UBOOT_MAKE_TARGET ?= u-boot.bin TARGET_UBOOT_COPY_TARGETS ?= $(TARGET_UBOOT_MAKE_TARGET) # Check target arch. TARGET_UBOOT_ARCH := $(strip $(TARGET_UBOOT_ARCH)) UBOOT_ARCH := $(TARGET_UBOOT_ARCH) UBOOT_CC_WRAPPER := $(CC_WRAPPER) UBOOT_AFLAGS := UBOOT_DTC := $(HOST_OUT_EXECUTABLES)/dtc UBOOT_DTC_ABS := $(abspath $(UBOOT_DTC)) ifeq ($(TARGET_UBOOT_ARCH), arm) UBOOT_TOOLCHAIN_ABS := $(realpath prebuilts/gcc/$(HOST_PREBUILT_TAG)/arm/arm-linux-androideabi-4.9/bin) UBOOT_CROSS_COMPILE := $(UBOOT_TOOLCHAIN_ABS)/arm-linux-androidkernel- UBOOT_SRC_ARCH := arm UBOOT_CFLAGS := else ifeq ($(TARGET_UBOOT_ARCH), arm64) UBOOT_TOOLCHAIN_ABS := $(realpath prebuilts/gcc/$(HOST_PREBUILT_TAG)/aarch64/aarch64-linux-android-4.9/bin) UBOOT_CROSS_COMPILE := $(UBOOT_TOOLCHAIN_ABS)/aarch64-linux-androidkernel- UBOOT_SRC_ARCH := arm64 UBOOT_CFLAGS := else ifeq ($(TARGET_UBOOT_ARCH), i386) UBOOT_TOOLCHAIN_ABS := $(realpath prebuilts/gcc/$(HOST_PREBUILT_TAG)/x86/x86_64-linux-android-4.9/bin) UBOOT_CROSS_COMPILE := $(UBOOT_TOOLCHAIN_ABS)/x86_64-linux-androidkernel- UBOOT_SRC_ARCH := x86 UBOOT_CFLAGS := -mstack-protector-guard=tls else ifeq ($(TARGET_UBOOT_ARCH), x86_64) UBOOT_TOOLCHAIN_ABS := $(realpath prebuilts/gcc/$(HOST_PREBUILT_TAG)/x86/x86_64-linux-android-4.9/bin) UBOOT_CROSS_COMPILE := $(UBOOT_TOOLCHAIN_ABS)/x86_64-linux-androidkernel- UBOOT_SRC_ARCH := x86 UBOOT_CFLAGS := -mstack-protector-guard=tls else ifeq ($(TARGET_UBOOT_ARCH), mips) UBOOT_TOOLCHAIN_ABS := $(realpath prebuilts/gcc/$(HOST_PREBUILT_TAG)/mips/mips64el-linux-android-4.9/bin) UBOOT_CROSS_COMPILE := $(UBOOT_TOOLCHAIN_ABS)/mips64el-linux-androidkernel- UBOOT_SRC_ARCH := mips UBOOT_CFLAGS := else $(error U-Boot arch not supported at present) endif # Allow caller to override toolchain. TARGET_UBOOT_CROSS_COMPILE_PREFIX := $(strip $(TARGET_UBOOT_CROSS_COMPILE_PREFIX)) ifneq ($(TARGET_UBOOT_CROSS_COMPILE_PREFIX),) UBOOT_CROSS_COMPILE := $(TARGET_UBOOT_CROSS_COMPILE_PREFIX) endif # Use ccache if requested by USE_CCACHE variable UBOOT_CROSS_COMPILE_WRAPPER := $(realpath $(UBOOT_CC_WRAPPER)) $(UBOOT_CROSS_COMPILE) UBOOT_GCC_NOANDROID_CHK := $(shell (echo "int main() {return 0;}" | $(UBOOT_CROSS_COMPILE)gcc -E -mno-android - > /dev/null 2>&1 ; echo $$?)) ifeq ($(strip $(UBOOT_GCC_NOANDROID_CHK)),0) UBOOT_CFLAGS += -mno-android UBOOT_AFLAGS += -mno-android endif # Set the output for the U-Boot build products. UBOOT_OUT := $(TARGET_OUT_INTERMEDIATES)/UBOOT_OBJ UBOOT_ENV_OUT := $(PRODUCT_OUT)/uboot.env # Merge all U-Boot config file sources. UBOOT_CONFIG_DIR := device/ti/beagle_x15/uboot_config UBOOT_CONFIG_DEFAULT := $(TARGET_UBOOT_SRC)/configs/$(TARGET_UBOOT_DEFCONFIG) UBOOT_CONFIG_RECOMMENDED := $(UBOOT_CONFIG_DIR)/recommended.config UBOOT_CONFIG_REQUIRED_SRC := $(UBOOT_CONFIG_DIR)/common.config UBOOT_CONFIG_REQUIRED := $(UBOOT_OUT)/.config.required UBOOT_CONFIG_SRC := $(UBOOT_CONFIG_DEFAULT) \ $(UBOOT_CONFIG_RECOMMENDED) \ $(TARGET_UBOOT_CONFIGS) \ $(UBOOT_CONFIG_REQUIRED) UBOOT_CONFIG := $(UBOOT_OUT)/.config UBOOT_MERGE_CONFIG := device/ti/beagle_x15/mergeconfig.sh # List of all the Kconfig files from the source code. Changing the Kconfig files # requires to reassemble the .config, so we add them as dependencies. UBOOT_SRC_KCONFIGS := \ $(call find-files-in-subdirs,.,Kconfig,$(TARGET_UBOOT_SRC)) $(UBOOT_OUT): mkdir -p $@ define build_uboot # We don't support bundling a device tree with U-Boot yet. CCACHE_NODIRECT="true" PATH=$$(cd device/ti/beagle_x15/hostcc; pwd):$$PATH \ BISON_PKGDATADIR=$$(cd prebuilts/build-tools/common/bison; pwd) \ $(MAKE) -C $(TARGET_UBOOT_SRC) \ O=$(realpath $(UBOOT_OUT)) \ CROSS_COMPILE="$(UBOOT_CROSS_COMPILE_WRAPPER)" \ DTC="$(UBOOT_DTC_ABS)" \ KCFLAGS="$(UBOOT_CFLAGS)" \ KAFLAGS="$(UBOOT_AFLAGS)" \ SOURCE_DATE_EPOCH="$(BUILD_DATETIME_FROM_FILE)" \ $(1) endef # Merge the required U-Boot config elements into a single file. $(UBOOT_CONFIG_REQUIRED): $(UBOOT_CONFIG_REQUIRED_SRC) | $(UBOOT_OUT) $(hide) cat $^ > $@ # Merge the final target U-Boot config. $(UBOOT_CONFIG): $(UBOOT_CONFIG_SRC) $(UBOOT_SRC_KCONFIGS) | $(UBOOT_OUT) $(hide) echo Merging U-Boot config $(call build_uboot,mrproper) PATH=$$(cd device/ti/beagle_x15/hostcc; pwd):$$PATH \ BISON_PKGDATADIR=$$(cd prebuilts/build-tools/common/bison; pwd) \ $(UBOOT_MERGE_CONFIG) \ $(TARGET_UBOOT_SRC) $(realpath $(UBOOT_OUT)) \ $(UBOOT_ARCH) $(UBOOT_CROSS_COMPILE) \ $(UBOOT_CONFIG_SRC) $(UBOOT_OUT)/$(TARGET_UBOOT_MAKE_TARGET): $(UBOOT_CONFIG) | $(UBOOT_OUT) $(UBOOT_DTC) $(hide) echo "Building $(UBOOT_ARCH) U-Boot ..." $(call build_uboot,$(TARGET_UBOOT_MAKE_TARGET)) $(addprefix $(UBOOT_OUT)/,$(TARGET_UBOOT_COPY_TARGETS)): $(UBOOT_OUT)/$(TARGET_UBOOT_MAKE_TARGET) ifneq ($(TARGET_UBOOT_ENV),) $(UBOOT_ENV_OUT): $(TARGET_UBOOT_ENV) | $(addprefix $(UBOOT_OUT)/,$(TARGET_UBOOT_COPY_TARGETS)) $(UBOOT_OUT)/tools/mkenvimage -s $(TARGET_UBOOT_ENV_SIZE) -o $@ $< endif ALL_DEFAULT_INSTALLED_MODULES += $(addprefix $(PRODUCT_OUT)/,$(TARGET_UBOOT_COPY_TARGETS)) # Produces the actual U-Boot image! define copy_uboot $$(PRODUCT_OUT)/$(1): $$(UBOOT_OUT)/$(1) | $$(ACP) $$(ACP) -fp $$< $$@ endef $(foreach _t,$(TARGET_UBOOT_COPY_TARGETS),$(eval $(call copy_uboot,$(_t))))