• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#
2# Copyright 2015 The Android Open Source Project
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8#      http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16
17# Targets for building U-Boot
18#
19# The following must be set before including this file:
20# TARGET_UBOOT_SRC must be set the base of a U-Boot tree.
21# TARGET_UBOOT_DEFCONFIG must name a base U-Boot config.
22# TARGET_UBOOT_ARCH must be set to match U-Boot arch.
23#
24# The following may be set:
25# TARGET_UBOOT_CROSS_COMPILE_PREFIX to override toolchain.
26# TARGET_UBOOT_CONFIGS to specify a set of additional U-Boot config files.
27# TARGET_UBOOT_ENV to specify an environment to be compiled into uboot.env.
28# TARGET_UBOOT_ENV_SIZE to specify the size reserved in U-Boot for the env.
29
30ifeq ($(TARGET_UBOOT_SRC),)
31$(error TARGET_UBOOT_SRC not defined but uboot.mk included)
32endif
33
34ifeq ($(TARGET_UBOOT_DEFCONFIG),)
35$(error TARGET_UBOOT_DEFCONFIG not defined)
36endif
37
38ifeq ($(TARGET_UBOOT_ARCH),)
39$(error TARGET_UBOOT_ARCH not defined)
40endif
41
42ifeq ($(TARGET_UBOOT_ENV_SIZE),)
43ifneq ($(TARGET_UBOOT_ENV),)
44$(error If TARGET_UBOOT_ENV is set TARGET_UBOOT_ENV_SIZE must also be set. See\
45 CONFIG_ENV_SIZE in the selected U-Boot board config file.)
46endif
47endif
48
49# These may be assigned in target BoardConfig.mk.
50TARGET_UBOOT_MAKE_TARGET ?= u-boot.bin
51TARGET_UBOOT_COPY_TARGETS ?= $(TARGET_UBOOT_MAKE_TARGET)
52
53# Check target arch.
54TARGET_UBOOT_ARCH := $(strip $(TARGET_UBOOT_ARCH))
55UBOOT_ARCH := $(TARGET_UBOOT_ARCH)
56UBOOT_CC_WRAPPER := $(CC_WRAPPER)
57UBOOT_AFLAGS :=
58UBOOT_DTC := $(HOST_OUT_EXECUTABLES)/dtc
59UBOOT_DTC_ABS := $(abspath $(UBOOT_DTC))
60
61ifeq ($(TARGET_UBOOT_ARCH), arm)
62UBOOT_TOOLCHAIN_ABS := $(realpath prebuilts/gcc/$(HOST_PREBUILT_TAG)/arm/arm-linux-androideabi-4.9/bin)
63UBOOT_CROSS_COMPILE := $(UBOOT_TOOLCHAIN_ABS)/arm-linux-androidkernel-
64UBOOT_SRC_ARCH := arm
65UBOOT_CFLAGS :=
66else ifeq ($(TARGET_UBOOT_ARCH), arm64)
67UBOOT_TOOLCHAIN_ABS := $(realpath prebuilts/gcc/$(HOST_PREBUILT_TAG)/aarch64/aarch64-linux-android-4.9/bin)
68UBOOT_CROSS_COMPILE := $(UBOOT_TOOLCHAIN_ABS)/aarch64-linux-androidkernel-
69UBOOT_SRC_ARCH := arm64
70UBOOT_CFLAGS :=
71else ifeq ($(TARGET_UBOOT_ARCH), i386)
72UBOOT_TOOLCHAIN_ABS := $(realpath prebuilts/gcc/$(HOST_PREBUILT_TAG)/x86/x86_64-linux-android-4.9/bin)
73UBOOT_CROSS_COMPILE := $(UBOOT_TOOLCHAIN_ABS)/x86_64-linux-androidkernel-
74UBOOT_SRC_ARCH := x86
75UBOOT_CFLAGS := -mstack-protector-guard=tls
76else ifeq ($(TARGET_UBOOT_ARCH), x86_64)
77UBOOT_TOOLCHAIN_ABS := $(realpath prebuilts/gcc/$(HOST_PREBUILT_TAG)/x86/x86_64-linux-android-4.9/bin)
78UBOOT_CROSS_COMPILE := $(UBOOT_TOOLCHAIN_ABS)/x86_64-linux-androidkernel-
79UBOOT_SRC_ARCH := x86
80UBOOT_CFLAGS := -mstack-protector-guard=tls
81else ifeq ($(TARGET_UBOOT_ARCH), mips)
82UBOOT_TOOLCHAIN_ABS := $(realpath prebuilts/gcc/$(HOST_PREBUILT_TAG)/mips/mips64el-linux-android-4.9/bin)
83UBOOT_CROSS_COMPILE := $(UBOOT_TOOLCHAIN_ABS)/mips64el-linux-androidkernel-
84UBOOT_SRC_ARCH := mips
85UBOOT_CFLAGS :=
86else
87$(error U-Boot arch not supported at present)
88endif
89
90# Allow caller to override toolchain.
91TARGET_UBOOT_CROSS_COMPILE_PREFIX := $(strip $(TARGET_UBOOT_CROSS_COMPILE_PREFIX))
92ifneq ($(TARGET_UBOOT_CROSS_COMPILE_PREFIX),)
93UBOOT_CROSS_COMPILE := $(TARGET_UBOOT_CROSS_COMPILE_PREFIX)
94endif
95
96# Use ccache if requested by USE_CCACHE variable
97UBOOT_CROSS_COMPILE_WRAPPER := $(realpath $(UBOOT_CC_WRAPPER)) $(UBOOT_CROSS_COMPILE)
98
99UBOOT_GCC_NOANDROID_CHK := $(shell (echo "int main() {return 0;}" | $(UBOOT_CROSS_COMPILE)gcc -E -mno-android - > /dev/null 2>&1 ; echo $$?))
100ifeq ($(strip $(UBOOT_GCC_NOANDROID_CHK)),0)
101UBOOT_CFLAGS += -mno-android
102UBOOT_AFLAGS += -mno-android
103endif
104
105# Set the output for the U-Boot build products.
106UBOOT_OUT := $(TARGET_OUT_INTERMEDIATES)/UBOOT_OBJ
107UBOOT_ENV_OUT := $(PRODUCT_OUT)/uboot.env
108
109# Merge all U-Boot config file sources.
110UBOOT_CONFIG_DIR := device/ti/beagle_x15/uboot_config
111UBOOT_CONFIG_DEFAULT := $(TARGET_UBOOT_SRC)/configs/$(TARGET_UBOOT_DEFCONFIG)
112UBOOT_CONFIG_RECOMMENDED := $(UBOOT_CONFIG_DIR)/recommended.config
113UBOOT_CONFIG_REQUIRED_SRC := $(UBOOT_CONFIG_DIR)/common.config
114UBOOT_CONFIG_REQUIRED := $(UBOOT_OUT)/.config.required
115UBOOT_CONFIG_SRC := $(UBOOT_CONFIG_DEFAULT) \
116  $(UBOOT_CONFIG_RECOMMENDED) \
117  $(TARGET_UBOOT_CONFIGS) \
118  $(UBOOT_CONFIG_REQUIRED)
119UBOOT_CONFIG := $(UBOOT_OUT)/.config
120UBOOT_MERGE_CONFIG := device/ti/beagle_x15/mergeconfig.sh
121# List of all the Kconfig files from the source code. Changing the Kconfig files
122# requires to reassemble the .config, so we add them as dependencies.
123UBOOT_SRC_KCONFIGS := \
124  $(call find-files-in-subdirs,.,Kconfig,$(TARGET_UBOOT_SRC))
125
126$(UBOOT_OUT):
127	mkdir -p $@
128
129define build_uboot
130	# We don't support bundling a device tree with U-Boot yet.
131	CCACHE_NODIRECT="true" PATH=$$(cd device/ti/beagle_x15/hostcc; pwd):$$PATH \
132		BISON_PKGDATADIR=$$(cd prebuilts/build-tools/common/bison; pwd) \
133		$(MAKE) -C $(TARGET_UBOOT_SRC) \
134		O=$(realpath $(UBOOT_OUT)) \
135		CROSS_COMPILE="$(UBOOT_CROSS_COMPILE_WRAPPER)" \
136		DTC="$(UBOOT_DTC_ABS)" \
137		KCFLAGS="$(UBOOT_CFLAGS)" \
138		KAFLAGS="$(UBOOT_AFLAGS)" \
139		SOURCE_DATE_EPOCH="$(BUILD_DATETIME_FROM_FILE)" \
140		$(1)
141endef
142
143# Merge the required U-Boot config elements into a single file.
144$(UBOOT_CONFIG_REQUIRED): $(UBOOT_CONFIG_REQUIRED_SRC) | $(UBOOT_OUT)
145	$(hide) cat $^ > $@
146
147# Merge the final target U-Boot config.
148$(UBOOT_CONFIG): $(UBOOT_CONFIG_SRC) $(UBOOT_SRC_KCONFIGS) | $(UBOOT_OUT)
149	$(hide) echo Merging U-Boot config
150	$(call build_uboot,mrproper)
151	PATH=$$(cd device/ti/beagle_x15/hostcc; pwd):$$PATH \
152		BISON_PKGDATADIR=$$(cd prebuilts/build-tools/common/bison; pwd) \
153		$(UBOOT_MERGE_CONFIG) \
154		$(TARGET_UBOOT_SRC) $(realpath $(UBOOT_OUT)) \
155		$(UBOOT_ARCH) $(UBOOT_CROSS_COMPILE) \
156		$(UBOOT_CONFIG_SRC)
157
158$(UBOOT_OUT)/$(TARGET_UBOOT_MAKE_TARGET): $(UBOOT_CONFIG) | $(UBOOT_OUT) $(UBOOT_DTC)
159	$(hide) echo "Building $(UBOOT_ARCH) U-Boot ..."
160	$(call build_uboot,$(TARGET_UBOOT_MAKE_TARGET))
161
162$(addprefix $(UBOOT_OUT)/,$(TARGET_UBOOT_COPY_TARGETS)): $(UBOOT_OUT)/$(TARGET_UBOOT_MAKE_TARGET)
163
164ifneq ($(TARGET_UBOOT_ENV),)
165$(UBOOT_ENV_OUT): $(TARGET_UBOOT_ENV) | $(addprefix $(UBOOT_OUT)/,$(TARGET_UBOOT_COPY_TARGETS))
166	$(UBOOT_OUT)/tools/mkenvimage -s $(TARGET_UBOOT_ENV_SIZE) -o $@ $<
167endif
168
169ALL_DEFAULT_INSTALLED_MODULES += $(addprefix $(PRODUCT_OUT)/,$(TARGET_UBOOT_COPY_TARGETS))
170
171# Produces the actual U-Boot image!
172define copy_uboot
173$$(PRODUCT_OUT)/$(1): $$(UBOOT_OUT)/$(1) | $$(ACP)
174	$$(ACP) -fp $$< $$@
175endef
176$(foreach _t,$(TARGET_UBOOT_COPY_TARGETS),$(eval $(call copy_uboot,$(_t))))
177