feat: write RISC-V binary file with weakly linked, overridable symbols

- Adds functionality to write RISC-V binary files using weak symbols, allowing overrides in linked projects
- Supports flexible integration where default binary data can be replaced by custom definitions if needed
This commit is contained in:
Gatsby
2024-10-31 20:00:42 +08:00
parent a7cf13b37a
commit 79f59d15f7
4 changed files with 26 additions and 5 deletions
+11 -5
View File
@@ -26,6 +26,7 @@ CFLAGS_DEBUG := $(CFLAGS) $(DEBUG_FLAGS)
CFLAGS_RELEASE := $(CFLAGS) $(RELEASE_FLAGS)
# Collect source files
BIN_SRC := $(CURDIR)/cx9261a_riscv_bin.c
SRCS := $(CURDIR)/cx9261adriver_c.cpp $(CURDIR)/cx9261A_api/cx9261adriver.cpp
TEST_SRC := ld_test.c
PACKAGE_HEADERS := ./cx9261adriver_c.h
@@ -33,6 +34,9 @@ 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)
$(BIN_SRC): $(CURDIR)/cx9261A_api/MultiPointsCalib_v1.7.bin
$(CURDIR)/tools/gen_riscvbin.py $< -o $(CURDIR)
# Rule to create debug libraries for different architectures
$(BUILD_DIR)/%/lib$(PROJECT_NAME)_dbg.a: $(SRCS)
@mkdir -p $(BUILD_DIR)/$*/debug
@@ -48,21 +52,22 @@ $(BUILD_DIR)/%/lib$(PROJECT_NAME).a: $(SRCS)
# Clean up
clean:
rm -rf $(BUILD_DIR) *.tar.gz
rm -rf $(CURDIR)/cx9261a_riscv_bin.c
# 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
$(BUILD_DIR)/%/ld_test_dbg: $(SRCS) $(TEST_SRC) $(BIN_SRC)
@$(CC) $(CFLAGS_DEBUG) -mcpu=$* ld_test.c $(BIN_SRC) -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
$(BUILD_DIR)/%/ld_test: $(SRCS) $(TEST_SRC) $(BIN_SRC)
@$(CC) $(CFLAGS_RELEASE) -mcpu=$* ld_test.c $(BIN_SRC) -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
package: all $(BIN_SRC)
@echo "Packaging for release..."
@$(foreach arch, $(ARCHS), \
mkdir -p release_$(arch)/lib; \
@@ -72,6 +77,7 @@ package: all
cp $(BUILD_DIR)/$(arch)/lib$(PROJECT_NAME).a release_$(arch)/lib/; \
cp $(PACKAGE_HEADERS) release_$(arch)/include/; \
cp $(SRCS) release_$(arch)/dbg/cx9261a_c/; \
cp $(CURDIR)/cx9261a_riscv_bin.c release_$(arch)/; \
tar -czvf release_$(arch).tar.gz -C release_$(arch) .; \
rm -rf release_$(arch); \
)