105 lines
2.5 KiB
Makefile
105 lines
2.5 KiB
Makefile
ifeq ($(ARCH),psua53)
|
|
CC = aarch64-elf-gcc
|
|
AR = aarch64-elf-ar
|
|
AS = aarch64-elf-as
|
|
CP = aarch64-elf-objcopy
|
|
OD = aarch64-elf-objdump
|
|
SIZE = aarch64-elf-size
|
|
else
|
|
CC = arm-none-eabi-gcc
|
|
AR = arm-none-eabi-ar
|
|
AS = arm-none-eabi-as
|
|
CP = arm-none-eabi-objcopy
|
|
OD = arm-none-eabi-objdump
|
|
SIZE = arm-none-eabi-size
|
|
endif
|
|
|
|
ifeq (, $(shell which ${CC}))
|
|
$(error "No ${CC} in PATH variable, please extend PATH variable")
|
|
endif
|
|
|
|
SRC_DIR = ./src
|
|
BUILD_DIR = ./Build
|
|
DEBUG_DIR = ./Debug
|
|
OUT_DIR = ./out
|
|
|
|
TARGET := $(APP)_$(ARCH)_core$(CORE)
|
|
TARGET_DIR := $(SRC_DIR)/APP/$(APP)/$(ARCH)/core$(CORE)/
|
|
|
|
OBJ_DIR = ./$(OUT_DIR)/$(TARGET)
|
|
|
|
# Load specific config for compiler, linker, ...
|
|
-include $(TARGET_DIR)/build/config.mk
|
|
|
|
#Output files: elf, map and list-file
|
|
EXECUTABLE=$(OBJ_DIR)/../$(TARGET).elf
|
|
MAPFILE=$(OBJ_DIR)/../$(TARGET).map
|
|
LISTFILE=$(OBJ_DIR)/../$(TARGET).lst
|
|
|
|
# Path to linker script
|
|
ifndef LDSCRIPT
|
|
LDSCRIPT = -T$(TARGET_DIR)/linker/lscript.ld
|
|
endif
|
|
|
|
#Include source-files:
|
|
SRC =
|
|
-include $(TARGET_DIR)/build/Sources.mk
|
|
|
|
INC = -I./
|
|
-include $(TARGET_DIR)/build/includes.mk
|
|
|
|
# C source files
|
|
CFILES = $(filter %.c, $(SRC))
|
|
# Assembly source files
|
|
ASMFILES = $(filter %.s, $(SRC))
|
|
# Object files
|
|
COBJ = $(CFILES:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)
|
|
SOBJ = $(ASMFILES:$(SRC_DIR)/%.S=$(OBJ_DIR)/%.o)
|
|
OBJ = $(SOBJ) $(COBJ)
|
|
|
|
$(info CFILES : ${CFILES})
|
|
|
|
# Flags
|
|
CFLAGS = $(MCFLAGS) $(DEBUG) $(OPTIMIZE) -MP -MMD -std=gnu11
|
|
ASFLAGS = $(MCFLAGS) $(DEBUG) $(OPTIMIZE) -MP -MMD -x assembler-with-cpp
|
|
ODFLAGS = --source --all-headers --demangle --line-numbers --wide
|
|
|
|
all: info $(LISTFILE) postbuild
|
|
|
|
$(LISTFILE): $(EXECUTABLE)
|
|
@echo 'Generating Listfile: $<'
|
|
@$(OD) $(ODFLAGS) -d $< > $@
|
|
|
|
$(EXECUTABLE): $(OBJ)
|
|
@echo 'Linking: $@'
|
|
$(CC) $(CFLAGS) $(LDSCRIPT) -Wl,-Map,"$(MAPFILE)" -o "$@" $(sort $(OBJ)) $(LDFLAGS)
|
|
|
|
$(COBJ): $(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
|
|
@echo 'Building file: $<'
|
|
@mkdir -p $(@D)
|
|
$(CC) -c $(CFLAGS) $(INC) -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o $@ $< >/dev/null
|
|
|
|
$(SOBJ): $(OBJ_DIR)/%.o: $(SRC_DIR)/%.S
|
|
@echo 'Building file: $<'
|
|
@mkdir -p $(@D)
|
|
$(CC) -c $(ASFLAGS) $(INC) -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o $@ $< >/dev/null
|
|
|
|
.PHONY: clean, info
|
|
|
|
info:
|
|
$(info APP : ${APP})
|
|
$(info TARGET : ${TARGET})
|
|
$(info TARGET_DIR : ${TARGET_DIR})
|
|
$(info Linker file : ${LDSCRIPT})
|
|
$(info CFLAGS : ${CFLAGS})
|
|
$(info ASFLAGS : ${ASFLAGS})
|
|
$(info ODFLAGS : ${ODFLAGS})
|
|
@echo ""
|
|
@echo ""
|
|
|
|
clean:
|
|
rm -rf $(OUT_DIR)
|
|
|
|
postbuild: $(EXECUTABLE)
|
|
$(SIZE) --format=berkeley $(EXECUTABLE)
|