Skip to content

Commit 7e13c9c

Browse files
cencarnamclaireb
authored andcommitted
tools: sharcfx: add base scripts for sharcfx
Signed-off-by: Cedric Encarnacion <cedricjustine.encarnacion@analog.com>
1 parent 1185294 commit 7e13c9c

File tree

3 files changed

+230
-0
lines changed

3 files changed

+230
-0
lines changed

tools/sharcfx/lib.mk

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# Set up targets
2+
OBJ_LIST := $(BUILD_DIR)/objs.txt
3+
LIB_BUILD := $(BUILD_DIR)/$(LIB)
4+
5+
# Set up target objects
6+
C_OBJS = $(patsubst %.c,$(BUILD_DIR)/%.o,$(subst ./,,$(C_SRCS)))
7+
CC_OBJS = $(patsubst %.cc,$(BUILD_DIR)/%.o,$(subst ./,,$(CC_SRCS)))
8+
CPP_OBJS = $(patsubst %.cpp,$(BUILD_DIR)/%.o,$(subst ./,,$(CPP_SRCS)))
9+
10+
SRC_OBJS = $(C_OBJS) $(CC_OBJS) $(CPP_OBJS)
11+
12+
# Initialize flags
13+
ifeq ($(CONFIG), RELEASE)
14+
FLAGS = -proc $(DEVICE) -si-revision 0.0 -c -O3 -LNO:simd -ffunction-sections -fdata-sections -fno-math-errno -mlongcalls -DCORE1 -DUART_REDIRECT -DNDEBUG $(INCLUDES) -MMD -MP
15+
CFG_DIR = Release
16+
else
17+
FLAGS = -proc $(DEVICE) -si-revision 0.0 -c -ffunction-sections -fdata-sections -fno-math-errno -mlongcalls -g -DCORE1 -D_DEBUG $(INCLUDES) -MMD -MP
18+
CFG_DIR = Debug
19+
endif
20+
21+
CC_FLAGS = $(FLAGS) -std=c++11 -stdlib=libc++
22+
C_FLAGS = $(FLAGS)
23+
24+
# Default rule
25+
all: prebuild $(LIB_BUILD)
26+
27+
# Rule to clean build directory
28+
clean:
29+
@echo '[RM] $(BUILD_DIR)'
30+
@rm -rf $(BUILD_DIR)
31+
32+
prebuild:
33+
@echo 'Building $(LIB_BUILD) for $(DEVICE) in $(CONFIG) configuration'
34+
@echo 'Using SHARCFX toolchain from $(SHARCFX_ROOT)'
35+
36+
$(LIB_BUILD): $(SRC_OBJS)
37+
@echo '[AR] Archiving to $(LIB_BUILD)'
38+
@$(AR) -r $(LIB_BUILD) @$(OBJ_LIST)
39+
@echo
40+
@echo '[AR] Done. See $(LIB_BUILD)'
41+
@cp $(LIB_BUILD) $(LIB_SRCS)/../Lib/$(CFG_DIR)/$(LIB)
42+
@echo '[CP] $(LIB_BUILD) -> $(LIB_SRCS)/../Lib/$(CFG_DIR)/$(LIB)'
43+
44+
$(BUILD_DIR)/%.o: %.c
45+
@mkdir -p $(dir $@)
46+
@echo '[CC] $<'
47+
@$(CC) $(C_FLAGS) -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
48+
@echo "\"./$@\"" >> $(OBJ_LIST)
49+
50+
$(BUILD_DIR)/%.o: %.cc
51+
@mkdir -p $(dir $@)
52+
@echo '[CX] $<'
53+
@$(CX) $(CC_FLAGS) -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
54+
@echo "\"./$@\"" >> $(OBJ_LIST)
55+
56+
$(BUILD_DIR)/%.o: %.cpp
57+
@mkdir -p $(dir $@)
58+
@echo '[CX] $<'
59+
@$(CX) $(CC_FLAGS) -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
60+
@echo "\"./$@\"" >> $(OBJ_LIST)
61+
62+
.PHONY: all clean

tools/sharcfx/project.mk

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
# Set up flashing variables
2+
MINRT_LSP := $(BUILD_DIR)/flash/min-rt
3+
FLASH_ALGO := $(SHARCFX_ROOT)/ARM/openocd/share/openocd/scripts/board/flash_algorithms/2183x_flash.dxe
4+
LSP := $(PROJECT_ROOT)/system/startup_lsp/lsp
5+
6+
ifeq ($(filter $(DEVICE), ADSP-SC835 ADSP-SC835W), $(DEVICE))
7+
PRELOADER := $(SHARCFX_ROOT)/Xtensa/SHARC-FX/ldr/ADSPSC835W-EV-SOM_initcode_core1.dxe
8+
else
9+
PRELOADER := $(SHARCFX_ROOT)/Xtensa/SHARC-FX/ldr/ADSP21835W-EV-SOM_initcode_core1.dxe
10+
endif
11+
12+
TMP := ./tmp
13+
SHARED_TMP := $(PROJECT_ROOT)/tmp/shared
14+
COMMON_TMP := $(PROJECT_ROOT)/tmp/common
15+
16+
# Set up project targets
17+
DXE := $(BUILD_DIR)/$(PROJECT).dxe
18+
FLASH_DXE := $(BUILD_DIR)/flash/$(PROJECT).dxe
19+
LDR := $(BUILD_DIR)/flash/$(PROJECT).ldr
20+
LIBTFLM := $(TFLM_ROOT)/../Lib/Release/libTFLM.a
21+
LIBNN := $(NN_ROOT)/Lib/Release/libadi_sharcfx_nn.a
22+
23+
# Set up object list
24+
OBJ_LIST := $(BUILD_DIR)/objs.txt
25+
26+
# Add default headers
27+
INCLUDES += \
28+
-I"$(TFLM_ROOT)" \
29+
-I"$(TFLM_ROOT)/third_party/gemmlowp" \
30+
-I"$(TFLM_ROOT)/third_party/flatbuffers/include"
31+
32+
33+
# Set up target objects
34+
C_OBJS = $(patsubst %.c,$(BUILD_DIR)/%.o,$(subst ./,,$(patsubst $(COMMON)/%.c, $(COMMON_TMP)/%.c, $(patsubst $(SHARED)/%.c,$(SHARED_TMP)/%.c,$(C_SRCS)))))
35+
CC_OBJS = $(patsubst %.cc,$(BUILD_DIR)/%.o,$(subst ./,,$(patsubst $(COMMON)/%.cc, $(COMMON_TMP)/%.cc, $(patsubst $(SHARED)/%.cc,$(SHARED_TMP)/%.cc,$(CC_SRCS)))))
36+
CPP_OBJS = $(patsubst %.cpp,$(BUILD_DIR)/%.o,$(subst ./,,$(patsubst $(COMMON)/%.cpp, $(COMMON_TMP)/%.cpp, $(patsubst $(SHARED)/%.cpp,$(SHARED_TMP)/%.cpp,$(CPP_SRCS)))))
37+
SYSCFG_OBJS = $(patsubst %.c,$(BUILD_DIR)/%.o,$(subst $(SHARCFX_ROOT)/,,$(subst ./,,$(SYSCFG_SRCS))))
38+
SRC_OBJS = $(C_OBJS) $(CC_OBJS) $(CPP_OBJS) $(SYSCFG_OBJS)
39+
FLASH_OBJS = $(filter-out $(BUILD_DIR)/$(subst ./,,$(LSP))/mpu_table.o ,$(SRC_OBJS)) $(MINRT_LSP)/mpu_table.o
40+
41+
# Set base flags based on build configuration
42+
ifeq ($(CONFIG), RELEASE)
43+
FLAGS = -proc $(DEVICE) -si-revision 0.0 -c -O3 -LNO:simd -ffunction-sections -fdata-sections -mlongcalls -DCORE1 -DUART_REDIRECT -DNDEBUG $(INCLUDES) -MMD -MP
44+
else
45+
FLAGS = -proc $(DEVICE) -si-revision 0.0 -c -ffunction-sections -fdata-sections -fno-math-errno -mlongcalls -g -DCORE1 -D_DEBUG $(INCLUDES) -MMD -MP
46+
endif
47+
48+
# Set compiler flags
49+
CC_FLAGS = $(FLAGS) -std=c++11 -stdlib=libc++
50+
C_FLAGS = $(FLAGS)
51+
L_FLAGS = -Wl,--gc-sections -Wl,--defsym=__prefctl_default=0x88 -L$(dir $(LIBTFLM)) -L$(dir $(LIBNN)) -lstdc++11 -stdlib=libc++
52+
CLDP_FLAGS = -cmd prog -erase affected -format bin -driver $(FLASH_ALGO)
53+
54+
# Default rule
55+
all: build
56+
57+
# Rule to clean build directory
58+
clean:
59+
@rm -rf $(BUILD_DIR)
60+
@echo '[RM] $(BUILD_DIR)'
61+
@echo '[RM] $(TMP)'
62+
@rm -rf $(TMP)
63+
64+
prebuild: $(TMP) $(MINRT_LSP)
65+
@echo '[MK] Building $(PROJECT) for $(DEVICE) in $(CONFIG) configuration'
66+
@echo 'Using SHARCFX toolchain from $(SHARCFX_ROOT)'
67+
68+
build: prebuild
69+
@$(MAKE) --no-print-directory build-target
70+
@rm -rf $(TMP)
71+
72+
# Rule for flashing to target
73+
flash: prebuild
74+
@$(MAKE) --no-print-directory flash-target
75+
@echo '[DP] Flashing to $(DEVICE) using $(DEBUGGER)'
76+
@$(CLDP) -proc $(DEVICE) -emu $(DEBUGGER) $(CLDP_FLAGS) -file $(LDR)
77+
78+
79+
build-target: $(DXE)
80+
81+
flash-target: $(LDR)
82+
83+
# Rule to build C objects
84+
$(BUILD_DIR)/%.o: %.c
85+
@mkdir -p $(dir $@)
86+
@echo '[CC] $<'
87+
@$(CC) $(C_FLAGS) -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
88+
@echo "\"./$@\"" >> $(OBJ_LIST)
89+
90+
# Rule to build C++ (.cc) objects
91+
$(BUILD_DIR)/%.o: %.cc
92+
@mkdir -p $(dir $@)
93+
@echo '[CX] $<'
94+
@$(CX) $(CC_FLAGS) -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
95+
@echo "\"./$@\"" >> $(OBJ_LIST)
96+
97+
# Rule to build C++ (.cpp) objects
98+
$(BUILD_DIR)/%.o: %.cpp
99+
@mkdir -p $(dir $@)
100+
@echo '[CX] $<'
101+
@$(CX) $(CC_FLAGS) -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
102+
@echo "\"./$@\"" >> $(OBJ_LIST)
103+
104+
# Rule to build driver objects
105+
$(BUILD_DIR)/$(SYSCFG_RDIR)/%.o: $(SYSCFG_DIR)/%.c
106+
@mkdir -p $(dir $@)
107+
@echo '[CC] $<'
108+
@$(CC) $(C_FLAGS) -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
109+
@echo "\"./$@\"" >> $(OBJ_LIST)
110+
111+
# Rule to compile to executable (.dxe)
112+
$(DXE): $(SRC_OBJS) $(LIBTFLM) $(LIBNN)
113+
@echo '[CX] Linking target to $@'
114+
@echo '[CX] Invoking: CrossCore SHARC-FX C++ Linker'
115+
@$(CX) -proc $(DEVICE) -si-revision 0.0 -mlsp="$(LSP)" $(L_FLAGS) -o "$(DXE)" @$(OBJ_LIST) -lTFLM -ladi_sharcfx_nn -lm
116+
@echo '[CX] Finished building target: $@'
117+
118+
$(TMP):
119+
@mkdir -p $(TMP)
120+
@echo '[MK] Fetching shared and common sources'
121+
@cp -r --no-preserve=timestamps $(SHARED) $(SHARED_TMP)
122+
@echo '[CP] $(SHARED) -> $(SHARED_TMP)'
123+
@cp -r --no-preserve=timestamps $(COMMON) $(COMMON_TMP)
124+
@echo '[CP] $(COMMON) -> $(COMMON_TMP)'
125+
126+
# Rule to set up LSP for flashing
127+
$(MINRT_LSP):
128+
@echo '[MK] Fetching min-rt LSP for flashing'
129+
@mkdir -p $(dir $(MINRT_LSP))
130+
@cp -r --no-preserve=timestamps $(SHARCFX_ROOT)/Xtensa/SHARC-FX/lsp/$(DEVICE)/min-rt $(dir $(MINRT_LSP))
131+
@echo '[CP] /Xtensa/SHARC-FX/lsp/$(DEVICE)/min-rt -> $(dir $(MINRT_LSP))'
132+
133+
# Rule to compile to executable (.dxe) for flashing
134+
$(FLASH_DXE): $(FLASH_OBJS)
135+
@mkdir -p $(dir $@)
136+
@echo '[CX] Linking target to $@'
137+
@echo '[CX] Invoking: CrossCore SHARC-FX C++ Linker'
138+
@$(CX) -proc $(DEVICE) -si-revision 0.0 -mlsp="$(MINRT_LSP)" $(L_FLAGS) -o "$(FLASH_DXE)" $(FLASH_OBJS) -lTFLM -ladi_sharcfx_nn -lm
139+
@echo '[CX] Finished building target: $@'
140+
141+
# Rule to compile loader image (.ldr) for flashing
142+
$(LDR): $(FLASH_DXE)
143+
@$(ELFLDR) -proc $(DEVICE) -si-revision 0.0 -bspi -fbinary -bcode 1 -init "$(PRELOADER)" -core1="$(FLASH_DXE)"
144+
145+
.PHONY: all clean run flash

tools/sharcfx/sharcfx.mk

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Set up roots/directories
2+
SHARCFX_ROOT := C:/analog/cces/3.0.2
3+
SHARCFX_ROOT_VER := $(shell echo $(SHARCFX_ROOT) | grep -oP '\d+\.\d+\.\d+')
4+
TFLM_ROOT := ../../../TFLM/src
5+
NN_ROOT := ../../../adi_sharcfx_nn
6+
SYSCFG_RDIR := Xtensa/SHARC-FX/lib/src
7+
SYSCFG_DIR := $(SHARCFX_ROOT)/$(SYSCFG_RDIR)
8+
DRIVER_DIR := $(SYSCFG_DIR)/drivers
9+
SERVICE_DIR := $(SYSCFG_DIR)/services
10+
MAKE := make
11+
12+
# Set up toolchains
13+
CX := $(SHARCFX_ROOT)/ccfx++
14+
CC := $(SHARCFX_ROOT)/ccfx
15+
AR := $(SHARCFX_ROOT)/Xtensa/XtensaTools/bin/xt-ar
16+
GDB := $(SHARCFX_ROOT)/Xtensa/XtensaTools/bin/xt-gdb
17+
RUN := $(SHARCFX_ROOT)/Xtensa/XtensaTools/bin/xt-run
18+
ELFLDR := $(SHARCFX_ROOT)/elfloader
19+
CLDP := $(SHARCFX_ROOT)/cldp
20+
21+
# Set up default variables
22+
DEVICE := ADSP-SC835
23+
CONFIG := RELEASE

0 commit comments

Comments
 (0)