1*91f16700Schasinglulu# 2*91f16700Schasinglulu# Copyright (c) 2016, ARM Limited and Contributors. All rights reserved. 3*91f16700Schasinglulu# 4*91f16700Schasinglulu# SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu# 6*91f16700Schasinglulu 7*91f16700Schasinglulu# Cross Compile 8*91f16700SchasingluluM0_CROSS_COMPILE ?= arm-none-eabi- 9*91f16700Schasinglulu 10*91f16700Schasinglulu# Build architecture 11*91f16700SchasingluluARCH := cortex-m0 12*91f16700Schasinglulu 13*91f16700Schasinglulu# Build platform 14*91f16700SchasingluluPLAT_M0 ?= rk3399m0 15*91f16700SchasingluluPLAT_M0_PMU ?= rk3399m0pmu 16*91f16700Schasinglulu 17*91f16700Schasingluluifeq (${V},0) 18*91f16700Schasinglulu Q=@ 19*91f16700Schasingluluelse 20*91f16700Schasinglulu Q= 21*91f16700Schasingluluendif 22*91f16700Schasingluluexport Q 23*91f16700Schasinglulu 24*91f16700Schasinglulu.SUFFIXES: 25*91f16700Schasinglulu 26*91f16700SchasingluluINCLUDES += -Iinclude/ \ 27*91f16700Schasinglulu -I../../include/shared/ 28*91f16700Schasinglulu 29*91f16700Schasinglulu# NOTE: Add C source files here 30*91f16700SchasingluluC_SOURCES_COMMON := src/startup.c 31*91f16700SchasingluluC_SOURCES := src/dram.c \ 32*91f16700Schasinglulu src/stopwatch.c 33*91f16700SchasingluluC_SOURCES_PMU := src/suspend.c 34*91f16700Schasinglulu 35*91f16700Schasinglulu# Flags definition 36*91f16700SchasingluluCOMMON_FLAGS := -g -mcpu=$(ARCH) -mthumb -Wall -O3 -nostdlib -mfloat-abi=soft 37*91f16700SchasingluluCFLAGS := -ffunction-sections -fdata-sections -fomit-frame-pointer -fno-common 38*91f16700SchasingluluASFLAGS := -Wa,--gdwarf-2 39*91f16700SchasingluluLDFLAGS := -Wl,--gc-sections -Wl,--build-id=none 40*91f16700Schasinglulu 41*91f16700Schasinglulu# Cross tool 42*91f16700SchasingluluCC := ${M0_CROSS_COMPILE}gcc 43*91f16700SchasingluluCPP := ${M0_CROSS_COMPILE}cpp 44*91f16700SchasingluluAR := ${M0_CROSS_COMPILE}ar 45*91f16700SchasingluluOC := ${M0_CROSS_COMPILE}objcopy 46*91f16700SchasingluluOD := ${M0_CROSS_COMPILE}objdump 47*91f16700SchasingluluNM := ${M0_CROSS_COMPILE}nm 48*91f16700Schasinglulu 49*91f16700Schasinglulu# NOTE: The line continuation '\' is required in the next define otherwise we 50*91f16700Schasinglulu# end up with a line-feed characer at the end of the last c filename. 51*91f16700Schasinglulu# Also bare this issue in mind if extending the list of supported filetypes. 52*91f16700Schasingluludefine SOURCES_TO_OBJS 53*91f16700Schasinglulu $(notdir $(patsubst %.c,%.o,$(filter %.c,$(1)))) \ 54*91f16700Schasinglulu $(notdir $(patsubst %.S,%.o,$(filter %.S,$(1)))) 55*91f16700Schasingluluendef 56*91f16700Schasinglulu 57*91f16700SchasingluluSOURCES_COMMON := $(C_SOURCES_COMMON) 58*91f16700SchasingluluSOURCES := $(C_SOURCES) 59*91f16700SchasingluluSOURCES_PMU := $(C_SOURCES_PMU) 60*91f16700SchasingluluOBJS_COMMON := $(addprefix $(BUILD)/,$(call SOURCES_TO_OBJS,$(SOURCES_COMMON))) 61*91f16700SchasingluluOBJS := $(addprefix $(BUILD)/,$(call SOURCES_TO_OBJS,$(SOURCES))) 62*91f16700SchasingluluOBJS_PMU := $(addprefix $(BUILD)/,$(call SOURCES_TO_OBJS,$(SOURCES_PMU))) 63*91f16700SchasingluluLINKERFILE := $(BUILD)/$(PLAT_M0).ld 64*91f16700SchasingluluMAPFILE := $(BUILD)/$(PLAT_M0).map 65*91f16700SchasingluluMAPFILE_PMU := $(BUILD)/$(PLAT_M0_PMU).map 66*91f16700SchasingluluELF := $(BUILD)/$(PLAT_M0).elf 67*91f16700SchasingluluELF_PMU := $(BUILD)/$(PLAT_M0_PMU).elf 68*91f16700SchasingluluBIN := $(BUILD)/$(PLAT_M0).bin 69*91f16700SchasingluluBIN_PMU := $(BUILD)/$(PLAT_M0_PMU).bin 70*91f16700SchasingluluLINKERFILE_SRC := src/$(PLAT_M0).ld.S 71*91f16700Schasinglulu 72*91f16700Schasinglulu# Function definition related compilation 73*91f16700Schasingluludefine MAKE_C 74*91f16700Schasinglulu$(eval OBJ := $(1)/$(patsubst %.c,%.o,$(notdir $(2)))) 75*91f16700Schasinglulu-include $(patsubst %.o,%.d,$(OBJ)) 76*91f16700Schasinglulu 77*91f16700Schasinglulu$(OBJ) : $(2) 78*91f16700Schasinglulu @echo " CC $$<" 79*91f16700Schasinglulu $$(Q)$$(CC) $$(COMMON_FLAGS) $$(CFLAGS) $$(INCLUDES) -MMD -MT $$@ -c $$< -o $$@ 80*91f16700Schasingluluendef 81*91f16700Schasinglulu 82*91f16700Schasingluludefine MAKE_S 83*91f16700Schasinglulu$(eval OBJ := $(1)/$(patsubst %.S,%.o,$(notdir $(2)))) 84*91f16700Schasinglulu 85*91f16700Schasinglulu$(OBJ) : $(2) 86*91f16700Schasinglulu @echo " AS $$<" 87*91f16700Schasinglulu $$(Q)$$(CC) -x assembler-with-cpp $$(COMMON_FLAGS) $$(ASFLAGS) -c $$< -o $$@ 88*91f16700Schasingluluendef 89*91f16700Schasinglulu 90*91f16700Schasingluludefine MAKE_OBJS 91*91f16700Schasinglulu $(eval C_OBJS := $(filter %.c,$(2))) 92*91f16700Schasinglulu $(eval REMAIN := $(filter-out %.c,$(2))) 93*91f16700Schasinglulu $(eval $(foreach obj,$(C_OBJS),$(call MAKE_C,$(1),$(obj),$(3)))) 94*91f16700Schasinglulu 95*91f16700Schasinglulu $(eval S_OBJS := $(filter %.S,$(REMAIN))) 96*91f16700Schasinglulu $(eval REMAIN := $(filter-out %.S,$(REMAIN))) 97*91f16700Schasinglulu $(eval $(foreach obj,$(S_OBJS),$(call MAKE_S,$(1),$(obj),$(3)))) 98*91f16700Schasinglulu 99*91f16700Schasinglulu $(and $(REMAIN),$(error Unexpected source files present: $(REMAIN))) 100*91f16700Schasingluluendef 101*91f16700Schasinglulu 102*91f16700Schasinglulu.PHONY: all 103*91f16700Schasingluluall: $(BIN) $(BIN_PMU) 104*91f16700Schasinglulu 105*91f16700Schasinglulu.DEFAULT_GOAL := all 106*91f16700Schasinglulu 107*91f16700Schasinglulu$(LINKERFILE): $(LINKERFILE_SRC) 108*91f16700Schasinglulu $(CC) $(COMMON_FLAGS) $(INCLUDES) -P -E -D__LINKER__ -MMD -MF $@.d -MT $@ -o $@ $< 109*91f16700Schasinglulu-include $(LINKERFILE).d 110*91f16700Schasinglulu 111*91f16700Schasinglulu$(ELF) : $(OBJS) $(OBJS_COMMON) $(LINKERFILE) 112*91f16700Schasinglulu @echo " LD $@" 113*91f16700Schasinglulu $(Q)$(CC) -o $@ $(COMMON_FLAGS) $(LDFLAGS) -Wl,-Map=$(MAPFILE) -Wl,-T$(LINKERFILE) $(OBJS) $(OBJS_COMMON) 114*91f16700Schasinglulu 115*91f16700Schasinglulu%.bin : %.elf 116*91f16700Schasinglulu @echo " BIN $@" 117*91f16700Schasinglulu $(Q)$(OC) -O binary $< $@ 118*91f16700Schasinglulu 119*91f16700Schasinglulu$(ELF_PMU) : $(OBJS_COMMON) $(OBJS_PMU) $(LINKERFILE) 120*91f16700Schasinglulu @echo " LD $@" 121*91f16700Schasinglulu $(Q)$(CC) -o $@ $(COMMON_FLAGS) $(LDFLAGS) -Wl,-Map=$(MAPFILE_PMU) -Wl,-T$(LINKERFILE) $(OBJS_PMU) $(OBJS_COMMON) 122*91f16700Schasinglulu 123*91f16700Schasinglulu$(eval $(call MAKE_OBJS,$(BUILD),$(SOURCES_COMMON),$(1))) 124*91f16700Schasinglulu$(eval $(call MAKE_OBJS,$(BUILD),$(SOURCES),$(1))) 125*91f16700Schasinglulu$(eval $(call MAKE_OBJS,$(BUILD),$(SOURCES_PMU),$(1))) 126