#Android makefile to build bootloader as a part of Android Build ANDROID_TOP=$(shell pwd) CLANG_BIN := $(ANDROID_TOP)/$(LLVM_PREBUILTS_PATH)/ ABL_USE_SDLLVM := false ifneq ($(wildcard $(SDCLANG_PATH)),) ifeq ($(shell echo $(SDCLANG_PATH) | head -c 1),/) CLANG_BIN := $(SDCLANG_PATH)/ else CLANG_BIN := $(ANDROID_TOP)/$(SDCLANG_PATH)/ endif ABL_USE_SDLLVM := true endif # LD & make are not available in prebuilts for older Android versions ifeq (1,$(filter 1,$(shell echo "$$(( $(PLATFORM_SDK_VERSION) > 27 ))" ))) LDOPT="-fuse-ld=$(ANDROID_TOP)/$(SOONG_LLVM_PREBUILTS_PATH)/ld.lld" MAKEPATH=$(ANDROID_TOP)/prebuilts/build-tools/linux-x86/bin/ ifeq (,$(wildcard $(MAKEPATH)make)) MAKEPATH := endif endif # Use host tools from prebuilts. Partner should determine the correct host tools to use PREBUILT_HOST_TOOLS := CC=$(ANDROID_TOP)/$(CLANG)\ \ CXX=$(ANDROID_TOP)/$(CLANG_CXX)\ \ LDPATH=$(LDOPT)\ \ AR=$(ANDROID_TOP)/$(HOST_AR) PREBUILT_PYTHON_PATH=$(ANDROID_TOP)/prebuilts/python/linux-x86/2.7.5/bin/python2 DISABLE_PARALLEL_DOWNLOAD_FLASH := DISABLE_PARALLEL_DOWNLOAD_FLASH=0 ifeq ($(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VERITY),true) VERIFIED_BOOT := VERIFIED_BOOT=1 else VERIFIED_BOOT := VERIFIED_BOOT=0 endif ifeq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true) BUILD_SYSTEM_ROOT_IMAGE := BUILD_SYSTEM_ROOT_IMAGE=1 else BUILD_SYSTEM_ROOT_IMAGE := BUILD_SYSTEM_ROOT_IMAGE=0 endif ifeq ($(BOARD_AVB_ENABLE),true) VERIFIED_BOOT_2 := VERIFIED_BOOT_2=1 else VERIFIED_BOOT_2 := VERIFIED_BOOT_2=0 endif ifeq ($(BOARD_LEVB_ENABLE),true) VERIFIED_BOOT_LE := VERIFIED_BOOT_LE=1 else VERIFIED_BOOT_LE := VERIFIED_BOOT_LE=0 endif ifeq ($(TARGET_AB_RETRYCOUNT_DISABLE),true) AB_RETRYCOUNT_DISABLE := AB_RETRYCOUNT_DISABLE=1 else AB_RETRYCOUNT_DISABLE := AB_RETRYCOUNT_DISABLE=0 endif ifeq ($(TARGET_BUILD_VARIANT),user) USER_BUILD_VARIANT := USER_BUILD_VARIANT=1 else USER_BUILD_VARIANT := USER_BUILD_VARIANT=0 endif ifneq ($(TARGET_BOOTLOADER_BOARD_NAME),) BOARD_BOOTLOADER_PRODUCT_NAME := $(TARGET_BOOTLOADER_BOARD_NAME) else BOARD_BOOTLOADER_PRODUCT_NAME := QC_Reference_Phone endif ifneq ($(BOARD_USERDATAIMAGE_FILE_SYSTEM_TYPE),) USERDATAIMAGE_FILE_SYSTEM_TYPE := $(BOARD_USERDATAIMAGE_FILE_SYSTEM_TYPE) else USERDATAIMAGE_FILE_SYSTEM_TYPE := ext4 endif ifeq ($(BOARD_ABL_SAFESTACK_DISABLE),true) ABL_SAFESTACK := false else ABL_SAFESTACK := true endif ifeq ($(PRODUCT_USE_DYNAMIC_PARTITIONS),true) DYNAMIC_PARTITION_SUPPORT := DYNAMIC_PARTITION_SUPPORT=1 else DYNAMIC_PARTITION_SUPPORT := DYNAMIC_PARTITION_SUPPORT=0 endif SAFESTACK_SUPPORTED_CLANG_VERSION = 6.0 # For most platform, abl needed always be built # in aarch64 arthitecture to run. # Specify BOOTLOADER_ARCH if needed to built with # other ARCHs. ifeq ($(BOOTLOADER_ARCH),) BOOTLOADER_ARCH := AARCH64 endif TARGET_ARCHITECTURE := $(BOOTLOADER_ARCH) ifeq ($(TARGET_ARCHITECTURE),arm) CLANG35_PREFIX := $(ANDROID_TOP)/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-$(TARGET_GCC_VERSION)/bin/arm-linux-androideabi- CLANG35_GCC_TOOLCHAIN := $(ANDROID_TOP)/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-$(TARGET_GCC_VERSION) else CLANG35_PREFIX := $(ANDROID_TOP)/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-$(TARGET_GCC_VERSION)/bin/aarch64-linux-android- CLANG35_GCC_TOOLCHAIN := $(ANDROID_TOP)/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-$(TARGET_GCC_VERSION) endif # ABL ELF output TARGET_ABL := $(PRODUCT_OUT)/abl.elf TARGET_EMMC_BOOTLOADER := $(TARGET_ABL) ABL_OUT := $(TARGET_OUT_INTERMEDIATES)/ABL_OBJ $(ABL_OUT): mkdir -p $(ABL_OUT) # Top level target LOCAL_ABL_PATH := bootable/bootloader/edk2 LOCAL_ABL_SRC_FILE := $(shell find $(LOCAL_ABL_PATH) -name "*" -type f | sed "s%\.\/%$(LOCAL_ABL_PATH)\/%g") $(TARGET_ABL): $(LOCAL_ABL_SRC_FILE) | $(ABL_OUT) $(INSTALLED_KEYSTOREIMAGE_TARGET) $(MAKEPATH)make -C bootable/bootloader/edk2 \ BOOTLOADER_OUT=../../../$(ABL_OUT) \ all \ PREBUILT_HOST_TOOLS=$(PREBUILT_HOST_TOOLS) \ PREBUILT_PYTHON_PATH=$(PREBUILT_PYTHON_PATH) \ MAKEPATH=$(MAKEPATH) \ $(BUILD_SYSTEM_ROOT_IMAGE) \ $(VERIFIED_BOOT) \ $(VERIFIED_BOOT_2) \ $(VERIFIED_BOOT_LE) \ $(USER_BUILD_VARIANT) \ $(DISABLE_PARALLEL_DOWNLOAD_FLASH) \ $(AB_RETRYCOUNT_DISABLE) \ $(DYNAMIC_PARTITION_SUPPORT) \ CLANG_BIN=$(CLANG_BIN) \ CLANG_PREFIX=$(CLANG35_PREFIX)\ ABL_USE_SDLLVM=$(ABL_USE_SDLLVM) \ ABL_SAFESTACK=$(ABL_SAFESTACK) \ SAFESTACK_SUPPORTED_CLANG_VERSION=$(SAFESTACK_SUPPORTED_CLANG_VERSION) \ CLANG_GCC_TOOLCHAIN=$(CLANG35_GCC_TOOLCHAIN)\ TARGET_ARCHITECTURE=$(TARGET_ARCHITECTURE) \ BOARD_BOOTLOADER_PRODUCT_NAME=$(BOARD_BOOTLOADER_PRODUCT_NAME) \ USERDATAIMAGE_FILE_SYSTEM_TYPE=$(USERDATAIMAGE_FILE_SYSTEM_TYPE)