Skip to content

Commit 3a6489b

Browse files
committed
Change firmware pipeline
1 parent 6271170 commit 3a6489b

File tree

2 files changed

+212
-150
lines changed

2 files changed

+212
-150
lines changed

.github/workflows/build.yml

Lines changed: 106 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -84,16 +84,19 @@ jobs:
8484
TOOLCHAIN: "3.7.0.1796"
8585
DFP: "ATtiny_DFP.2.0.368"
8686
DEVICE: "attiny406"
87-
OutputFolder: "./output"
88-
FirmwareName: "MAD_FW_1_0"
87+
OUTPUT_FOLDER: "./output"
88+
LIBRARY_PATH: "./firmware/MAD_FW_1_0"
89+
PROJECT_PATH: "./firmware/MAD_FW_1_0"
90+
FIRMWARE_NAME: "MAD_FW_1_0_t406"
91+
PREPROCESSOR: "-DF_CPU=20000000UL"
8992
runs-on: ubuntu-latest
9093
steps:
9194
- name: Fetch repository
92-
uses: actions/checkout@v4
95+
uses: actions/checkout@v5
9396
- name: Copy License
9497
run: |
95-
mkdir ${{ env.OutputFolder }}
96-
cp ./LICENSE ${{ env.OutputFolder }}
98+
mkdir -p ${{ env.OUTPUT_FOLDER }}
99+
cp ./LICENSE ${{ env.OUTPUT_FOLDER }}
97100
- name: Install zip
98101
run: sudo apt-get install -y zip
99102
- name: install-build-tools
@@ -106,55 +109,67 @@ jobs:
106109
unzip *.atpack -d ./DFP
107110
- name: build-firmware
108111
run: |
109-
mkdir temp
112+
mkdir -p temp
113+
rm -rf ./temp/*
114+
115+
libraries=""
116+
117+
while read -r file; do
118+
filename=$(basename -- "$file")
119+
filename="${filename%.*}"
120+
121+
echo "Compiling: ${filename}.c from ${file}"
110122
111-
libraries=""
123+
./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"./DFP/include" -Og -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=${{ env.DEVICE }} -B "./DFP/gcc/dev/${{ env.DEVICE }}" -c -std=gnu99 -MD -MP -MF "./temp/${filename}.d" -MT"./temp/${filename}.d" -MT"./temp/${filename}.o" -o "./temp/${filename}.o" "${file}" ${{ env.PREPROCESSOR }}
112124
113-
for dir in ./firmware/${{ env.FirmwareName }}/*/
114-
do
115-
name=${dir%*/}
116-
echo "Building ${name##*/}"
125+
if [[ "${{ env.LIBRARY_PATH }}" == "${{ env.PROJECT_PATH }}" ]]; then
126+
rm -f ./temp/main.o
127+
libraries=$(echo "$libraries" | sed 's#\./temp/main\.o ##g')
128+
fi
117129
118-
first_file=$(ls ./firmware/${{ env.FirmwareName }}/${name##*/}/*.c| head -1)
119-
filename=$(basename -- "$first_file")
120-
filename="${filename%.*}"
130+
libraries+="./temp/${filename}.o "
131+
done < <(find "${LIBRARY_PATH}" -type f -name '*.c')
121132
122-
./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -g -x c -O1 -mmcu=${{ env.DEVICE }} -std=gnu99 -B ./DFP/gcc/dev/${{ env.DEVICE }} -I ./DFP/include -c ./firmware/${{ env.FirmwareName }}/${name##*/}/${filename}.c -o ./temp/${filename}.o
133+
echo "Libraries: $libraries"
123134
124-
libraries+="./temp/${filename}.o "
125-
done
135+
./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"./DFP/include" -Og -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=${{ env.DEVICE }} -B "./DFP/gcc/dev/${{ env.DEVICE }}" -c -std=gnu99 -MD -MP -MF "./temp/main.d" -MT"./temp/main.d" -MT"./temp/main.o" -o "./temp/main.o" "./${{ env.PROJECT_PATH }}/main.c" ${{ env.PREPROCESSOR }}
126136
127-
./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -g -x c -O1 -mmcu=${{ env.DEVICE }} -std=gnu99 -B ./DFP/gcc/dev/${{ env.DEVICE }} -I ./DFP/include -c ./firmware/${{ env.FirmwareName }}/main.c -o ./temp/main.o
128-
./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -g -mmcu=${{ env.DEVICE }} -B ./DFP/gcc/dev/${{ env.DEVICE }} -I ./DFP/include -o ./temp/main.elf ./temp/main.o ${libraries}
129-
130-
./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -j .text -j .data -O ihex ./temp/main.elf ${{ env.OutputFolder }}/${{ env.FirmwareName }}_t406.hex
131-
./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -j .eeprom --change-section-lma .eeprom=0 -O ihex ./temp/main.elf ${{ env.OutputFolder }}/${{ env.FirmwareName }}_t406.eep
137+
./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -o "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf" ${libraries} ./temp/main.o -Wl,-Map="${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=${{ env.DEVICE }} -B "./DFP/gcc/dev/${{ env.DEVICE }}"
132138
133-
tar -czvf build.tar.gz ${{ env.OutputFolder }}
134-
zip -r build.zip ${{ env.OutputFolder }}
139+
./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf" "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.hex"
140+
./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf" "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.eep" || exit 0
141+
./avr8-gnu-toolchain-linux_x86_64/bin/avr-objdump -h -S "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf" > "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.lss"
142+
./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -O srec -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf" "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.srec"
143+
./avr8-gnu-toolchain-linux_x86_64/bin/avr-size "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf"
144+
145+
tar -czvf build.tar.gz ${{ env.OUTPUT_FOLDER }}
146+
zip -r build.zip ${{ env.OUTPUT_FOLDER }}
135147
136148
- name: upload-firmware
137149
uses: actions/upload-artifact@v4
138150
with:
139151
name: firmware-build-t406
140-
path: ${{ env.OutputFolder }}
152+
path: ${{ env.OUTPUT_FOLDER }}
141153
retention-days: 1
142154

143155
build-firmware-t1606:
144156
env:
145157
TOOLCHAIN: "3.7.0.1796"
146158
DFP: "ATtiny_DFP.2.0.368"
147159
DEVICE: "attiny1606"
148-
OutputFolder: "./output"
149-
FirmwareName: "MAD_FW_1_0"
160+
OUTPUT_FOLDER: "./output"
161+
LIBRARY_PATH: "./firmware/MAD_FW_1_0"
162+
PROJECT_PATH: "./firmware/MAD_FW_1_0"
163+
FIRMWARE_NAME: "MAD_FW_1_0_t1606"
164+
PREPROCESSOR: "-DF_CPU=20000000UL"
150165
runs-on: ubuntu-latest
151166
steps:
152167
- name: Fetch repository
153-
uses: actions/checkout@v4
168+
uses: actions/checkout@v5
154169
- name: Copy License
155170
run: |
156-
mkdir ${{ env.OutputFolder }}
157-
cp ./LICENSE ${{ env.OutputFolder }}
171+
mkdir -p ${{ env.OUTPUT_FOLDER }}
172+
cp ./LICENSE ${{ env.OUTPUT_FOLDER }}
158173
- name: Install zip
159174
run: sudo apt-get install -y zip
160175
- name: install-build-tools
@@ -167,55 +182,67 @@ jobs:
167182
unzip *.atpack -d ./DFP
168183
- name: build-firmware
169184
run: |
170-
mkdir temp
185+
mkdir -p temp
186+
rm -rf ./temp/*
187+
188+
libraries=""
171189
172-
libraries=""
190+
while read -r file; do
191+
filename=$(basename -- "$file")
192+
filename="${filename%.*}"
173193
174-
for dir in ./firmware/${{ env.FirmwareName }}/*/
175-
do
176-
name=${dir%*/}
177-
echo "Building ${name##*/}"
194+
echo "Compiling: ${filename}.c from ${file}"
178195
179-
first_file=$(ls ./firmware/${{ env.FirmwareName }}/${name##*/}/*.c| head -1)
180-
filename=$(basename -- "$first_file")
181-
filename="${filename%.*}"
196+
./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"./DFP/include" -Og -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=${{ env.DEVICE }} -B "./DFP/gcc/dev/${{ env.DEVICE }}" -c -std=gnu99 -MD -MP -MF "./temp/${filename}.d" -MT"./temp/${filename}.d" -MT"./temp/${filename}.o" -o "./temp/${filename}.o" "${file}" ${{ env.PREPROCESSOR }}
182197
183-
./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -g -x c -O1 -mmcu=${{ env.DEVICE }} -std=gnu99 -B ./DFP/gcc/dev/${{ env.DEVICE }} -I ./DFP/include -c ./firmware/${{ env.FirmwareName }}/${name##*/}/${filename}.c -o ./temp/${filename}.o
198+
if [[ "${{ env.LIBRARY_PATH }}" == "${{ env.PROJECT_PATH }}" ]]; then
199+
rm -f ./temp/main.o
200+
libraries=$(echo "$libraries" | sed 's#\./temp/main\.o ##g')
201+
fi
202+
203+
libraries+="./temp/${filename}.o "
204+
done < <(find "${LIBRARY_PATH}" -type f -name '*.c')
184205
185-
libraries+="./temp/${filename}.o "
186-
done
206+
echo "Libraries: $libraries"
187207
188-
./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -g -x c -O1 -mmcu=${{ env.DEVICE }} -std=gnu99 -B ./DFP/gcc/dev/${{ env.DEVICE }} -I ./DFP/include -c ./firmware/${{ env.FirmwareName }}/main.c -o ./temp/main.o
189-
./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -g -mmcu=${{ env.DEVICE }} -B ./DFP/gcc/dev/${{ env.DEVICE }} -I ./DFP/include -o ./temp/main.elf ./temp/main.o ${libraries}
190-
191-
./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -j .text -j .data -O ihex ./temp/main.elf ${{ env.OutputFolder }}/${{ env.FirmwareName }}_t1606.hex
192-
./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -j .eeprom --change-section-lma .eeprom=0 -O ihex ./temp/main.elf ${{ env.OutputFolder }}/${{ env.FirmwareName }}_t1606.eep
208+
./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"./DFP/include" -Og -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=${{ env.DEVICE }} -B "./DFP/gcc/dev/${{ env.DEVICE }}" -c -std=gnu99 -MD -MP -MF "./temp/main.d" -MT"./temp/main.d" -MT"./temp/main.o" -o "./temp/main.o" "./${{ env.PROJECT_PATH }}/main.c" ${{ env.PREPROCESSOR }}
193209
194-
tar -czvf build.tar.gz ${{ env.OutputFolder }}
195-
zip -r build.zip ${{ env.OutputFolder }}
210+
./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -o "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf" ${libraries} ./temp/main.o -Wl,-Map="${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=${{ env.DEVICE }} -B "./DFP/gcc/dev/${{ env.DEVICE }}"
211+
212+
./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf" "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.hex"
213+
./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf" "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.eep" || exit 0
214+
./avr8-gnu-toolchain-linux_x86_64/bin/avr-objdump -h -S "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf" > "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.lss"
215+
./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -O srec -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf" "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.srec"
216+
./avr8-gnu-toolchain-linux_x86_64/bin/avr-size "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf"
217+
218+
tar -czvf build.tar.gz ${{ env.OUTPUT_FOLDER }}
219+
zip -r build.zip ${{ env.OUTPUT_FOLDER }}
196220
197221
- name: upload-firmware
198222
uses: actions/upload-artifact@v4
199223
with:
200224
name: firmware-build-t1606
201-
path: ${{ env.OutputFolder }}
225+
path: ${{ env.OUTPUT_FOLDER }}
202226
retention-days: 1
203227

204228
build-firmware-demo:
205229
env:
206230
TOOLCHAIN: "3.7.0.1796"
207231
DFP: "ATmega_DFP.2.2.509"
208232
DEVICE: "atmega16a"
209-
OutputFolder: "./output"
210-
FirmwareName: "MAD_LIB"
233+
OUTPUT_FOLDER: "./output"
234+
LIBRARY_PATH: "./firmware/lib"
235+
PROJECT_PATH: "./firmware/MAD_LIB"
236+
FIRMWARE_NAME: "MAD_LIB_m16a"
237+
PREPROCESSOR: "-DF_CPU=12000000UL"
211238
runs-on: ubuntu-latest
212239
steps:
213240
- name: Fetch repository
214-
uses: actions/checkout@v4
241+
uses: actions/checkout@v5
215242
- name: Copy License
216243
run: |
217-
mkdir ${{ env.OutputFolder }}
218-
cp ./LICENSE ${{ env.OutputFolder }}
244+
mkdir -p ${{ env.OUTPUT_FOLDER }}
245+
cp ./LICENSE ${{ env.OUTPUT_FOLDER }}
219246
- name: Install zip
220247
run: sudo apt-get install -y zip
221248
- name: install-build-tools
@@ -228,36 +255,40 @@ jobs:
228255
unzip *.atpack -d ./DFP
229256
- name: build-firmware
230257
run: |
231-
mkdir temp
258+
mkdir -p temp
259+
rm -rf ./temp/*
232260
233-
libraries=""
261+
libraries=""
234262
235-
for dir in ./firmware/lib/*/
236-
do
237-
name=${dir%*/}
238-
echo "Building ${name##*/}"
263+
while read -r file; do
264+
filename=$(basename -- "$file")
265+
filename="${filename%.*}"
239266
240-
first_file=$(ls ./firmware/lib/${name##*/}/*.c| head -1)
241-
filename=$(basename -- "$first_file")
242-
filename="${filename%.*}"
267+
echo "Compiling: ${filename}.c from ${file}"
243268
244-
./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -g -x c -O1 -mmcu=${{ env.DEVICE }} -std=gnu99 -B ./DFP/gcc/dev/${{ env.DEVICE }} -I ./DFP/include -c ./firmware/lib/${name##*/}/${filename}.c -o ./temp/${filename}.o
269+
./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"./DFP/include" -Og -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=${{ env.DEVICE }} -B "./DFP/gcc/dev/${{ env.DEVICE }}" -c -std=gnu99 -MD -MP -MF "./temp/${filename}.d" -MT"./temp/${filename}.d" -MT"./temp/${filename}.o" -o "./temp/${filename}.o" "${file}" ${{ env.PREPROCESSOR }}
245270
246-
libraries+="./temp/${filename}.o "
247-
done
271+
libraries+="./temp/${filename}.o "
272+
done < <(find "${LIBRARY_PATH}" -type f -name '*.c')
248273
249-
./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -g -x c -O1 -mmcu=${{ env.DEVICE }} -std=gnu99 -B ./DFP/gcc/dev/${{ env.DEVICE }} -I ./DFP/include -c ./firmware/${{ env.FirmwareName }}/main.c -o ./temp/main.o
250-
./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -g -mmcu=${{ env.DEVICE }} -B ./DFP/gcc/dev/${{ env.DEVICE }} -I ./DFP/include -o ./temp/main.elf ./temp/main.o ${libraries}
251-
252-
./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -j .text -j .data -O ihex ./temp/main.elf ${{ env.OutputFolder }}/${{ env.FirmwareName }}_m16a.hex
253-
./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -j .eeprom --change-section-lma .eeprom=0 -O ihex ./temp/main.elf ${{ env.OutputFolder }}/${{ env.FirmwareName }}_m16a.eep
274+
echo "Libraries: $libraries"
254275
255-
tar -czvf build.tar.gz ${{ env.OutputFolder }}
256-
zip -r build.zip ${{ env.OutputFolder }}
276+
./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"./DFP/include" -Og -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=${{ env.DEVICE }} -B "./DFP/gcc/dev/${{ env.DEVICE }}" -c -std=gnu99 -MD -MP -MF "./temp/main.d" -MT"./temp/main.d" -MT"./temp/main.o" -o "./temp/main.o" "./${{ env.PROJECT_PATH }}/main.c" ${{ env.PREPROCESSOR }}
277+
278+
./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -o "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf" ${libraries} ./temp/main.o -Wl,-Map="${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=${{ env.DEVICE }} -B "./DFP/gcc/dev/${{ env.DEVICE }}"
279+
280+
./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf" "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.hex"
281+
./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf" "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.eep" || exit 0
282+
./avr8-gnu-toolchain-linux_x86_64/bin/avr-objdump -h -S "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf" > "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.lss"
283+
./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -O srec -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf" "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.srec"
284+
./avr8-gnu-toolchain-linux_x86_64/bin/avr-size "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf"
285+
286+
tar -czvf build.tar.gz ${{ env.OUTPUT_FOLDER }}
287+
zip -r build.zip ${{ env.OUTPUT_FOLDER }}
257288
258289
- name: upload-firmware-demo
259290
uses: actions/upload-artifact@v4
260291
with:
261292
name: firmware-demo-build
262-
path: ${{ env.OutputFolder }}
293+
path: ${{ env.OUTPUT_FOLDER }}
263294
retention-days: 1

0 commit comments

Comments
 (0)