| UEFI_TOP_DIR := . |
| |
| ifndef $(BOOTLOADER_OUT) |
| BOOTLOADER_OUT := . |
| endif |
| export $(BOOTLOADER_OUT) |
| |
| BUILDDIR=$(shell pwd) |
| export WRAPPER := $(PREBUILT_PYTHON_PATH) $(BUILDDIR)/clang-wrapper.py |
| export MAKEPATH := $(MAKEPATH) |
| |
| export CLANG35_BIN := $(CLANG_BIN) |
| export CLANG35_GCC_TOOLCHAIN := $(CLANG35_GCC_TOOLCHAIN) |
| export $(BOARD_BOOTLOADER_PRODUCT_NAME) |
| |
| ifeq ($(TARGET_ARCHITECTURE),arm) |
| export ARCHITECTURE := ARM |
| export CLANG35_ARM_PREFIX := $(CLANG_PREFIX) |
| else |
| export ARCHITECTURE := AARCH64 |
| export CLANG35_AARCH64_PREFIX := $(CLANG_PREFIX) |
| endif |
| |
| export BUILD_REPORT_DIR := $(BOOTLOADER_OUT)/build_report |
| ANDROID_PRODUCT_OUT := $(BOOTLOADER_OUT)/Build |
| |
| WORKSPACE=$(BUILDDIR) |
| TARGET_TOOLS := CLANG35 |
| TARGET := DEBUG |
| BUILD_ROOT := $(ANDROID_PRODUCT_OUT)/$(TARGET)_$(TARGET_TOOLS) |
| EDK_TOOLS := $(BUILDDIR)/BaseTools |
| EDK_TOOLS_BIN := $(EDK_TOOLS)/Source/C/bin |
| ABL_FV_IMG := $(BUILD_ROOT)/FV/abl.fv |
| ABL_FV_ELF := $(BOOTLOADER_OUT)/../../abl.elf |
| SHELL:=/bin/bash |
| |
| # This function is to check version compatibility, used to control features based on the compiler version. \ |
| Arguments should be return value, current version and supported version in order. \ |
| It sets return value to true if the current version is equal or greater than the supported version. |
| define check_version_compatibility |
| $(eval CURR_VERSION := $(shell $(2)/clang --version |& grep -i "clang version" |& sed 's/[^0-9.]//g')) |
| $(eval CURR_VERSION_MAJOR := $(shell echo $(CURR_VERSION) |& cut -d. -f1)) |
| $(eval CURR_VERSION_MINOR := $(shell echo $(CURR_VERSION) |& cut -d. -f2)) |
| $(eval SUPPORTED_VERSION := $(3)) |
| $(eval SUPPORTED_VERSION_MAJOR := $(shell echo $(SUPPORTED_VERSION) |& cut -d. -f1)) |
| $(eval SUPPORTED_VERSION_MINOR := $(shell echo $(SUPPORTED_VERSION) |& cut -d. -f2)) |
| |
| ifeq ($(shell expr $(CURR_VERSION_MAJOR) \> $(SUPPORTED_VERSION_MAJOR)), 1) |
| $(1) := true |
| endif |
| ifeq ($(shell expr $(CURR_VERSION_MAJOR) \= $(SUPPORTED_VERSION_MAJOR)), 1) |
| ifeq ($(shell expr $(CURR_VERSION_MINOR) \>= $(SUPPORTED_VERSION_MINOR)), 1) |
| $(1) := true |
| endif |
| endif |
| endef |
| |
| # UEFI UBSAN Configuration |
| # ENABLE_UEFI_UBSAN := true |
| |
| ifeq "$(ENABLE_UEFI_UBSAN)" "true" |
| UBSAN_GCC_FLAG_UNDEFINED := -fsanitize=undefined |
| UBSAN_GCC_FLAG_ALIGNMENT := -fno-sanitize=alignment |
| else |
| UBSAN_GCC_FLAG_UNDEFINED := |
| UBSAN_GCC_FLAG_ALIGNMENT := |
| endif |
| |
| ifeq ($(TARGET_ARCHITECTURE), arm) |
| LOAD_ADDRESS := 0X8FB00000 |
| TARGET_ARCH_ARM64 := 0 |
| else |
| LOAD_ADDRESS := 0X9FA00000 |
| TARGET_ARCH_ARM64 := 1 |
| endif |
| |
| ifeq ($(ENABLE_LE_VARIANT), true) |
| ENABLE_LE_VARIANT := 1 |
| else |
| ENABLE_LE_VARIANT := 0 |
| endif |
| |
| ifeq "$(ABL_USE_SDLLVM)" "true" |
| SDLLVM_COMPILE_ANALYZE := --compile-and-analyze |
| SDLLVM_ANALYZE_REPORT := $(BUILD_REPORT_DIR) |
| else |
| SDLLVM_COMPILE_ANALYZE := |
| SDLLVM_ANALYZE_REPORT := |
| endif |
| |
| ifneq "$(INIT_BIN_LE)" "" |
| INIT_BIN := $(INIT_BIN_LE) |
| else |
| INIT_BIN := \"/init\" |
| endif |
| |
| export SDLLVM_COMPILE_ANALYZE := $(SDLLVM_COMPILE_ANALYZE) |
| export SDLLVM_ANALYZE_REPORT := $(SDLLVM_ANALYZE_REPORT) |
| |
| CLANG_SUPPORTS_SAFESTACK := false |
| $(eval $(call check_version_compatibility, CLANG_SUPPORTS_SAFESTACK, $(CLANG_BIN), $(SAFESTACK_SUPPORTED_CLANG_VERSION))) |
| |
| ifeq "$(ABL_SAFESTACK)" "true" |
| ifeq "$(CLANG_SUPPORTS_SAFESTACK)" "true" |
| LLVM_ENABLE_SAFESTACK := -fsanitize=safe-stack |
| LLVM_SAFESTACK_USE_PTR := -mllvm -safestack-use-pointer-address |
| LLVM_SAFESTACK_COLORING := -mllvm -safe-stack-coloring=true |
| endif |
| else |
| LLVM_ENABLE_SAFESTACK := |
| LLVM_SAFESTACK_USE_PTR := |
| LLVM_SAFESTACK_COLORING := |
| endif |
| export LLVM_ENABLE_SAFESTACK := $(LLVM_ENABLE_SAFESTACK) |
| export LLVM_SAFESTACK_USE_PTR := $(LLVM_SAFESTACK_USE_PTR) |
| export LLVM_SAFESTACK_COLORING := $(LLVM_SAFESTACK_COLORING) |
| |
| .PHONY: all cleanall |
| |
| all: ABL_FV_ELF |
| |
| cleanall: |
| @. ./edksetup.sh BaseTools && \ |
| build -p $(WORKSPACE)/QcomModulePkg/QcomModulePkg.dsc -a $(ARCHITECTURE) -t $(TARGET_TOOLS) -b $(TARGET) -j build_modulepkg.log cleanall |
| rm -rf $(WORKSPACE)/QcomModulePkg/Bin64 |
| |
| EDK_TOOLS_BIN: |
| @. ./edksetup.sh BaseTools && \ |
| $(MAKEPATH)make -C $(EDK_TOOLS) $(PREBUILT_HOST_TOOLS) -j1 |
| |
| ABL_FV_IMG: EDK_TOOLS_BIN |
| @. ./edksetup.sh BaseTools && \ |
| build -p $(WORKSPACE)/QcomModulePkg/QcomModulePkg.dsc \ |
| -a $(ARCHITECTURE) \ |
| -t $(TARGET_TOOLS) \ |
| -b $(TARGET) \ |
| -D ABL_OUT_DIR=$(ANDROID_PRODUCT_OUT) \ |
| -D BUILD_SYSTEM_ROOT_IMAGE=$(BUILD_SYSTEM_ROOT_IMAGE) \ |
| -D VERIFIED_BOOT=$(VERIFIED_BOOT) \ |
| -D VERIFIED_BOOT_2=$(VERIFIED_BOOT_2) \ |
| -D VERIFIED_BOOT_LE=$(VERIFIED_BOOT_LE) \ |
| -D AB_RETRYCOUNT_DISABLE=$(AB_RETRYCOUNT_DISABLE) \ |
| -D VERITY_LE=$(VERITY_LE) \ |
| -D TARGET_ARCH_ARM64=$(TARGET_ARCH_ARM64) \ |
| -D USER_BUILD_VARIANT=$(USER_BUILD_VARIANT) \ |
| -D DISABLE_PARALLEL_DOWNLOAD_FLASH=$(DISABLE_PARALLEL_DOWNLOAD_FLASH) \ |
| -D ENABLE_LE_VARIANT=$(ENABLE_LE_VARIANT) \ |
| -D DYNAMIC_PARTITION_SUPPORT=$(DYNAMIC_PARTITION_SUPPORT) \ |
| -D INIT_BIN=$(INIT_BIN) \ |
| -D UBSAN_UEFI_GCC_FLAG_UNDEFINED=$(UBSAN_GCC_FLAG_UNDEFINED) \ |
| -D UBSAN_UEFI_GCC_FLAG_ALIGNMENT=$(UBSAN_GCC_FLAG_ALIGNMENT) \ |
| -D NAND_SQUASHFS_SUPPORT=$(NAND_SQUASHFS_SUPPORT) \ |
| -j build_modulepkg.log $* |
| |
| cp $(BUILD_ROOT)/FV/FVMAIN_COMPACT.Fv $(ABL_FV_IMG) |
| |
| ABL_FV_ELF: ABL_FV_IMG |
| python $(WORKSPACE)/QcomModulePkg/Tools/image_header.py $(ABL_FV_IMG) $(ABL_FV_ELF) $(LOAD_ADDRESS) elf 32 |