| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329 |
- ifeq ($(MAKECMDGOALS),spotless)
- spotless:
- rm -rf build-*
- else
- -include local.mk
- include make/macros.mk
- # If one of our goals (from the commandline) happens to have a
- # matching project/goal.mk, then we should re-invoke make with
- # that project name specified...
- project-name := $(firstword $(MAKECMDGOALS))
- ifneq ($(project-name),)
- ifneq ($(wildcard project/$(project-name).mk),)
- do-nothing := 1
- $(MAKECMDGOALS) _all: make-make
- make-make:
- @PROJECT=$(project-name) $(MAKE) $(filter-out $(project-name), $(MAKECMDGOALS))
- endif
- endif
- ifeq ($(do-nothing),)
- ifeq ($(PROJECT),)
- $(error No project specified. Use "make projectname" or put "PROJECT := projectname" in local.mk)
- endif
- DEBUG ?= 0
- HOST_OS ?= $(shell uname | tr '[A-Z]' '[a-z]')
- ifndef BOOTLOADER_OUT
- BOOTLOADER_OUT := .
- endif
- LK_TOP_DIR:= .
- BUILDDIR := $(BOOTLOADER_OUT)/build-$(PROJECT)
- OUTBIN := $(BUILDDIR)/lk.img
- OUTELF := $(BUILDDIR)/lk
- CONFIGHEADER := $(BUILDDIR)/config.h
- VERSIONHEADER := $(BUILDDIR)/version.h
- #Initialize the command-line flag ENABLE_TRUSTZONE. Value for flag passed in at command-line will take precedence
- ENABLE_TRUSTZONE := 0
- ifeq ($(ENABLE_TRUSTZONE),1)
- INPUT_TZ_BIN := tzbsp/tzbsp.bin
- OUTPUT_TZ_BIN := $(BUILDDIR)/tzbsp_bin.o
- endif
- INCLUDES := -I$(BUILDDIR) -Iinclude
- CFLAGS := -O2 -g -gdwarf-2 -fno-builtin -finline -W -Wall -Wno-multichar -Wno-unused-parameter -Wno-unused-function -include $(CONFIGHEADER) -include $(VERSIONHEADER)
- #CFLAGS += -Werror
- ifeq ($(EMMC_BOOT),1)
- CFLAGS += -D_EMMC_BOOT=1
- endif
- ifeq ($(SIGNED_KERNEL),1)
- CFLAGS += -D_SIGNED_KERNEL=1
- endif
- ###############################################################################
- # Turn on stack-protector for userdebug and eng load.
- ###############################################################################
- ifneq ($(filter user, $(TARGET_BUILD_VARIANT)),)
- # Do nothing!
- else ifneq ($(filter userdebug, $(TARGET_BUILD_VARIANT)),)
- CFLAGS += -fstack-protector-strong
- else ifneq ($(filter eng, $(TARGET_BUILD_VARIANT)),)
- CFLAGS += -fstack-protector-strong
- endif
- # When the host arch is ARM, ensure stack protection code is not emitted since
- # it's not supported by the bootloader's libc
- #ifneq ($(shell uname -m | grep "arm.*"),)
- # CFLAGS += -fno-stack-protector
- #endif
- CPPFLAGS := -fno-exceptions -fno-rtti -fno-threadsafe-statics
- #CPPFLAGS += -Weffc++
- ASMFLAGS := -DASSEMBLY
- LDFLAGS :=
- CFLAGS += -ffunction-sections -fdata-sections
- LDFLAGS += -gc-sections
- # top level rule
- all:: $(OUTBIN) $(OUTELF).lst $(OUTELF).debug.lst $(OUTELF).sym $(OUTELF).size
- # the following three object lists are identical except for the ordering
- # which is bootobjs, kobjs, objs
- BOOTOBJS :=
- OBJS :=
- # a linker script needs to be declared in one of the project/target/platform files
- LINKER_SCRIPT :=
- # anything you add here will be deleted in make clean
- GENERATED := $(CONFIGHEADER)
- GENERATED += $(VERSIONHEADER)
- # anything added to DEFINES will be put into $(BUILDDIR)/config.h
- DEFINES := LK=1
- # Anything added to SRCDEPS will become a dependency of every source file in the system.
- # Useful for header files that may be included by one or more source files.
- SRCDEPS := $(CONFIGHEADER)
- SRCDEPS += $(VERSIONHEADER)
- # these need to be filled out by the project/target/platform rules.mk files
- TARGET :=
- PLATFORM :=
- ARCH :=
- MACH_TYPE :=
- ALLMODULES :=
- MODULES :=
- # any rules you put here will also be built by the system before considered being complete
- EXTRA_BUILDDEPS :=
- # any rules you put here will be depended on in clean builds
- EXTRA_CLEANDEPS :=
- DRVGEN_OUT := $(BUILDDIR)
- PTGEN_OUT := $(BOOTLOADER_OUT)
- include project/$(PROJECT).mk
- include make/rat_config.mk
- include target/$(TARGET)/rules.mk
- include dev/rules.mk
- include platform/$(PLATFORM)/rules.mk
- ifeq ($(MTK_EMMC_SUPPORT), yes)
- ifneq ($(filter MTK_NEW_COMBO_EMMC_SUPPORT, $(strip $(DEFINES))),)
- DEFINES += PART_DEV_API_V2
- #72/82 is old combo, use V1.
- else
- DEFINES += PART_DEV_API_V1
- endif
- else ifeq ($(MTK_UFS_SUPPORT), yes)
- DEFINES += PART_DEV_API_V2
- #nand is only used for mt6580 now, 80 also use V2.
- else ifeq ($(MTK_NAND_UBIFS_SUPPORT), yes)
- DEFINES += PART_DEV_API_V2
- else
- DEFINES += PART_DEV_API_V2
- endif
- ifneq ($(USE_DTB_NO_DWS),yes)
- $(info **************** Use DWS ****************)
- -include scripts/drvgen/drvgen.mk
- else
- $(info **************** Use DTB ****************)
- endif
- -include scripts/ptgen/$(PLATFORM)/ptgen.mk
- include arch/$(ARCH)/rules.mk
- include platform/pal/rules.mk
- include platform/common/rules.mk
- include platform/rules.mk
- include target/rules.mk
- include kernel/rules.mk
- include app/rules.mk
- # recursively include any modules in the MODULE variable, leaving a trail of included
- # modules in the ALLMODULES list
- include make/module.mk
- # build internal repo(source not release to customer)
- include make/build_nonrelease.mk
- # any extra top level build dependencies that someone declared
- all:: $(EXTRA_BUILDDEPS)
- ALLOBJS := \
- $(BOOTOBJS) \
- $(OBJS)
- # add some automatic configuration defines
- ifeq ($(findstring MACH_TYPE, $(strip $(DEFINES))),)
- DEFINES += MACH_TYPE=$(shell echo $(MACH_TYPE) | tr -dc '0-9')
- endif
- DEFINES += \
- BOARD=$(PROJECT) \
- PROJECT_$(PROJECT)=1 \
- TARGET_$(TARGET)=1 \
- PLATFORM_$(PLATFORM)=1 \
- ARCH_$(ARCH)=1 \
- MACH_TYPE_$(MACH_TYPE)=1 \
- $(addsuffix =1,$(addprefix WITH_,$(ALLMODULES)))
- ifeq ($(USE_DTB_NO_DWS),yes)
- DEFINES += USE_DTB_NO_DWS
- endif
- ifeq ($(MTK_EMMC_SUPPORT),yes)
- DEFINES += MTK_EMMC_SUPPORT
- ifeq ($(MTK_MMC_COMBO_DRV),yes)
- DEFINES += MTK_MMC_COMBO_DRV
- endif
- endif
- ifeq ($(MTK_UFS_SUPPORT),yes)
- DEFINES += MTK_UFS_SUPPORT
- endif
- ifeq ($(MNTL_SUPPORT),yes)
- DEFINES += MNTL_SUPPORT
- ifeq ($(MTK_TLC_NAND_SUPPORT),yes)
- DEFINES += MTK_TLC_NAND_SUPPORT
- endif
- ifeq ($(MTK_MMC_COMBO_DRV),yes)
- DEFINES += MTK_MMC_COMBO_DRV
- endif
- endif
- ifeq ($(MTK_UFS_OTP),yes)
- DEFINES += MTK_UFS_OTP
- endif
- ifeq ($(MTK_SECURITY_SW_SUPPORT),yes)
- DEFINES += MTK_SECURITY_SW_SUPPORT
- endif
- ifeq ($(MTK_VERIFIED_BOOT_SUPPORT),yes)
- DEFINES += MTK_VERIFIED_BOOT_SUPPORT
- endif
- ifeq ($(CUSTOM_LK_USB_UNIQUE_SERIAL),yes)
- CFLAGS += -DCONFIG_MTK_USB_UNIQUE_SERIAL
- endif
- # debug build?
- ifneq ($(DEBUG),)
- DEFINES += \
- DEBUG=$(DEBUG)
- endif
- ALLOBJS := $(addprefix $(BUILDDIR)/,$(ALLOBJS))
- ALLOBJS += $(NON_ROBJS)
- DEPS := $(ALLOBJS:%o=%d)
- INCLUDEDEPS := $(filter-out $(DEPS),$(MAKEFILE_LIST))
- SRCDEPS += $(INCLUDEDEPS) make/build.mk arch/$(ARCH)/compile.mk
- SRCDEPS += $(EMIGEN_FILE_LIST)
- SRCDEPS += $(DRVGEN_FILE_LIST)
- SRCDEPS += $(PTGEN_FILE_LIST)
- SRCDEPS += $(LOGO_IMAGE)
- # default to no ccache
- CCACHE ?=
- TOOLCHAIN_PREFIX =gcc/bin/arm-linux-androideabi-
- CC := $(CCACHE) $(TOOLCHAIN_PREFIX)gcc
- #LD := $(TOOLCHAIN_PREFIX)ld
- LD := $(TOOLCHAIN_PREFIX)ld.bfd
- OBJDUMP := $(TOOLCHAIN_PREFIX)objdump
- OBJCOPY := $(TOOLCHAIN_PREFIX)objcopy
- CPPFILT := $(TOOLCHAIN_PREFIX)c++filt
- SIZE := $(TOOLCHAIN_PREFIX)size
- NM := $(TOOLCHAIN_PREFIX)nm
- # comment out or override if you want to see the full output of each command
- NOECHO ?= @
- # the logic to compile and link stuff is in here
- include make/build.mk
- clean: $(EXTRA_CLEANDEPS)
- rm -f $(ALLOBJS) $(DEPS) $(GENERATED) $(OUTBIN) $(OUTELF) $(OUTELF).lst
- install: all
- scp $(OUTBIN) 192.168.0.4:/tftproot
- # generate a config.h file with all of the DEFINES laid out in #define format
- configheader:
- $(CONFIGHEADER): configheader
- @$(MKDIR)
- @echo generating $@
- @rm -f $(CONFIGHEADER).tmp; \
- echo \#ifndef __CONFIG_H > $(CONFIGHEADER).tmp; \
- echo \#define __CONFIG_H >> $(CONFIGHEADER).tmp; \
- for d in `echo $(DEFINES) | tr [:lower:] [:upper:]`; do \
- echo "#define $$d" | sed "s/=/\ /g;s/-/_/g;s/\//_/g" >> $(CONFIGHEADER).tmp; \
- done; \
- echo \#endif >> $(CONFIGHEADER).tmp; \
- if [ -f "$(CONFIGHEADER)" ]; then \
- if cmp "$(CONFIGHEADER).tmp" "$(CONFIGHEADER)"; then \
- rm -f $(CONFIGHEADER).tmp; \
- else \
- mv $(CONFIGHEADER).tmp $(CONFIGHEADER); \
- fi \
- else \
- mv $(CONFIGHEADER).tmp $(CONFIGHEADER); \
- fi
- LAST_COMMIT_HASH := $(shell git log -1 --pretty=format:%h)
- LAST_COMMIT_DATE := $(shell git log -1 --date=format:'%Y%m%d%H%M%S' --pretty=format:"%cd")
- BUILD_DATE := $(shell date +'%Y%m%d%H%M%S')
- $(VERSIONHEADER): versionheader
- @$(MKDIR)
- @echo generating $@
- @rm -f $(VERSIONHEADER).tmp; \
- echo \#ifndef __VERSION_H > $(VERSIONHEADER).tmp; \
- echo \#define __VERSION_H >> $(VERSIONHEADER).tmp; \
- echo "/* LK_VER_TAG = <PROJECT>-<LAST_COMMIT_HASH>-<LAST_COMMIT_DATE>-<BUILD_DATE> */" >> $(VERSIONHEADER).tmp; \
- echo "#define LK_VER_TAG \"$(PROJECT)-$(LAST_COMMIT_HASH)-$(LAST_COMMIT_DATE)-$(BUILD_DATE)\"" >> $(VERSIONHEADER).tmp; \
- echo "#define PROJECT \"$(PROJECT)\"" >> $(VERSIONHEADER).tmp; \
- echo \#endif >> $(VERSIONHEADER).tmp; \
- if [ -f "$(VERSIONHEADER)" ]; then \
- if cmp "$(VERSIONHEADER).tmp" "$(VERSIONHEADER)"; then \
- rm -f $(VERSIONHEADER).tmp; \
- else \
- mv $(VERSIONHEADER).tmp $(VERSIONHEADER); \
- fi \
- else \
- mv $(VERSIONHEADER).tmp $(VERSIONHEADER); \
- fi
- # Empty rule for the .d files. The above rules will build .d files as a side
- # effect. Only works on gcc 3.x and above, however.
- %.d:
- ifeq ($(filter $(MAKECMDGOALS), clean), )
- -include $(DEPS)
- endif
- .PHONY: configheader versionheader
- endif
- endif # make spotless
|