233 lines
8.9 KiB
Makefile
233 lines
8.9 KiB
Makefile
# Toolchain configuration
|
|
CROSS_COMPILE = arm-none-eabi-
|
|
TARGET := application
|
|
|
|
BUILD_DIR := build
|
|
BIN_DIR := $(BUILD_DIR)/bin
|
|
DEP_DIR := $(BUILD_DIR)/dep
|
|
|
|
# SDK Paths
|
|
# -------------------------------------------------------------------
|
|
SDK_ROOT := lib/amb1_sdk
|
|
SOC_PATH := $(SDK_ROOT)/soc/realtek/8711b
|
|
# Define tool directories
|
|
AMEBA_TOOLS := $(SOC_PATH)/misc/iar_utility/common/tools
|
|
FLASH_TOOLS := $(SDK_ROOT)/soc/realtek/8195a/misc/gcc_utility
|
|
FLASH_DOWNLOAD := $(SOC_PATH)/misc/gnu_utility/flash_download/image
|
|
DEBUG_TOOLS := $(SOC_PATH)/misc/gcc_utility
|
|
|
|
# Build Tools
|
|
# -------------------------------------------------------------------
|
|
CC := $(CROSS_COMPILE)gcc
|
|
AR := $(CROSS_COMPILE)ar
|
|
AS := $(CROSS_COMPILE)as
|
|
NM := $(CROSS_COMPILE)nm
|
|
LD := $(CROSS_COMPILE)gcc
|
|
GDB := $(CROSS_COMPILE)gdb
|
|
OBJCOPY := $(CROSS_COMPILE)objcopy
|
|
OBJDUMP := $(CROSS_COMPILE)objdump
|
|
PYTHON ?= python tools/
|
|
|
|
# OS-Specific Tool Selection
|
|
# -------------------------------------------------------------------
|
|
OS := $(shell uname)
|
|
ifeq ($(findstring CYGWIN, $(OS)), CYGWIN)
|
|
EXT := .exe
|
|
else
|
|
EXT :=
|
|
endif
|
|
|
|
PICK := $(AMEBA_TOOLS)/pick$(EXT)
|
|
PAD := $(AMEBA_TOOLS)/padding$(EXT)
|
|
CHKSUM := $(AMEBA_TOOLS)/checksum$(EXT)
|
|
OTA := $(AMEBA_TOOLS)/ota$(EXT)
|
|
|
|
# OTA Configuration and Image Names
|
|
# -------------------------------------------------------------------
|
|
OTA_IDX ?= 1
|
|
ifeq ($(OTA_IDX),1)
|
|
LINKER_SCRIPT := rlx8711B-symbol-v02-img2_xip1.ld
|
|
IMAGE2_OTA := image2_all_ota1.bin
|
|
else ifeq ($(OTA_IDX),2)
|
|
LINKER_SCRIPT := rlx8711B-symbol-v02-img2_xip2.ld
|
|
IMAGE2_OTA := image2_all_ota2.bin
|
|
else
|
|
$(error OTA_IDX must be 1 or 2)
|
|
endif
|
|
|
|
|
|
# Image configuration based on build type
|
|
# -------------------------------------------------------------------
|
|
ifeq ($(MAKECMDGOALS),mp)
|
|
RAMALL_BIN := ram_all_mp.bin
|
|
OTA_BIN := ota_mp.bin
|
|
IMAGE2_OTA1 := image2_all_ota1_mp.bin
|
|
IMAGE2_OTA2 := image2_all_ota2_mp.bin
|
|
OTA_ALL := ota_all_mp.bin
|
|
else
|
|
RAMALL_BIN := ram_all.bin
|
|
OTA_BIN := ota.bin
|
|
IMAGE2_OTA1 := image2_all_ota1.bin
|
|
IMAGE2_OTA2 := image2_all_ota2.bin
|
|
OTA_ALL := ota_all.bin
|
|
endif
|
|
|
|
# Include other makefiles
|
|
# -------------------------------------------------------------------
|
|
include $(MKFILES)/includes.mk
|
|
include $(MKFILES)/sources.mk
|
|
|
|
# Build Configuration
|
|
# -------------------------------------------------------------------
|
|
CFLAGS := \
|
|
-DM3 -DCONFIG_PLATFORM_8711B \
|
|
-mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 \
|
|
-g2 -w -O2 -fno-common -fmessage-length=0 \
|
|
-ffunction-sections -fdata-sections -fomit-frame-pointer \
|
|
-fno-short-enums -DF_CPU=166000000L -std=gnu99 -fsigned-char \
|
|
-Wno-pointer-sign -Wno-implicit-function-declaration \
|
|
-Wno-incompatible-pointer-types -Wno-int-conversion
|
|
|
|
LFLAGS := \
|
|
-mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 \
|
|
-g --specs=nano.specs -nostartfiles \
|
|
-Wl,-Map=$(BIN_DIR)/application.map -Os -Wl,--gc-sections \
|
|
-Wl,--cref -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
|
|
|
|
# Library configuration
|
|
# -------------------------------------------------------------------
|
|
LIB_DIR := $(SOC_PATH)/misc/bsp/lib/common/GCC
|
|
|
|
# Platform-specific libraries (with underscore)
|
|
PLATFORM_LIBS := platform wlan eap http wps p2p rtlstd
|
|
MP_PLATFORM_LIBS := platform wlan_mp eap wps p2p rtlstd
|
|
|
|
# System libraries (without underscore)
|
|
SYS_LIBS := m c nosys gcc
|
|
|
|
# Combined library flags
|
|
LIBFLAGS := -L$(LIB_DIR) $(addprefix -l_,$(PLATFORM_LIBS)) $(addprefix -l,$(SYS_LIBS))
|
|
MP_LIBFLAGS := -L$(LIB_DIR) $(addprefix -l_,$(MP_PLATFORM_LIBS)) $(addprefix -l,$(SYS_LIBS))
|
|
|
|
# Object files
|
|
# -------------------------------------------------------------------
|
|
SRC_O := $(patsubst %.c,$(BUILD_DIR)/%.o,$(SRC_C))
|
|
DRAM_O := $(patsubst %.c,$(BUILD_DIR)/%.o,$(DRAM_C))
|
|
DEPENDENCY_LIST := $(patsubst %.c,$(BUILD_DIR)/%.d,$(SRC_C) $(DRAM_C))
|
|
|
|
VPATH := $(sort $(dir $(SRC_C)) $(dir $(DRAM_C)))
|
|
|
|
# Main targets
|
|
# -------------------------------------------------------------------
|
|
.PHONY: all mp clean directories application manipulate_images build_info prerequirement
|
|
|
|
all mp: directories application manipulate_images
|
|
|
|
directories:
|
|
@mkdir -p $(BIN_DIR) $(DEP_DIR) $(dir $(SRC_O) $(DRAM_O))
|
|
|
|
# Compilation rules
|
|
# -------------------------------------------------------------------
|
|
$(filter $(BUILD_DIR)/%,$(SRC_O)): $(BUILD_DIR)/%.o: %.c
|
|
@mkdir -p $(dir $@)
|
|
$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
|
|
$(CC) $(CFLAGS) $(INCLUDES) -c $< -MM -MT $@ -MF $(patsubst %.o,%.d,$@)
|
|
|
|
$(filter $(BUILD_DIR)/%,$(DRAM_O)): $(BUILD_DIR)/%.o: %.c
|
|
@mkdir -p $(dir $@)
|
|
$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
|
|
$(OBJCOPY) --prefix-alloc-sections .sdram $@
|
|
$(CC) $(CFLAGS) $(INCLUDES) -c $< -MM -MT $@ -MF $(patsubst %.o,%.d,$@)
|
|
|
|
# Build Info Generation
|
|
# -------------------------------------------------------------------
|
|
.PHONY: build_info
|
|
build_info:
|
|
@echo "Generating build information..."
|
|
@( \
|
|
echo '#define RTL_FW_COMPILE_TIME "'`date +%Y/%m/%d-%T`'"'; \
|
|
echo '#define RTL_FW_COMPILE_DATE "'`date +%Y%m%d`'"'; \
|
|
echo '#define UTS_VERSION "'`date +%Y/%m/%d-%T`'"'; \
|
|
echo '#define RTL8195AFW_COMPILE_TIME "'`date +%Y/%m/%d-%T`'"'; \
|
|
echo '#define RTL8195AFW_COMPILE_DATE "'`date +%Y%m%d`'"'; \
|
|
echo '#define RTL8195AFW_COMPILE_BY "'`id -u -n`'"'; \
|
|
echo '#define RTL8195AFW_COMPILE_HOST "'`$(HOSTNAME_APP)`'"'; \
|
|
if [ -x /bin/dnsdomainname ]; then \
|
|
echo '#define RTL8195AFW_COMPILE_DOMAIN "'`dnsdomainname`'"'; \
|
|
elif [ -x /bin/domainname ]; then \
|
|
echo '#define RTL8195AFW_COMPILE_DOMAIN "'`domainname`'"'; \
|
|
else \
|
|
echo '#define RTL8195AFW_COMPILE_DOMAIN ""'; \
|
|
fi; \
|
|
echo '#define RTL195AFW_COMPILER "gcc '`$(CC) $(CFLAGS) -dumpversion | tr --delete '\r'`'"'; \
|
|
) > include/build_info.h
|
|
|
|
# Image Manipulation
|
|
# -------------------------------------------------------------------
|
|
.PHONY: manipulate_images
|
|
manipulate_images:
|
|
@echo "=== Image Manipulation ==="
|
|
|
|
# Generate symbol maps
|
|
$(NM) $(BIN_DIR)/$(TARGET).axf | sort > $(BIN_DIR)/$(TARGET).nmap
|
|
|
|
# Extract sections
|
|
$(OBJCOPY) -j .ram_image2.entry -j .ram_image2.data -j .ram_image2.text -j .ram_image2.bss -j .ram_image2.skb.bss -j .ram_heap.data -Obinary $(BIN_DIR)/$(TARGET).axf $(BIN_DIR)/ram_2.r.bin
|
|
$(OBJCOPY) -j .xip_image2.text -Obinary $(BIN_DIR)/$(TARGET).axf $(BIN_DIR)/xip_image2.bin
|
|
$(OBJCOPY) -j .ram_rdp.text -Obinary $(BIN_DIR)/$(TARGET).axf $(BIN_DIR)/rdp.bin
|
|
|
|
# Prepare boot image
|
|
cp $(SOC_PATH)/misc/bsp/image/boot_all.bin $(BIN_DIR)/boot_all.bin
|
|
chmod 777 $(BIN_DIR)/boot_all.bin
|
|
chmod +rx $(PICK) $(CHKSUM) $(PAD) $(OTA)
|
|
|
|
# Process memory images
|
|
$(PICK) 0x`grep __ram_image2_text_start__ $(BIN_DIR)/$(TARGET).nmap | gawk '{print $$1}'` 0x`grep __ram_image2_text_end__ $(BIN_DIR)/$(TARGET).nmap | gawk '{print $$1}'` $(BIN_DIR)/ram_2.r.bin $(BIN_DIR)/ram_2.bin raw
|
|
$(PICK) 0x`grep __ram_image2_text_start__ $(BIN_DIR)/$(TARGET).nmap | gawk '{print $$1}'` 0x`grep __ram_image2_text_end__ $(BIN_DIR)/$(TARGET).nmap | gawk '{print $$1}'` $(BIN_DIR)/ram_2.bin $(BIN_DIR)/ram_2.p.bin
|
|
$(PICK) 0x`grep __xip_image2_start__ $(BIN_DIR)/$(TARGET).nmap | gawk '{print $$1}'` 0x`grep __xip_image2_start__ $(BIN_DIR)/$(TARGET).nmap | gawk '{print $$1}'` $(BIN_DIR)/xip_image2.bin $(BIN_DIR)/xip_image2.p.bin
|
|
|
|
# Generate OTA images
|
|
ifeq ("${OTA_IDX}", "1")
|
|
cat $(BIN_DIR)/xip_image2.p.bin > $(BIN_DIR)/$(IMAGE2_OTA1)
|
|
chmod 777 $(BIN_DIR)/$(IMAGE2_OTA1)
|
|
cat $(BIN_DIR)/ram_2.p.bin >> $(BIN_DIR)/$(IMAGE2_OTA1)
|
|
$(CHKSUM) $(BIN_DIR)/$(IMAGE2_OTA1) || true
|
|
#rm $(BIN_DIR)/xip_image2.p.bin $(BIN_DIR)/ram_2.p.bin
|
|
else ifeq ("${OTA_IDX}", "2")
|
|
cat $(BIN_DIR)/xip_image2.p.bin > $(BIN_DIR)/$(IMAGE2_OTA2)
|
|
chmod 777 $(BIN_DIR)/$(IMAGE2_OTA2)
|
|
cat $(BIN_DIR)/ram_2.p.bin >> $(BIN_DIR)/$(IMAGE2_OTA2)
|
|
$(CHKSUM) $(BIN_DIR)/$(IMAGE2_OTA2) || true
|
|
$(OTA) $(BIN_DIR)/$(IMAGE2_OTA1) 0x800B000 $(BIN_DIR)/$(IMAGE2_OTA2) 0x08080000 0x20170111 $(BIN_DIR)/$(OTA_ALL)
|
|
endif
|
|
|
|
# Prerequisite setup
|
|
# -------------------------------------------------------------------
|
|
.PHONY: prerequirement
|
|
prerequirement:
|
|
@echo "=== Setting up prerequisites for $(TARGET) ==="
|
|
@mkdir -p $(BUILD_DIR)/boot $(BIN_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 $(BUILD_DIR)/boot/boot_all.o
|
|
|
|
# Main build target
|
|
# -------------------------------------------------------------------
|
|
application: prerequirement build_info $(SRC_O) $(DRAM_O)
|
|
$(LD) $(LFLAGS) -o $(BIN_DIR)/$(TARGET).axf $(SRC_O) $(DRAM_O) \
|
|
$(BUILD_DIR)/boot/boot_all.o $(LIBFLAGS) -T./$(LINKER_SCRIPT)
|
|
$(OBJDUMP) -d $(BIN_DIR)/$(TARGET).axf > $(BIN_DIR)/$(TARGET).asm
|
|
|
|
# Include generated dependencies
|
|
-include $(DEPENDENCY_LIST)
|
|
|
|
# Clean target
|
|
# -------------------------------------------------------------------
|
|
clean:
|
|
rm -rf $(BUILD_DIR)
|