76 lines
2.7 KiB
Makefile
76 lines
2.7 KiB
Makefile
# Variables
|
|
PROJECT_NAME := cx9261a
|
|
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 := -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 := cx9261adriver_c.cpp 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; \
|
|
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/; \
|
|
tar -czvf release_$(arch).tar.gz -C release_$(arch) .; \
|
|
rm -rf release_$(arch); \
|
|
)
|
|
@echo "Packaging completed."
|
|
|
|
.PHONY: all clean test release |