blob: 110bc82ba53889bedd4ffa1a3693fc5baf9ab6f3 [file] [log] [blame]
Sridhar Parasuramfedf9ac2015-11-03 16:20:50 -08001UEFI_TOP_DIR := .
2
3ifndef $(BOOTLOADER_OUT)
4 BOOTLOADER_OUT := .
5endif
6export $(BOOTLOADER_OUT)
7
8BUILDDIR=$(shell pwd)
Prathyush Katukojwalaeec0cc62017-08-23 12:00:14 -07009export WRAPPER := $(BUILDDIR)/clang-wrapper.py
Jeevan Shriram4d4d5e62017-06-08 16:43:07 -070010
Sridhar Parasuramfedf9ac2015-11-03 16:20:50 -080011export CLANG35_BIN := $(CLANG_BIN)
Jeevan Shriramd29e4402017-11-06 14:04:11 -080012export CLANG35_GCC_TOOLCHAIN := $(CLANG35_GCC_TOOLCHAIN)
Jeevan Shriramd5d169f2018-04-20 16:09:10 -070013export $(BOARD_BOOTLOADER_PRODUCT_NAME)
Sridhar Parasuramfedf9ac2015-11-03 16:20:50 -080014
Jeevan Shriram4d4d5e62017-06-08 16:43:07 -070015ifeq ($(TARGET_ARCHITECTURE),arm)
16export ARCHITECTURE := ARM
Jeevan Shriramd29e4402017-11-06 14:04:11 -080017export CLANG35_ARM_PREFIX := $(CLANG_PREFIX)
Jeevan Shriram4d4d5e62017-06-08 16:43:07 -070018else
19export ARCHITECTURE := AARCH64
Jeevan Shriramd29e4402017-11-06 14:04:11 -080020export CLANG35_AARCH64_PREFIX := $(CLANG_PREFIX)
Jeevan Shriram4d4d5e62017-06-08 16:43:07 -070021endif
22
Jeevan Shriramd29e4402017-11-06 14:04:11 -080023export BUILD_REPORT_DIR := $(BOOTLOADER_OUT)/build_report
24ANDROID_PRODUCT_OUT := $(BOOTLOADER_OUT)/Build
25
Sridhar Parasuramfedf9ac2015-11-03 16:20:50 -080026WORKSPACE=$(BUILDDIR)
27TARGET_TOOLS := CLANG35
28TARGET := DEBUG
29BUILD_ROOT := $(ANDROID_PRODUCT_OUT)/$(TARGET)_$(TARGET_TOOLS)
Channagoud Kadabi1ed4a152016-02-05 15:15:41 -080030EDK_TOOLS := $(BUILDDIR)/BaseTools
31EDK_TOOLS_BIN := $(EDK_TOOLS)/Source/C/bin
Sridhar Parasuramfedf9ac2015-11-03 16:20:50 -080032ABL_FV_IMG := $(BUILD_ROOT)/FV/abl.fv
33ABL_FV_ELF := $(BOOTLOADER_OUT)/../../abl.elf
lijuang4d342f62016-09-13 15:51:26 +080034SHELL:=/bin/bash
Sridhar Parasuramfedf9ac2015-11-03 16:20:50 -080035
Venkata Narendra Kumar Gutta688a1612018-04-18 17:12:50 -070036# This function is to check version compatibility, used to control features based on the compiler version. \
37Arguments should be return value, current version and supported version in order. \
38It sets return value to true if the current version is equal or greater than the supported version.
39define check_version_compatibility
40 $(eval CURR_VERSION := $(shell $(2)/clang --version |& grep -i "clang version" |& sed 's/[^0-9.]//g'))
41 $(eval CURR_VERSION_MAJOR := $(shell echo $(CURR_VERSION) |& cut -d. -f1))
42 $(eval CURR_VERSION_MINOR := $(shell echo $(CURR_VERSION) |& cut -d. -f2))
43 $(eval SUPPORTED_VERSION := $(3))
44 $(eval SUPPORTED_VERSION_MAJOR := $(shell echo $(SUPPORTED_VERSION) |& cut -d. -f1))
45 $(eval SUPPORTED_VERSION_MINOR := $(shell echo $(SUPPORTED_VERSION) |& cut -d. -f2))
46
47 ifeq ($(shell expr $(CURR_VERSION_MAJOR) \> $(SUPPORTED_VERSION_MAJOR)), 1)
48 $(1) := true
49 endif
50 ifeq ($(shell expr $(CURR_VERSION_MAJOR) \= $(SUPPORTED_VERSION_MAJOR)), 1)
51 ifeq ($(shell expr $(CURR_VERSION_MINOR) \>= $(SUPPORTED_VERSION_MINOR)), 1)
52 $(1) := true
53 endif
54 endif
55endef
56
Trilok Sonic1a2d142017-04-26 17:32:05 -070057# UEFI UBSAN Configuration
58# ENABLE_UEFI_UBSAN := true
59
60ifeq "$(ENABLE_UEFI_UBSAN)" "true"
61 UBSAN_GCC_FLAG_UNDEFINED := -fsanitize=undefined
62 UBSAN_GCC_FLAG_ALIGNMENT := -fno-sanitize=alignment
63else
64 UBSAN_GCC_FLAG_UNDEFINED :=
65 UBSAN_GCC_FLAG_ALIGNMENT :=
66endif
67
Jeevan Shriram90c404b2018-03-29 15:11:44 -070068ifeq ($(TARGET_ARCHITECTURE), arm)
Jeevan Shriram32541172017-12-02 10:19:23 -080069 LOAD_ADDRESS := 0X8FB00000
lijuang31b93db2018-09-05 19:48:22 +080070 TARGET_ARCH_ARM64 := 0
Jeevan Shriram995c2312017-10-10 14:25:00 -070071else
Jeevan Shriram32541172017-12-02 10:19:23 -080072 LOAD_ADDRESS := 0X9FA00000
lijuang31b93db2018-09-05 19:48:22 +080073 TARGET_ARCH_ARM64 := 1
Jeevan Shriram995c2312017-10-10 14:25:00 -070074endif
75
Jeevan Shriram90c404b2018-03-29 15:11:44 -070076ifeq ($(ENABLE_LE_VARIANT), true)
77 ENABLE_LE_VARIANT := 1
78else
79 ENABLE_LE_VARIANT := 0
80endif
81
lijuang65c51d52018-03-28 13:52:57 +080082ifeq "$(ABL_USE_SDLLVM)" "true"
83 SDLLVM_COMPILE_ANALYZE := --compile-and-analyze
84 SDLLVM_ANALYZE_REPORT := $(BUILD_REPORT_DIR)
85else
86 SDLLVM_COMPILE_ANALYZE :=
87 SDLLVM_ANALYZE_REPORT :=
88endif
S A Muqthyarb25e5b32018-04-26 16:02:41 +053089
90ifneq "$(INIT_BIN_LE)" ""
91 INIT_BIN := $(INIT_BIN_LE)
92else
93 INIT_BIN := \"/init\"
94endif
95
lijuang65c51d52018-03-28 13:52:57 +080096export SDLLVM_COMPILE_ANALYZE := $(SDLLVM_COMPILE_ANALYZE)
97export SDLLVM_ANALYZE_REPORT := $(SDLLVM_ANALYZE_REPORT)
98
Venkata Narendra Kumar Gutta688a1612018-04-18 17:12:50 -070099CLANG_SUPPORTS_SAFESTACK := false
100$(eval $(call check_version_compatibility, CLANG_SUPPORTS_SAFESTACK, $(CLANG_BIN), $(SAFESTACK_SUPPORTED_CLANG_VERSION)))
101
102ifeq "$(ABL_SAFESTACK)" "true"
103 ifeq "$(CLANG_SUPPORTS_SAFESTACK)" "true"
104 LLVM_ENABLE_SAFESTACK := -fsanitize=safe-stack
105 LLVM_SAFESTACK_USE_PTR := -mllvm -safestack-use-pointer-address
106 LLVM_SAFESTACK_COLORING := -mllvm -safe-stack-coloring=true
107 endif
108else
109 LLVM_ENABLE_SAFESTACK :=
110 LLVM_SAFESTACK_USE_PTR :=
111 LLVM_SAFESTACK_COLORING :=
112endif
113export LLVM_ENABLE_SAFESTACK := $(LLVM_ENABLE_SAFESTACK)
114export LLVM_SAFESTACK_USE_PTR := $(LLVM_SAFESTACK_USE_PTR)
115export LLVM_SAFESTACK_COLORING := $(LLVM_SAFESTACK_COLORING)
116
Sridhar Parasuramfedf9ac2015-11-03 16:20:50 -0800117.PHONY: all cleanall
118
119all: ABL_FV_ELF
120
121cleanall:
122 @. ./edksetup.sh BaseTools && \
Jeevan Shriram4d4d5e62017-06-08 16:43:07 -0700123 build -p $(WORKSPACE)/QcomModulePkg/QcomModulePkg.dsc -a $(ARCHITECTURE) -t $(TARGET_TOOLS) -b $(TARGET) -j build_modulepkg.log cleanall
Sridhar Parasuramfedf9ac2015-11-03 16:20:50 -0800124 rm -rf $(WORKSPACE)/QcomModulePkg/Bin64
125
Channagoud Kadabi1ed4a152016-02-05 15:15:41 -0800126EDK_TOOLS_BIN:
Sridhar Parasuramfedf9ac2015-11-03 16:20:50 -0800127 @. ./edksetup.sh BaseTools && \
Bhanuprakash Modem23720102018-09-27 21:55:40 +0530128 $(MAKE) -C $(EDK_TOOLS) $(PREBUILT_HOST_TOOLS) -j1
Channagoud Kadabi1ed4a152016-02-05 15:15:41 -0800129
130ABL_FV_IMG: EDK_TOOLS_BIN
131 @. ./edksetup.sh BaseTools && \
Jeevan Shriram995c2312017-10-10 14:25:00 -0700132 build -p $(WORKSPACE)/QcomModulePkg/QcomModulePkg.dsc \
133 -a $(ARCHITECTURE) \
134 -t $(TARGET_TOOLS) \
135 -b $(TARGET) \
136 -D ABL_OUT_DIR=$(ANDROID_PRODUCT_OUT) \
Mukesh Ojha8dc65f52018-03-27 00:59:30 +0530137 -D BUILD_SYSTEM_ROOT_IMAGE=$(BUILD_SYSTEM_ROOT_IMAGE) \
Jeevan Shriram995c2312017-10-10 14:25:00 -0700138 -D VERIFIED_BOOT=$(VERIFIED_BOOT) \
139 -D VERIFIED_BOOT_2=$(VERIFIED_BOOT_2) \
Zhen Kongdd5c5e32017-07-05 13:44:45 -0700140 -D VERIFIED_BOOT_LE=$(VERIFIED_BOOT_LE) \
vijay.rayabarapu18a64042018-08-08 02:23:27 +0530141 -D VERITY_LE=$(VERITY_LE) \
lijuang31b93db2018-09-05 19:48:22 +0800142 -D TARGET_ARCH_ARM64=$(TARGET_ARCH_ARM64) \
Jeevan Shriram995c2312017-10-10 14:25:00 -0700143 -D USER_BUILD_VARIANT=$(USER_BUILD_VARIANT) \
Mukesh Ojhad29676a2018-04-10 17:37:56 +0530144 -D DISABLE_PARALLEL_DOWNLOAD_FLASH=$(DISABLE_PARALLEL_DOWNLOAD_FLASH) \
Jeevan Shriram995c2312017-10-10 14:25:00 -0700145 -D ENABLE_LE_VARIANT=$(ENABLE_LE_VARIANT) \
S A Muqthyarb25e5b32018-04-26 16:02:41 +0530146 -D INIT_BIN=$(INIT_BIN) \
Jeevan Shriram995c2312017-10-10 14:25:00 -0700147 -D UBSAN_UEFI_GCC_FLAG_UNDEFINED=$(UBSAN_GCC_FLAG_UNDEFINED) \
148 -D UBSAN_UEFI_GCC_FLAG_ALIGNMENT=$(UBSAN_GCC_FLAG_ALIGNMENT) \
149 -j build_modulepkg.log $*
150
Sridhar Parasuramfedf9ac2015-11-03 16:20:50 -0800151 cp $(BUILD_ROOT)/FV/FVMAIN_COMPACT.Fv $(ABL_FV_IMG)
152
153ABL_FV_ELF: ABL_FV_IMG
Jeevan Shriram19a53812017-06-14 15:39:48 -0700154 python $(WORKSPACE)/QcomModulePkg/Tools/image_header.py $(ABL_FV_IMG) $(ABL_FV_ELF) $(LOAD_ADDRESS) elf 32