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
0 commit comments