# # Copyright (c) 2013, ARM Limited. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # Redistributions of source code must retain the above copyright notice, this # list of conditions and the following disclaimer. # # Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # # Neither the name of ARM nor the names of its contributors may be used # to endorse or promote products derived from this software without specific # prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # # Decrease the verbosity of the make script # can be made verbose by passing V=1 at the make command line ifdef V KBUILD_VERBOSE = $(V) else KBUILD_VERBOSE = 0 endif ifeq "$(KBUILD_VERBOSE)" "0" Q=@ else Q= endif DEBUG ?= 0 BL_COMMON_OBJS = misc_helpers.o cache_helpers.o tlb_helpers.o \ semihosting_call.o mmio.o pl011.o semihosting.o \ std.o bl_common.o platform_helpers.o sysreg_helpers.o ARCH := aarch64 all: $(patsubst %,%.bin,bl1 bl2 bl31) ; #$(info $(filter bl2.%, $(MAKECMDGOALS))) #$(info $(filter bl1.%, $(MAKECMDGOALS))) #$(info $(MAKECMDGOALS)) $(info Including bl1.mk) include bl1/bl1.mk $(info Including bl2.mk) include bl2/bl2.mk $(info Including bl31.mk) include bl31/bl31.mk OBJS += $(BL_COMMON_OBJS) INCLUDES += -Ilib/include/ -Iinclude/aarch64/ -Iinclude/ \ -Idrivers/arm/interconnect/cci-400/ \ -Idrivers/arm/peripherals/pl011/ \ -Iplat/fvp -Idrivers/power \ -Iarch/system/gic -Icommon/psci ASFLAGS += -D__ASSEMBLY__ $(INCLUDES) CFLAGS := -Wall -std=c99 -c -Os -DDEBUG=$(DEBUG) $(INCLUDES) ${CFLAGS} LDFLAGS += -O1 BL1_LDFLAGS := -Map=$(BL1_MAPFILE) --script $(BL1_LINKERFILE) --entry=$(BL1_ENTRY_POINT) BL2_LDFLAGS := -Map=$(BL2_MAPFILE) --script $(BL2_LINKERFILE) --entry=$(BL2_ENTRY_POINT) BL31_LDFLAGS := -Map=$(BL31_MAPFILE) --script $(BL31_LINKERFILE) --entry=$(BL31_ENTRY_POINT) vpath %.ld.S bl1:bl2:bl31 vpath %.c bl1:bl2:bl31 vpath %.c bl1/${ARCH}:bl2/${ARCH}:bl31/${ARCH} vpath %.S bl1/${ARCH}:bl2/${ARCH}:bl31/${ARCH} ifneq ($(DEBUG), 0) #CFLAGS += -g -O0 CFLAGS += -g # -save-temps -fverbose-asm ASFLAGS += -g -Wa,--gdwarf-2 endif CC = $(CROSS_COMPILE)gcc CPP = $(CROSS_COMPILE)cpp AS = $(CROSS_COMPILE)gcc AR = $(CROSS_COMPILE)ar LD = $(CROSS_COMPILE)ld OC = $(CROSS_COMPILE)objcopy OD = $(CROSS_COMPILE)objdump NM = $(CROSS_COMPILE)nm PP = $(CROSS_COMPILE)gcc -E $(CFLAGS) distclean: clean @echo " DISTCLEAN" $(Q)rm -rf *.zi $(Q)rm -rf *.dump $(Q)rm -rf *.bin $(Q)rm -f *.axf $(Q)rm -f *.i *.s $(Q)rm -f *.ar $(Q)rm -f *.map $(Q)rm -f *.scf $(Q)rm -f *.txt $(Q)rm -f *.elf $(Q)rm -rf *.bin $(Q)rm -f $(LISTFILE) clean: @echo " CLEAN" $(Q)rm -f *.o *.ld .PHONY: dump dump: @echo " OBJDUMP" $(OD) -d bl1.elf > bl1.dump $(OD) -d bl2.elf > bl2.dump $(OD) -d bl31.elf > bl31.dump %.o: %.S @echo " AS $<" $(Q)$(AS) $(ASFLAGS) -c $< -o $@ %.o: %.c @echo " CC $<" $(Q)$(CC) $(CFLAGS) -c $< -o $@ %.ld: %.ld.S @echo " LDS $<" $(Q)$(AS) $(ASFLAGS) -P -E $< -o $@ bl1.elf: $(OBJS) $(BL1_OBJS) bl1.ld @echo " LD $@" $(Q)$(LD) -o $@ $(LDFLAGS) $(BL1_LDFLAGS) $(OBJS) $(BL1_OBJS) @echo "Built $@ successfully" @echo bl2.elf: $(OBJS) $(BL2_OBJS) bl2.ld @echo " LD $@" $(Q)$(LD) -o $@ $(LDFLAGS) $(BL2_LDFLAGS) $(OBJS) $(BL2_OBJS) @echo "Built $@ successfully" @echo bl31.elf: $(OBJS) $(BL31_OBJS) bl31.ld @echo " LD $@" $(Q)$(LD) -o $@ $(LDFLAGS) $(BL31_LDFLAGS) $(OBJS) $(BL31_OBJS) @echo "Built $@ successfully" @echo %.bin: %.elf $(OC) -O binary $< $@