Files
ambz-sdk/mk/application.mk

113 lines
3.1 KiB
Makefile

# Toolchain configuration
CROSS_COMPILE := arm-none-eabi-
TARGET ?= application
BUILD_DIR ?= build
BIN_DIR := $(BUILD_DIR)/bin
# SDK stuff
SDK_ROOT := lib/amb1_sdk
SOC_PATH := $(SDK_ROOT)/soc/realtek/8711b
TOOLS_DIR := $(SOC_PATH)/misc/iar_utility/common/tools
CC := $(CROSS_COMPILE)gcc
AR := $(CROSS_COMPILE)ar
AS := $(CROSS_COMPILE)as
NM := $(CROSS_COMPILE)nm
LD := $(CROSS_COMPILE)gcc
OBJCOPY := $(CROSS_COMPILE)objcopy
OBJDUMP := $(CROSS_COMPILE)objdump
# OTA config
OTA_IDX ?= 1
LINKER_SCRIPT := rlx8711B-symbol-v02-img2_xip$(OTA_IDX).ld
IMAGE2_OTA := image2_all_ota$(OTA_IDX).bin
# Build info
BUILD_INFO ?= include/build_info.h
# inc and src
include $(MKFILES)/includes.mk
include $(MKFILES)/sources.mk
# compiler flags
COMMON_FLAGS := \
-mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 \
-Os
CFLAGS := $(COMMON_FLAGS) \
-DM4 -DCONFIG_PLATFORM_8711B \
-ffunction-sections -fdata-sections -fomit-frame-pointer \
-fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables \
-fno-builtin -fno-short-enums \
-std=gnu99 \
LFLAGS := $(COMMON_FLAGS) \
--specs=nano.specs -nostartfiles \
-Wl,--gc-sections \
-Wl,--entry=Reset_Handler \
-Wl,--no-enum-size-warning -Wl,--no-wchar-size-warning \
-Wl,--wrap=malloc -Wl,--wrap=free -Wl,--wrap=realloc \
-Wl,--wrap=rom_psk_CalcGTK -Wl,--wrap=rom_psk_CalcPTK \
-Wl,--wrap=CalcMIC -Wl,--wrap=CheckMIC \
-Wl,--wrap=aes_80211_encrypt -Wl,--wrap=aes_80211_decrypt \
-Wl,--wrap=DecGTK \
-Wl,--print-memory-usage
# libs
LIB_DIR := $(SOC_PATH)/misc/bsp/lib/common/GCC
LIBS := $(addprefix -l_,platform wlan eap http wps p2p rtlstd) \
$(addprefix -l,m c nosys gcc)
LIBFLAGS := -L$(LIB_DIR) $(LIBS)
# obj files - handle both RAM and DRAM
OBJS := $(patsubst %.c,$(BUILD_DIR)/%.o,$(SRC_C) $(DRAM_C))
DEPS := $(OBJS:.o=.d)
.PHONY: all build_info clean post_process directory_structure
all: $(BIN_DIR)/$(TARGET).axf
$(BIN_DIR)/$(TARGET).axf: $(OBJS) $(BOOTLOADER) | $(BIN_DIR)
$(LD) $(LFLAGS) -o $@ $(OBJS) $(BOOTLOADER) $(LIBFLAGS) -T./$(LINKER_SCRIPT)
$(OBJDUMP) -d $@ > $(BIN_DIR)/$(TARGET).asm
$(NM) $@ | sort > $(BIN_DIR)/$(TARGET).nmap
$(MAKE) -f $(firstword $(MAKEFILE_LIST)) post_process
$(BUILD_DIR)/%.o: %.c $(BUILD_INFO) | directory_structure
@mkdir -p $(dir $@)
$(CC) $(CFLAGS) $(INCLUDES) -MMD -MP -c $< -o $@
$(if $(findstring $(DRAM_C),$<),$(OBJCOPY) --prefix-alloc-sections .sdram $@)
# bootloader
$(BOOTLOADER): | directory_structure
@mkdir -p $(dir $@)
cp $(SOC_PATH)/misc/bsp/image/boot_all.bin $(BUILD_DIR)/boot/boot_all.bin
chmod 777 $(BUILD_DIR)/boot/boot_all.bin
$(OBJCOPY) -I binary -O elf32-littlearm -B arm \
$(BUILD_DIR)/boot/boot_all.bin $@
.PHONY: FORCE
# ota magic
post_process: $(BIN_DIR)/$(TARGET).axf
@echo "=== Processing OTA Image ==="
@scripts/process_ota.sh \
--axf $(BIN_DIR)/$(TARGET).axf \
--bin-dir $(BIN_DIR) \
--objcopy $(OBJCOPY) \
--ota-idx $(OTA_IDX) \
--tools-dir $(TOOLS_DIR)
directory_structure:
@mkdir -p $(BIN_DIR) $(dir $(OBJS))
build_info:
@echo "Generating build information..."
@scripts/generate_build_info.sh $(CC) "$(CFLAGS)" > $(BUILD_INFO)
clean:
rm -rf $(BUILD_DIR)
-include $(DEPS)