Newer
Older
arm-trusted-firmware / Makefile
@Achin Gupta Achin Gupta on 25 Oct 2013 4 KB ARMv8 Trusted Firmware release v0.2
#
# 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 $< $@