# Variables PROJECT_NAME := cx9261a_c BUILD_DIR := build OUTPUT_DIR := output ARCHS := cortex-r5 cortex-a9 cortex-a53 VERSIONS := debug release # Compiler and options CC := arm-none-eabi-gcc CXX := arm-none-eabi-g++ AR := arm-none-eabi-ar CXXFLAGS := -static -static-libstdc++ -std=c++17 -fPIC -Wl,--as-needed \ -Wall -Wextra \ -fmessage-length=0 -mfpu=vfpv3 -mfloat-abi=hard \ -I. -I./cx9261A_api CFLAGS := -std=c17 -Wall -Wextra \ -fmessage-length=0 -mfpu=vfpv3 -mfloat-abi=hard \ -I. DEBUG_FLAGS := -fdebug-prefix-map=$(CURDIR)/=../dbg/ \ -fdebug-prefix-map=$(CURDIR)/cx9261A_api/=../dbg/ \ -g -O0 -DUSE_LOGGING RELEASE_FLAGS := -O3 CXXFLAGS_DEBUG := $(CXXFLAGS) $(DEBUG_FLAGS) CXXFLAGS_RELEASE := $(CXXFLAGS) $(RELEASE_FLAGS) CFLAGS_DEBUG := $(CFLAGS) $(DEBUG_FLAGS) CFLAGS_RELEASE := $(CFLAGS) $(RELEASE_FLAGS) # Collect source files SRCS := $(CURDIR)/cx9261adriver_c.cpp $(CURDIR)/cx9261A_api/cx9261adriver.cpp TEST_SRC := ld_test.c PACKAGE_HEADERS := ./cx9261adriver_c.h # Default target all: $(foreach arch, $(ARCHS), $(BUILD_DIR)/$(arch)/lib$(PROJECT_NAME)_dbg.a $(BUILD_DIR)/$(arch)/lib$(PROJECT_NAME).a) # Rule to create debug libraries for different architectures $(BUILD_DIR)/%/lib$(PROJECT_NAME)_dbg.a: $(SRCS) @mkdir -p $(BUILD_DIR)/$*/debug $(foreach src, $(SRCS), $(CXX) $(CXXFLAGS_DEBUG) -mcpu=$* -c $(src) -o $(BUILD_DIR)/$*/debug/$(notdir $(src:.cpp=_dbg.o));) $(AR) rcs $@ $(BUILD_DIR)/$*/debug/*_dbg.o # Rule to create release libraries for different architectures $(BUILD_DIR)/%/lib$(PROJECT_NAME).a: $(SRCS) @mkdir -p $(BUILD_DIR)/$*/release $(foreach src, $(SRCS), $(CXX) $(CXXFLAGS_RELEASE) -mcpu=$* -c $(src) -o $(BUILD_DIR)/$*/release/$(notdir $(src:.cpp=.o));) $(AR) rcs $@ $(BUILD_DIR)/$*/release/*.o # Clean up clean: rm -rf $(BUILD_DIR) *.tar.gz # Run link tests test: all $(foreach arch, $(ARCHS), $(BUILD_DIR)/$(arch)/ld_test $(BUILD_DIR)/$(arch)/ld_test_dbg) @echo "Link test success!" # Debug link tests $(BUILD_DIR)/%/ld_test_dbg: $(SRCS) $(TEST_SRC) @$(CC) $(CFLAGS_DEBUG) -mcpu=$* ld_test.c -o $@ -L$(BUILD_DIR)/$* -l$(PROJECT_NAME)_dbg -lstdc++ -lm -specs=nosys.specs # Release link tests $(BUILD_DIR)/%/ld_test: $(SRCS) $(TEST_SRC) @$(CC) $(CFLAGS_RELEASE) -mcpu=$* ld_test.c -o $@ -L$(BUILD_DIR)/$* -l$(PROJECT_NAME) -lstdc++ -lm -specs=nosys.specs # Package for release - bundle debug and release versions for each architecture separately package: all @echo "Packaging for release..." @$(foreach arch, $(ARCHS), \ mkdir -p release_$(arch)/lib; \ mkdir -p release_$(arch)/include; \ mkdir -p release_$(arch)/dbg; \ cp $(BUILD_DIR)/$(arch)/lib$(PROJECT_NAME)_dbg.a release_$(arch)/lib/; \ cp $(BUILD_DIR)/$(arch)/lib$(PROJECT_NAME).a release_$(arch)/lib/; \ cp $(PACKAGE_HEADERS) release_$(arch)/include/; \ cp $(SRCS) release_$(arch)/dbg/; \ tar -czvf release_$(arch).tar.gz -C release_$(arch) .; \ rm -rf release_$(arch); \ ) @echo "Packaging completed." .PHONY: all clean test release