Skip to content

Commit b1dd734

Browse files
committed
Change firmware pipeline
1 parent 6aacdd7 commit b1dd734

File tree

2 files changed

+186
-144
lines changed

2 files changed

+186
-144
lines changed

.github/workflows/build.yml

Lines changed: 93 additions & 72 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/lib"
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.md ${{ env.OUTPUT_FOLDER }}
97100
- name: Install zip
98101
run: sudo apt-get install -y zip
99102
- name: install-build-tools
@@ -106,32 +109,36 @@ 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%.*}"
110120
111-
libraries=""
121+
echo "Compiling: ${filename}.c from ${file}"
112122
113-
for dir in ./firmware/${{ env.FirmwareName }}/*/
114-
do
115-
name=${dir%*/}
116-
echo "Building ${name##*/}"
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 }}
117124
118-
first_file=$(ls ./firmware/${{ env.FirmwareName }}/${name##*/}/*.c| head -1)
119-
filename=$(basename -- "$first_file")
120-
filename="${filename%.*}"
125+
libraries+="./temp/${filename}.o "
126+
done < <(find "${LIBRARY_PATH}" -type f -name '*.c')
121127
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
128+
echo "Libraries: $libraries"
123129
124-
libraries+="./temp/${filename}.o "
125-
done
130+
./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 }}
126131
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
132+
./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 }}"
132133
133-
tar -czvf build.tar.gz ${{ env.OutputFolder }}
134-
zip -r build.zip ${{ env.OutputFolder }}
134+
./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"
135+
./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
136+
./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"
137+
./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"
138+
./avr8-gnu-toolchain-linux_x86_64/bin/avr-size "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf"
139+
140+
tar -czvf build.tar.gz ${{ env.OUTPUT_FOLDER }}
141+
zip -r build.zip ${{ env.OUTPUT_FOLDER }}
135142
136143
- name: upload-firmware
137144
uses: actions/upload-artifact@v4
@@ -145,16 +152,19 @@ jobs:
145152
TOOLCHAIN: "3.7.0.1796"
146153
DFP: "ATtiny_DFP.2.0.368"
147154
DEVICE: "attiny1606"
148-
OutputFolder: "./output"
149-
FirmwareName: "MAD_FW_1_0"
155+
OUTPUT_FOLDER: "./output"
156+
LIBRARY_PATH: "./firmware/lib"
157+
PROJECT_PATH: "./firmware/MAD_FW_1_0"
158+
FIRMWARE_NAME: "MAD_FW_1_0_t1606"
159+
PREPROCESSOR: "-DF_CPU=20000000UL"
150160
runs-on: ubuntu-latest
151161
steps:
152162
- name: Fetch repository
153-
uses: actions/checkout@v4
163+
uses: actions/checkout@v5
154164
- name: Copy License
155165
run: |
156-
mkdir ${{ env.OutputFolder }}
157-
cp ./LICENSE ${{ env.OutputFolder }}
166+
mkdir -p ${{ env.OUTPUT_FOLDER }}
167+
cp ./LICENSE.md ${{ env.OUTPUT_FOLDER }}
158168
- name: Install zip
159169
run: sudo apt-get install -y zip
160170
- name: install-build-tools
@@ -167,32 +177,36 @@ jobs:
167177
unzip *.atpack -d ./DFP
168178
- name: build-firmware
169179
run: |
170-
mkdir temp
180+
mkdir -p temp
181+
rm -rf ./temp/*
182+
183+
libraries=""
171184
172-
libraries=""
185+
while read -r file; do
186+
filename=$(basename -- "$file")
187+
filename="${filename%.*}"
173188
174-
for dir in ./firmware/${{ env.FirmwareName }}/*/
175-
do
176-
name=${dir%*/}
177-
echo "Building ${name##*/}"
189+
echo "Compiling: ${filename}.c from ${file}"
178190
179-
first_file=$(ls ./firmware/${{ env.FirmwareName }}/${name##*/}/*.c| head -1)
180-
filename=$(basename -- "$first_file")
181-
filename="${filename%.*}"
191+
./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 }}
182192
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
193+
libraries+="./temp/${filename}.o "
194+
done < <(find "${LIBRARY_PATH}" -type f -name '*.c')
184195
185-
libraries+="./temp/${filename}.o "
186-
done
196+
echo "Libraries: $libraries"
187197
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
198+
./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 }}
193199
194-
tar -czvf build.tar.gz ${{ env.OutputFolder }}
195-
zip -r build.zip ${{ env.OutputFolder }}
200+
./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 }}"
201+
202+
./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"
203+
./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
204+
./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"
205+
./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"
206+
./avr8-gnu-toolchain-linux_x86_64/bin/avr-size "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf"
207+
208+
tar -czvf build.tar.gz ${{ env.OUTPUT_FOLDER }}
209+
zip -r build.zip ${{ env.OUTPUT_FOLDER }}
196210
197211
- name: upload-firmware
198212
uses: actions/upload-artifact@v4
@@ -206,16 +220,19 @@ jobs:
206220
TOOLCHAIN: "3.7.0.1796"
207221
DFP: "ATmega_DFP.2.2.509"
208222
DEVICE: "atmega16a"
209-
OutputFolder: "./output"
210-
FirmwareName: "MAD_LIB"
223+
OUTPUT_FOLDER: "./output"
224+
LIBRARY_PATH: "./firmware/lib"
225+
PROJECT_PATH: "./firmware/MAD_LIB"
226+
FIRMWARE_NAME: "MAD_LIB_m16a"
227+
PREPROCESSOR: "-DF_CPU=12000000UL"
211228
runs-on: ubuntu-latest
212229
steps:
213230
- name: Fetch repository
214-
uses: actions/checkout@v4
231+
uses: actions/checkout@v5
215232
- name: Copy License
216233
run: |
217-
mkdir ${{ env.OutputFolder }}
218-
cp ./LICENSE ${{ env.OutputFolder }}
234+
mkdir -p ${{ env.OUTPUT_FOLDER }}
235+
cp ./LICENSE.md ${{ env.OUTPUT_FOLDER }}
219236
- name: Install zip
220237
run: sudo apt-get install -y zip
221238
- name: install-build-tools
@@ -228,32 +245,36 @@ jobs:
228245
unzip *.atpack -d ./DFP
229246
- name: build-firmware
230247
run: |
231-
mkdir temp
248+
mkdir -p temp
249+
rm -rf ./temp/*
250+
251+
libraries=""
252+
253+
while read -r file; do
254+
filename=$(basename -- "$file")
255+
filename="${filename%.*}"
256+
257+
echo "Compiling: ${filename}.c from ${file}"
232258
233-
libraries=""
259+
./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 }}
234260
235-
for dir in ./firmware/lib/*/
236-
do
237-
name=${dir%*/}
238-
echo "Building ${name##*/}"
261+
libraries+="./temp/${filename}.o "
262+
done < <(find "${LIBRARY_PATH}" -type f -name '*.c')
239263
240-
first_file=$(ls ./firmware/lib/${name##*/}/*.c| head -1)
241-
filename=$(basename -- "$first_file")
242-
filename="${filename%.*}"
264+
echo "Libraries: $libraries"
243265
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
266+
./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 }}
245267
246-
libraries+="./temp/${filename}.o "
247-
done
268+
./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 }}"
248269
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
270+
./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"
271+
./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
272+
./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"
273+
./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"
274+
./avr8-gnu-toolchain-linux_x86_64/bin/avr-size "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf"
254275
255-
tar -czvf build.tar.gz ${{ env.OutputFolder }}
256-
zip -r build.zip ${{ env.OutputFolder }}
276+
tar -czvf build.tar.gz ${{ env.OUTPUT_FOLDER }}
277+
zip -r build.zip ${{ env.OUTPUT_FOLDER }}
257278
258279
- name: upload-firmware-demo
259280
uses: actions/upload-artifact@v4

0 commit comments

Comments
 (0)