Skip to content

Commit 8eb5bde

Browse files
committedNov 9, 2022
scripts: update for supporting MPLAB XC32
Signed-off-by: Tony Han <[email protected]>
1 parent c511714 commit 8eb5bde

8 files changed

+181
-18
lines changed
 

‎scripts/Makefile.freertos

+1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ CFLAGS_INC += -I$(TOP)/$(FREERTOS_SOURCE_TOP)/Demo/Common/include
4343
CFLAGS_INC += -I$(TOP)/$(FREERTOS_PORT)/$(chip-family)/
4444
iar-cstartup-y := $(FREERTOS_PORT)/$(chip-family)/iar/cstartup_freertos.o $(FREERTOS_PORT)/$(chip-family)/iar/portASM.o
4545
gnu-cstartup-y := $(FREERTOS_PORT)/$(chip-family)/gcc/cstartup_freertos.o $(FREERTOS_PORT)/$(chip-family)/gcc/portASM.o
46+
xc32-cstartup-y := $(FREERTOS_PORT)/$(chip-family)/xc32/cstartup_freertos.o $(FREERTOS_PORT)/$(chip-family)/xc32/portASM.o
4647
libfreertos-y += $(FREERTOS_PORT)/$(chip-family)/port.o
4748
libfreertos-y += $(FREERTOS_PORT)/$(chip-family)/FreeRTOS_tick_config.o
4849

‎scripts/Makefile.mplab

+4-1
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,13 @@ mplab-env:
4343
$(Q)touch .mplab-$(VARIANT).sh
4444
$(Q)echo TOP=\"$(TOP)\" >> .mplab-$(VARIANT).sh
4545
$(Q)echo CFLAGS_CPU=\"$(CFLAGS_CPU) -std=gnu99\" >> .mplab-$(VARIANT).sh
46-
$(Q)echo CFLAGS_DEFS=\"$(subst \",\\\",$(CFLAGS_DEFS))\" >> .mplab-$(VARIANT).sh
46+
$(Q)echo CFLAGS_DEFS=\"$(subst \",\&quot;,$(CFLAGS_DEFS))\" >> .mplab-$(VARIANT).sh
47+
4748
$(Q)echo CFLAGS_INC=\"$(CFLAGS_INC)\" >> .mplab-$(VARIANT).sh
49+
$(Q)echo xc32_linker_script_y=\"$(xc32-linker-script-y)\" >> .mplab-$(VARIANT).sh
4850
$(Q)echo gnu_linker_script_y=\"$(gnu-linker-script-y)\" >> .mplab-$(VARIANT).sh
4951
$(Q)echo target_y=\"$(target-y)\" >> .mplab-$(VARIANT).sh
52+
$(Q)echo startup_XC32=\"$(xc32-cstartup-y)\" >> .mplab-$(VARIANT).sh
5053
$(Q)echo startup_ARM=\"$(gnu-cstartup-y)\" >> .mplab-$(VARIANT).sh
5154
$(Q)echo utils_y=\"$(utils-y)\" >> .mplab-$(VARIANT).sh
5255
$(Q)echo arch_y=\"$(arch-y)\" >> .mplab-$(VARIANT).sh

‎scripts/Makefile.rules

+4
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,11 @@ include $(TOP)/scripts/Makefile.freertos
5050
vpath %.c $(TOP)
5151
vpath %.S $(TOP)
5252

53+
ifeq ($(CROSS_COMPILE),xc32-)
54+
OBJS := $(addprefix $(BUILDDIR)/,$(xc32-cstartup-y) $(obj-y))
55+
else
5356
OBJS := $(addprefix $(BUILDDIR)/,$(gnu-cstartup-y) $(obj-y))
57+
endif
5458
LIBS := $(addprefix $(BUILDDIR)/,$(lib-y))
5559

5660
-include $(OBJS:.o=.d)

‎scripts/Makefile.vars

+15-1
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,9 @@ SIZE = $(CROSS_COMPILE)size
7272
STRIP = $(CROSS_COMPILE)strip
7373
OBJCOPY = $(CROSS_COMPILE)objcopy
7474
GDB = $(CROSS_COMPILE)gdb
75+
ifeq ($(CROSS_COMPILE),xc32-)
76+
GDB = arm-none-eabi-gdb
77+
endif
7578
NM = $(CROSS_COMPILE)nm
7679
AR = $(CROSS_COMPILE)ar
7780

@@ -100,7 +103,10 @@ CFLAGS += -Waggregate-return -Wstrict-prototypes
100103
CFLAGS += -Wmissing-prototypes -Wmissing-declarations
101104
CFLAGS += -Wformat -Wmissing-format-attribute -Wno-deprecated-declarations
102105
CFLAGS += -Wredundant-decls -Wnested-externs -Winline
103-
CFLAGS += -Wunreachable-code -Wno-aggregate-return -Wall -Dprintf=iprintf
106+
CFLAGS += -Wunreachable-code -Wno-aggregate-return -Wall
107+
ifneq ($(CROSS_COMPILE),xc32-)
108+
CFLAGS += -Dprintf=iprintf
109+
endif
104110
CFLAGS += -ffunction-sections -fdata-sections
105111
CFLAGS += -std=gnu99
106112
CFLAGS += $(CFLAGS_OPT)
@@ -134,6 +140,14 @@ CFLAGS_DEFS += -DVARIANT_$(shell echo $(VARIANT) | tr '[:lower:]' '[:upper:]')
134140
LDFLAGS = --specs=nano.specs -Wl,--cref -Wl,--check-sections -Wl,--gc-sections
135141
LDFLAGS += -Wl,--unresolved-symbols=report-all -Wl,--warn-common
136142
LDFLAGS += -Wl,--sort-section=alignment -lgcc -lc
143+
COMPILER = gnu
144+
ifeq ($(CROSS_COMPILE),xc32-)
145+
COMPILER = xc32
146+
LDFLAGS = -Wl,--cref -Wl,--check-sections -Wl,--gc-sections
147+
LDFLAGS += -Wl,--defsym=_min_heap_size=2048 -mno-device-startup-code
148+
LDFLAGS += -Wl,--unresolved-symbols=report-all -Wl,--warn-common
149+
LDFLAGS += -Wl,--sort-section=alignment
150+
endif
137151

138152
# include target-specific config
139153
include $(TOP)/scripts/Makefile.vars.sam9xx5

‎scripts/Makefile.vars.sam9x60

+5-1
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,10 @@ ifeq ($(CONFIG_CHIP_SAM9X60),y)
121121
CONFIG_HAVE_EMAC = y
122122
endif
123123

124-
CFLAGS_CPU += -mcpu=arm926ej-s -mfloat-abi=soft
124+
ifeq ($(CROSS_COMPILE),xc32-)
125+
CFLAGS_CPU += -mprocessor=ATSAM9X60
126+
else
127+
CFLAGS_CPU += -mcpu=arm926ej-s -mfloat-abi=soft
128+
endif
125129

126130
endif

‎scripts/Makefile.vars.sama5d2

+5-2
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,9 @@ ifeq ($(CONFIG_CHIP_SAMA5D28),y)
196196
CONFIG_HAVE_MCAN = y
197197
endif
198198

199-
CFLAGS_CPU += -mcpu=cortex-a5 -mfpu=vfpv4-d16 -mfloat-abi=hard
200-
199+
ifeq ($(CROSS_COMPILE),xc32-)
200+
CFLAGS_CPU += -mprocessor=ATSAMA5D27
201+
else
202+
CFLAGS_CPU += -mcpu=cortex-a5 -mfpu=vfpv4-d16 -mfloat-abi=hard
203+
endif
201204
endif

‎scripts/mplab_configurations.template

+107-2
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@
6161
<property key="no-system-directories" value="false"/>
6262
<property key="optimization-level" value="-Os"/>
6363
<property key="position-independent" value="false"/>
64-
<property key="preprocessor-macros" value=""/>
64+
<property key="preprocessor-macros"__REPLACE_DEFINES__
65+
/>
6566
<property key="preprocessor-macros-undefined" value=""/>
6667
<property key="strict-ansi" value="false"/>
6768
<property key="strict-ansi-errors" value="false"/>
@@ -100,8 +101,112 @@
100101
<property key="sram-segment" value=""/>
101102
<property key="unsafe-math" value="false"/>
102103
</ARM-LD>
104+
<C32>
105+
<property key="additional-warnings" value="true"/>
106+
<property key="addresss-attribute-use" value="false"/>
107+
<property key="enable-app-io" value="false"/>
108+
<property key="enable-omit-frame-pointer" value="false"/>
109+
<property key="enable-symbols" value="true"/>
110+
<property key="enable-unroll-loops" value="false"/>
111+
<property key="exclude-floating-point" value="false"/>
112+
<property key="extra-include-directories" value=""/>
113+
<property key="generate-16-bit-code" value="false"/>
114+
<property key="generate-micro-compressed-code" value="false"/>
115+
<property key="isolate-each-function" value="true"/>
116+
<property key="make-warnings-into-errors" value="false"/>
117+
<property key="optimization-level" value="-O1"/>
118+
<property key="place-data-into-section" value="true"/>
119+
<property key="post-instruction-scheduling" value="default"/>
120+
<property key="pre-instruction-scheduling" value="default"/>
121+
<property key="preprocessor-macros"__REPLACE_DEFINES__
122+
/>
123+
<property key="strict-ansi" value="false"/>
124+
<property key="support-ansi" value="false"/>
125+
<property key="toplevel-reordering" value=""/>
126+
<property key="unaligned-access" value=""/>
127+
<property key="use-cci" value="false"/>
128+
<property key="use-iar" value="false"/>
129+
<property key="use-indirect-calls" value="false"/>
130+
</C32>
131+
<C32-AR>
132+
<property key="additional-options-chop-files" value="false"/>
133+
</C32-AR>
134+
<C32-AS>
135+
<property key="assembler-symbols" value=""/>
136+
<property key="enable-symbols" value="true"/>
137+
<property key="exclude-floating-point-library" value="false"/>
138+
<property key="expand-macros" value="false"/>
139+
<property key="extra-include-directories-for-assembler" value=""/>
140+
<property key="extra-include-directories-for-preprocessor" value=""/>
141+
<property key="false-conditionals" value="false"/>
142+
<property key="generate-16-bit-code" value="false"/>
143+
<property key="generate-micro-compressed-code" value="false"/>
144+
<property key="keep-locals" value="false"/>
145+
<property key="list-assembly" value="false"/>
146+
<property key="list-source" value="false"/>
147+
<property key="list-symbols" value="false"/>
148+
<property key="oXC32asm-list-to-file" value="false"/>
149+
<property key="omit-debug-dirs" value="false"/>
150+
<property key="omit-forms" value="false"/>
151+
<property key="preprocessor-macros" value=""/>
152+
<property key="warning-level" value=""/>
153+
</C32-AS>
154+
<C32-CO>
155+
<property key="coverage-enable" value="false"/>
156+
</C32-CO>
157+
<C32-LD>
158+
<property key="additional-options-use-response-files" value="false"/>
159+
<property key="additional-options-write-sla" value="false"/>
160+
<property key="allocate-dinit" value="false"/>
161+
<property key="code-dinit" value="false"/>
162+
<property key="ebase-addr" value=""/>
163+
<property key="enable-check-sections" value="false"/>
164+
<property key="exclude-floating-point-library" value="false"/>
165+
<property key="exclude-standard-libraries" value="false"/>
166+
<property key="extra-lib-directories" value=""/>
167+
<property key="fill-flash-options-addr" value=""/>
168+
<property key="fill-flash-options-const" value=""/>
169+
<property key="fill-flash-options-how" value="0"/>
170+
<property key="fill-flash-options-inc-const" value="1"/>
171+
<property key="fill-flash-options-increment" value=""/>
172+
<property key="fill-flash-options-seq" value=""/>
173+
<property key="fill-flash-options-what" value="0"/>
174+
<property key="generate-16-bit-code" value="false"/>
175+
<property key="generate-cross-reference-file" value="false"/>
176+
<property key="generate-micro-compressed-code" value="false"/>
177+
<property key="heap-size" value=""/>
178+
<property key="input-libraries" value=""/>
179+
<property key="kseg-length" value=""/>
180+
<property key="kseg-origin" value=""/>
181+
<property key="linker-symbols" value=""/>
182+
<property key="map-file" value="${DISTDIR}/${PROJECTNAME}.${IMAGE_TYPE}.map"/>
183+
<property key="no-device-startup-code" value="true"/>
184+
<property key="no-startup-files" value="false"/>
185+
<property key="oXC32ld-extra-opts" value=""/>
186+
<property key="optimization-level" value=""/>
187+
<property key="preprocessor-macros" value=""/>
188+
<property key="remove-unused-sections" value="true"/>
189+
<property key="report-memory-usage" value="false"/>
190+
<property key="serial-length" value=""/>
191+
<property key="serial-origin" value=""/>
192+
<property key="stack-size" value=""/>
193+
<property key="symbol-stripping" value=""/>
194+
<property key="trace-symbols" value=""/>
195+
<property key="warn-section-align" value="false"/>
196+
</C32-LD>
197+
<C32Global>__REPLACE_INCLUDES__
198+
<property key="gp-relative-option" value=""/>
199+
<property key="legacy-libc" value="false"/>
200+
<property key="mdtcm" value=""/>
201+
<property key="mitcm" value=""/>
202+
<property key="mstacktcm" value="false"/>
203+
<property key="omit-pack-options" value="1"/>
204+
<property key="relaxed-math" value="false"/>
205+
<property key="save-temps" value="false"/>
206+
<property key="stack-smashing" value=""/>
207+
</C32Global>
103208
<jlink>
104-
<property key="AutoSelectMemRanges" value="manual"/>
209+
<property key="AutoSelectMemRanges" value="auto"/>
105210
<property key="communication.autoselectspeed" value="true"/>
106211
<property key="communication.interface" value="4wire"/>
107212
<property key="communication.speed" value="4"/>

‎scripts/mplab_project.sh

+40-11
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ DEBUG_TEMPLATE="$8"
1616
### Global variable
1717
SCRIPTS="$DIR/$TOP/scripts"
1818
folder_idx=1
19-
TOOLCHAINS="ARM"
19+
TOOLCHAINS="ARM XC32"
2020

2121
tpl-split() {
2222
local template_src="$1"
@@ -119,10 +119,19 @@ tpl-set-version() {
119119
}
120120

121121
tpl-set-defines() {
122-
echo "$CFLAGS_DEFS" > ${TARGET}.X/compile_options_$2_$3
123-
if [ $3 = "ARM" ]; then
124-
sed -i -e 's/\"/\\\"/g' ${TARGET}.X/compile_options_$2_$3
125-
fi
122+
local tpl="$1"
123+
local tmpxml=`mktemp -p "$DIR"`
124+
echo -n " value=\"" > "$tmpxml"
125+
for flag in $CFLAGS_DEFS; do
126+
flag=${flag//:/ }
127+
echo -n "${flag//-D/};"
128+
done >> "$tmpxml"
129+
echo -n "\"" >> "$tmpxml"
130+
131+
sed -i -e "/__REPLACE_DEFINES__/r $tmpxml" "$tpl"
132+
sed -i -e "s/__REPLACE_DEFINES__//g" "$tpl"
133+
134+
rm -f "$tmpxml" 2>&1 > /dev/null
126135
}
127136

128137
tpl-set-includes() {
@@ -147,7 +156,9 @@ tpl-set-linker-script() {
147156
local script_path=""
148157

149158
for toolchain in ${TOOLCHAINS}; do
150-
if [ $toolchain = "ARM" ]; then
159+
if [ $toolchain = "XC32" ]; then
160+
script_path=$xc32_linker_script_y
161+
elif [ $toolchain = "ARM" ]; then
151162
script_path=${gnu_linker_script_y%/*}/
152163
else
153164
echo "Compiler Toolchain $toolchain is not supported!" 1>&2
@@ -214,10 +225,12 @@ tpl-set-chip() {
214225
echo "SET CHIP=$chip"
215226
if [ "$chip" = ATSAM9X60 ]; then
216227
sed -i "s/__REPLACE_CHIP__/SAM9X60/g" "$tpl"
217-
sed -i "s/__REPLACE_DFP__/<pack name=\"SAM9X6_DFP\" vendor=\"Microchip\" version=\"1.5.50\"\/>/g" "$tpl"
228+
sed -i "s/__REPLACE_DFP__/<pack name=\"SAM9X6_DFP\" vendor=\"Microchip\" version=\"1.7.85\"\/>/g" "$tpl"
229+
sed -i "s/__REPLACE_ADDITIONAL_OPT__/\n <appendMe value=\"-mfloat-abi=soft\"\/>/g" "$tpl"
218230
elif [ "$chip" = ATSAMA5D27 ]; then
219231
sed -i "s/__REPLACE_CHIP__/$chip/g" "$tpl"
220-
sed -i "s/__REPLACE_DFP__/<pack name=\"SAMA5D2_DFP\" vendor=\"Microchip\" version=\"1.5.53\"\/>/g" "$tpl"
232+
sed -i "s/__REPLACE_DFP__/<pack name=\"SAMA5D2_DFP\" vendor=\"Microchip\" version=\"1.9.106\"\/>/g" "$tpl"
233+
sed -i "s/__REPLACE_ADDITIONAL_OPT__/\n <appendMe value=\"-mfloat-abi=hard\"\/>/g" "$tpl"
221234
fi
222235
}
223236

@@ -235,15 +248,30 @@ generate-bodies-conf() {
235248
tpl-set-configuration "$tpl" $TARGET ${variant}_${toolchain}
236249

237250
local tmpxml=`mktemp -p "$DIR"`
238-
if [ $toolchain = "ARM" ]; then
251+
if [ $toolchain = "XC32" ]; then
252+
for var in $AVAILABLE_VARIANTS; do
253+
if [ ! $var = $variant ]; then
254+
echo "<item path=\"../${xc32_linker_script_y}$var.ld\" ex=\"true\" overriding=\"false\"></item>" >> $tmpxml
255+
fi
256+
echo "<item path=\"../${gnu_linker_script_y%/*}/$var.ld\" ex=\"true\" overriding=\"false\"></item>" >> $tmpxml
257+
done
258+
for path in ${startup_ARM}; do
259+
path=$(find-source "$DIR/$TOP" "$path")
260+
echo "<item path=\"../../../$path\" ex=\"true\" overriding=\"false\"></item>" >> $tmpxml
261+
done
262+
sed -i -e "s/__REPLACE_TOOLCHAIN_VERSION__//g" "$tpl"
263+
elif [ $toolchain = "ARM" ]; then
239264
for var in $AVAILABLE_VARIANTS; do
240265
if [ ! $var = $variant ]; then
241266
echo "<item path=\"../${gnu_linker_script_y%/*}/$var.ld\" ex=\"true\" overriding=\"false\"></item>" >> $tmpxml
242267
fi
243-
echo "<item path=\"../$mplab_linker_script_y$var.ld\" ex=\"true\" overriding=\"false\"></item>" >> $tmpxml
268+
echo "<item path=\"../$xc32_linker_script_y$var.ld\" ex=\"true\" overriding=\"false\"></item>" >> $tmpxml
269+
done
270+
for path in ${startup_XC32}; do
271+
path=$(find-source "$DIR/$TOP" "$path")
272+
echo "<item path=\"../../../$path\" ex=\"true\" overriding=\"false\"></item>" >> $tmpxml
244273
done
245274
sed -i -e "s/__REPLACE_TOOLCHAIN_VERSION__/10.2.1/g" "$tpl"
246-
sed -i "s/__REPLACE_ADDITIONAL_OPT__/\n <appendMe value=\"@compile_options_${variant}_${toolchain} $CFLAGS_CPU\"\/>/g" "$tpl"
247275
else
248276
echo "Compiler Toolchain $toolchain is not supported!" 1>&2
249277
exit 3
@@ -307,6 +335,7 @@ generate-conf() {
307335
tpl-set-deps "$tpl" "uip" "$uip_y"
308336
tpl-set-deps "$tpl" "target" "$target_y"
309337
tpl-set-deps "$tpl" "startup_ARM" "$startup_ARM"
338+
tpl-set-deps "$tpl" "startup_XC32" "$startup_XC32"
310339
tpl-set-deps "$tpl" "lwip" "$lwip_y"
311340
tpl-set-deps "$tpl" "libsdmmc" "$libsdmmc_y"
312341
tpl-set-deps "$tpl" "libfatfs" "$libfatfs_y"

0 commit comments

Comments
 (0)
Please sign in to comment.