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:
@@ -1,6 +1,7 @@
|
|||||||
# Buid files
|
# Buid files
|
||||||
build/
|
build/
|
||||||
*.tar.gz
|
*.tar.gz
|
||||||
|
cx9261a_riscv_bin.c
|
||||||
|
|
||||||
# System generated files
|
# System generated files
|
||||||
# -- macOS
|
# -- macOS
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ CFLAGS_DEBUG := $(CFLAGS) $(DEBUG_FLAGS)
|
|||||||
CFLAGS_RELEASE := $(CFLAGS) $(RELEASE_FLAGS)
|
CFLAGS_RELEASE := $(CFLAGS) $(RELEASE_FLAGS)
|
||||||
|
|
||||||
# Collect source files
|
# Collect source files
|
||||||
|
BIN_SRC := $(CURDIR)/cx9261a_riscv_bin.c
|
||||||
SRCS := $(CURDIR)/cx9261adriver_c.cpp $(CURDIR)/cx9261A_api/cx9261adriver.cpp
|
SRCS := $(CURDIR)/cx9261adriver_c.cpp $(CURDIR)/cx9261A_api/cx9261adriver.cpp
|
||||||
TEST_SRC := ld_test.c
|
TEST_SRC := ld_test.c
|
||||||
PACKAGE_HEADERS := ./cx9261adriver_c.h
|
PACKAGE_HEADERS := ./cx9261adriver_c.h
|
||||||
@@ -33,6 +34,9 @@ PACKAGE_HEADERS := ./cx9261adriver_c.h
|
|||||||
# Default target
|
# Default target
|
||||||
all: $(foreach arch, $(ARCHS), $(BUILD_DIR)/$(arch)/lib$(PROJECT_NAME)_dbg.a $(BUILD_DIR)/$(arch)/lib$(PROJECT_NAME).a)
|
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
|
# Rule to create debug libraries for different architectures
|
||||||
$(BUILD_DIR)/%/lib$(PROJECT_NAME)_dbg.a: $(SRCS)
|
$(BUILD_DIR)/%/lib$(PROJECT_NAME)_dbg.a: $(SRCS)
|
||||||
@mkdir -p $(BUILD_DIR)/$*/debug
|
@mkdir -p $(BUILD_DIR)/$*/debug
|
||||||
@@ -48,21 +52,22 @@ $(BUILD_DIR)/%/lib$(PROJECT_NAME).a: $(SRCS)
|
|||||||
# Clean up
|
# Clean up
|
||||||
clean:
|
clean:
|
||||||
rm -rf $(BUILD_DIR) *.tar.gz
|
rm -rf $(BUILD_DIR) *.tar.gz
|
||||||
|
rm -rf $(CURDIR)/cx9261a_riscv_bin.c
|
||||||
|
|
||||||
# Run link tests
|
# Run link tests
|
||||||
test: all $(foreach arch, $(ARCHS), $(BUILD_DIR)/$(arch)/ld_test $(BUILD_DIR)/$(arch)/ld_test_dbg)
|
test: all $(foreach arch, $(ARCHS), $(BUILD_DIR)/$(arch)/ld_test $(BUILD_DIR)/$(arch)/ld_test_dbg)
|
||||||
@echo "Link test success!"
|
@echo "Link test success!"
|
||||||
|
|
||||||
# Debug link tests
|
# Debug link tests
|
||||||
$(BUILD_DIR)/%/ld_test_dbg: $(SRCS) $(TEST_SRC)
|
$(BUILD_DIR)/%/ld_test_dbg: $(SRCS) $(TEST_SRC) $(BIN_SRC)
|
||||||
@$(CC) $(CFLAGS_DEBUG) -mcpu=$* ld_test.c -o $@ -L$(BUILD_DIR)/$* -l$(PROJECT_NAME)_dbg -lstdc++ -lm -specs=nosys.specs
|
@$(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
|
# Release link tests
|
||||||
$(BUILD_DIR)/%/ld_test: $(SRCS) $(TEST_SRC)
|
$(BUILD_DIR)/%/ld_test: $(SRCS) $(TEST_SRC) $(BIN_SRC)
|
||||||
@$(CC) $(CFLAGS_RELEASE) -mcpu=$* ld_test.c -o $@ -L$(BUILD_DIR)/$* -l$(PROJECT_NAME) -lstdc++ -lm -specs=nosys.specs
|
@$(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 for release - bundle debug and release versions for each architecture separately
|
||||||
package: all
|
package: all $(BIN_SRC)
|
||||||
@echo "Packaging for release..."
|
@echo "Packaging for release..."
|
||||||
@$(foreach arch, $(ARCHS), \
|
@$(foreach arch, $(ARCHS), \
|
||||||
mkdir -p release_$(arch)/lib; \
|
mkdir -p release_$(arch)/lib; \
|
||||||
@@ -72,6 +77,7 @@ package: all
|
|||||||
cp $(BUILD_DIR)/$(arch)/lib$(PROJECT_NAME).a release_$(arch)/lib/; \
|
cp $(BUILD_DIR)/$(arch)/lib$(PROJECT_NAME).a release_$(arch)/lib/; \
|
||||||
cp $(PACKAGE_HEADERS) release_$(arch)/include/; \
|
cp $(PACKAGE_HEADERS) release_$(arch)/include/; \
|
||||||
cp $(SRCS) release_$(arch)/dbg/cx9261a_c/; \
|
cp $(SRCS) release_$(arch)/dbg/cx9261a_c/; \
|
||||||
|
cp $(CURDIR)/cx9261a_riscv_bin.c release_$(arch)/; \
|
||||||
tar -czvf release_$(arch).tar.gz -C release_$(arch) .; \
|
tar -czvf release_$(arch).tar.gz -C release_$(arch) .; \
|
||||||
rm -rf release_$(arch); \
|
rm -rf release_$(arch); \
|
||||||
)
|
)
|
||||||
|
|||||||
Executable
BIN
Binary file not shown.
@@ -5,6 +5,17 @@
|
|||||||
#include "cx9261adriver.h"
|
#include "cx9261adriver.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
__attribute__((weak)) uint32_t CX9261A_RiscvBinLen = 0;
|
||||||
|
__attribute__((weak)) uint8_t *CX9261A_RiscvBin = nullptr;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace CX9261A {
|
namespace CX9261A {
|
||||||
|
|
||||||
void initialChip()
|
void initialChip()
|
||||||
@@ -672,6 +683,9 @@ void configRISCV(const bool on)
|
|||||||
if (on) {
|
if (on) {
|
||||||
writeSpi(0x071, 0x00);
|
writeSpi(0x071, 0x00);
|
||||||
writeSpi(0x071, 0x29);
|
writeSpi(0x071, 0x29);
|
||||||
|
for (size_t i = 0; i < CX9261A_RiscvBinLen; i++) {
|
||||||
|
writeSpi(0x070, CX9261A_RiscvBin[i]);
|
||||||
|
}
|
||||||
writeSpi(0x236, 0x0F);
|
writeSpi(0x236, 0x0F);
|
||||||
writeSpi(0x20A, 0x01);
|
writeSpi(0x20A, 0x01);
|
||||||
writeSpi(0x071, 0x26);
|
writeSpi(0x071, 0x26);
|
||||||
|
|||||||
Reference in New Issue
Block a user