xref: /rk3399_ARM-atf/plat/rockchip/rk3399/drivers/m0/Makefile (revision 8382e17c4c6bffd15119dfce1ee4372e3c1a7890)
1*8382e17cSCaesar Wang#
2*8382e17cSCaesar Wang# Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
3*8382e17cSCaesar Wang#
4*8382e17cSCaesar Wang# Redistribution and use in source and binary forms, with or without
5*8382e17cSCaesar Wang# modification, are permitted provided that the following conditions are met:
6*8382e17cSCaesar Wang#
7*8382e17cSCaesar Wang# Redistributions of source code must retain the above copyright notice, this
8*8382e17cSCaesar Wang# list of conditions and the following disclaimer.
9*8382e17cSCaesar Wang#
10*8382e17cSCaesar Wang# Redistributions in binary form must reproduce the above copyright notice,
11*8382e17cSCaesar Wang# this list of conditions and the following disclaimer in the documentation
12*8382e17cSCaesar Wang# and/or other materials provided with the distribution.
13*8382e17cSCaesar Wang#
14*8382e17cSCaesar Wang# Neither the name of ARM nor the names of its contributors may be used
15*8382e17cSCaesar Wang# to endorse or promote products derived from this software without specific
16*8382e17cSCaesar Wang# prior written permission.
17*8382e17cSCaesar Wang#
18*8382e17cSCaesar Wang# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19*8382e17cSCaesar Wang# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20*8382e17cSCaesar Wang# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21*8382e17cSCaesar Wang# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22*8382e17cSCaesar Wang# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23*8382e17cSCaesar Wang# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24*8382e17cSCaesar Wang# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25*8382e17cSCaesar Wang# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26*8382e17cSCaesar Wang# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27*8382e17cSCaesar Wang# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28*8382e17cSCaesar Wang# POSSIBILITY OF SUCH DAMAGE.
29*8382e17cSCaesar Wang#
30*8382e17cSCaesar Wang
31*8382e17cSCaesar Wang# Cross Compile
32*8382e17cSCaesar WangM0_CROSS_COMPILE ?= arm-none-eabi-
33*8382e17cSCaesar Wang
34*8382e17cSCaesar Wang# Build architecture
35*8382e17cSCaesar WangARCH		:= cortex-m0
36*8382e17cSCaesar Wang
37*8382e17cSCaesar Wang# Build platform
38*8382e17cSCaesar WangPLAT_M0		?= rk3399m0
39*8382e17cSCaesar Wang
40*8382e17cSCaesar Wangifeq (${V},0)
41*8382e17cSCaesar Wang	Q=@
42*8382e17cSCaesar Wang	CHECKCODE_ARGS	+= --no-summary --terse
43*8382e17cSCaesar Wangelse
44*8382e17cSCaesar Wang	Q=
45*8382e17cSCaesar Wangendif
46*8382e17cSCaesar Wangexport Q
47*8382e17cSCaesar Wang
48*8382e17cSCaesar Wang# All PHONY definition
49*8382e17cSCaesar Wang.PHONY: all clean distclean ${ARCH}
50*8382e17cSCaesar Wangall: ${ARCH}
51*8382e17cSCaesar Wang
52*8382e17cSCaesar Wang.SUFFIXES:
53*8382e17cSCaesar Wang
54*8382e17cSCaesar WangINCLUDES		+= -Iinclude/
55*8382e17cSCaesar Wang
56*8382e17cSCaesar Wang# NOTE: Add C source files here
57*8382e17cSCaesar WangC_SOURCES		:= src/startup.c \
58*8382e17cSCaesar Wang			   src/main.c
59*8382e17cSCaesar Wang
60*8382e17cSCaesar Wang# Flags definition
61*8382e17cSCaesar WangCFLAGS			:= -g
62*8382e17cSCaesar WangASFLAGS			:= -g -Wa,--gdwarf-2
63*8382e17cSCaesar Wang
64*8382e17cSCaesar WangASFLAGS			+= -mcpu=$(ARCH) -mthumb -Wall -ffunction-sections -O3
65*8382e17cSCaesar WangCFLAGS			+= -mcpu=$(ARCH) -mthumb -Wall -ffunction-sections -O3
66*8382e17cSCaesar Wang
67*8382e17cSCaesar WangLDFLAGS			:= -mcpu=$(ARCH) -mthumb -g -nostartfiles -O3
68*8382e17cSCaesar WangLDFLAGS			+= -Wl,--gc-sections -Wl,--build-id=none
69*8382e17cSCaesar Wang
70*8382e17cSCaesar Wang# Cross tool
71*8382e17cSCaesar WangCC			:= ${M0_CROSS_COMPILE}gcc
72*8382e17cSCaesar WangCPP			:= ${M0_CROSS_COMPILE}cpp
73*8382e17cSCaesar WangAS			:= ${M0_CROSS_COMPILE}gcc
74*8382e17cSCaesar WangAR			:= ${M0_CROSS_COMPILE}ar
75*8382e17cSCaesar WangLD			:= ${M0_CROSS_COMPILE}ld
76*8382e17cSCaesar WangOC			:= ${M0_CROSS_COMPILE}objcopy
77*8382e17cSCaesar WangOD			:= ${M0_CROSS_COMPILE}objdump
78*8382e17cSCaesar WangNM			:= ${M0_CROSS_COMPILE}nm
79*8382e17cSCaesar WangPP			:= ${M0_CROSS_COMPILE}gcc -E ${CFLAGS}
80*8382e17cSCaesar Wang
81*8382e17cSCaesar Wang# NOTE: The line continuation '\' is required in the next define otherwise we
82*8382e17cSCaesar Wang# end up with a line-feed characer at the end of the last c filename.
83*8382e17cSCaesar Wang# Also bare this issue in mind if extending the list of supported filetypes.
84*8382e17cSCaesar Wangdefine SOURCES_TO_OBJS
85*8382e17cSCaesar Wang	$(notdir $(patsubst %.c,%.o,$(filter %.c,$(1)))) \
86*8382e17cSCaesar Wang	$(notdir $(patsubst %.S,%.o,$(filter %.S,$(1))))
87*8382e17cSCaesar Wangendef
88*8382e17cSCaesar Wang
89*8382e17cSCaesar WangBUILD_DIR		:= ${BUILD_PLAT}/obj
90*8382e17cSCaesar WangBIN_DIR 		:= ${BUILD_PLAT}/bin
91*8382e17cSCaesar WangSOURCES 		:= $(C_SOURCES)
92*8382e17cSCaesar WangOBJS 			:= $(addprefix $(BUILD_DIR)/,$(call SOURCES_TO_OBJS,$(SOURCES)))
93*8382e17cSCaesar WangLINKERFILE		:= src/rk3399m0.ld
94*8382e17cSCaesar WangMAPFILE			:= $(BIN_DIR)/$(PLAT_M0).map
95*8382e17cSCaesar WangELF 			:= $(BIN_DIR)/$(PLAT_M0).elf
96*8382e17cSCaesar WangBIN 			:= $(BIN_DIR)/$(PLAT_M0).bin
97*8382e17cSCaesar Wang
98*8382e17cSCaesar Wang# Function definition related compilation
99*8382e17cSCaesar Wangdefine MAKE_C
100*8382e17cSCaesar Wang$(eval OBJ := $(1)/$(patsubst %.c,%.o,$(notdir $(2))))
101*8382e17cSCaesar Wang
102*8382e17cSCaesar Wang$(OBJ) : $(2)
103*8382e17cSCaesar Wang	@echo "  CC      $$<"
104*8382e17cSCaesar Wang	$$(Q)$$(CC) $$(CFLAGS) $$(INCLUDES) -c $$< -o $$@
105*8382e17cSCaesar Wangendef
106*8382e17cSCaesar Wang
107*8382e17cSCaesar Wangdefine MAKE_S
108*8382e17cSCaesar Wang$(eval OBJ := $(1)/$(patsubst %.S,%.o,$(notdir $(2))))
109*8382e17cSCaesar Wang
110*8382e17cSCaesar Wang$(OBJ) : $(2)
111*8382e17cSCaesar Wang	@echo "  AS      $$<"
112*8382e17cSCaesar Wang	$$(Q)$$(AS) $$(ASFLAGS) -c $$< -o $$@
113*8382e17cSCaesar Wangendef
114*8382e17cSCaesar Wang
115*8382e17cSCaesar Wangdefine MAKE_OBJS
116*8382e17cSCaesar Wang	$(eval C_OBJS := $(filter %.c,$(2)))
117*8382e17cSCaesar Wang	$(eval REMAIN := $(filter-out %.c,$(2)))
118*8382e17cSCaesar Wang	$(eval $(foreach obj,$(C_OBJS),$(call MAKE_C,$(1),$(obj),$(3))))
119*8382e17cSCaesar Wang
120*8382e17cSCaesar Wang	$(eval S_OBJS := $(filter %.S,$(REMAIN)))
121*8382e17cSCaesar Wang	$(eval REMAIN := $(filter-out %.S,$(REMAIN)))
122*8382e17cSCaesar Wang	$(eval $(foreach obj,$(S_OBJS),$(call MAKE_S,$(1),$(obj),$(3))))
123*8382e17cSCaesar Wang
124*8382e17cSCaesar Wang	$(and $(REMAIN),$(error Unexpected source files present: $(REMAIN)))
125*8382e17cSCaesar Wangendef
126*8382e17cSCaesar Wang
127*8382e17cSCaesar Wang$(BIN_DIR) :
128*8382e17cSCaesar Wang	$(Q)mkdir -p "$@"
129*8382e17cSCaesar Wang
130*8382e17cSCaesar Wang$(BUILD_DIR) : $(BIN_DIR)
131*8382e17cSCaesar Wang	$(Q)mkdir -p "$@"
132*8382e17cSCaesar Wang
133*8382e17cSCaesar Wang$(ELF) : $(OBJS) $(LINKERFILE)
134*8382e17cSCaesar Wang	@echo "  LD      $@"
135*8382e17cSCaesar Wang	$(Q)$(CC) -o $@ $(LDFLAGS) -Wl,-Map=$(MAPFILE) -Wl,-T$(LINKERFILE) \
136*8382e17cSCaesar Wang		$(OBJS)
137*8382e17cSCaesar Wang
138*8382e17cSCaesar Wang$(BIN) : $(ELF)
139*8382e17cSCaesar Wang	@echo "  BIN     $@"
140*8382e17cSCaesar Wang	$(Q)$(OC) -O binary $< $@
141*8382e17cSCaesar Wang
142*8382e17cSCaesar Wang.PHONY : ${ARCH}
143*8382e17cSCaesar Wang${ARCH} : $(BUILD_DIR) $(BIN)
144*8382e17cSCaesar Wang
145*8382e17cSCaesar Wang$(eval $(call MAKE_OBJS,$(BUILD_DIR),$(SOURCES),$(1)))
146*8382e17cSCaesar Wang
147*8382e17cSCaesar Wang# Other common compilation entries
148*8382e17cSCaesar Wangclean:
149*8382e17cSCaesar Wang	@echo "  CLEAN"
150*8382e17cSCaesar Wang	${Q}rm -rf ${BUILD_BASE}/${PLAT_M0}
151*8382e17cSCaesar Wang	${Q}rm -rf ${VER_BIN_DIR}/$(PLAT_M0)*
152*8382e17cSCaesar Wang
153*8382e17cSCaesar Wangdistclean:
154*8382e17cSCaesar Wang	@echo "  DISTCLEAN"
155*8382e17cSCaesar Wang	${Q}rm -rf ${BUILD_BASE}/${PLAT_M0}
156*8382e17cSCaesar Wang	${Q}rm -rf ${VER_BIN_DIR}/$(PLAT_M0)*
157