@@ -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+ libraries+="./temp/${filename}.o "
126+ done < <(find "${LIBRARY_PATH}" -type f -name '*.c')
117127
118- first_file=$(ls ./firmware/${{ env.FirmwareName }}/${name##*/}/*.c| head -1)
119- filename=$(basename -- "$first_file")
120- filename="${filename%.*}"
128+ if [[ "${{ env.LIBRARY_PATH }}" == "${{ env.PROJECT_PATH }}" ]]; then
129+ rm -f ./temp/main.o
130+ libraries=$(echo "$libraries" | sed 's#\./temp/main\.o ##g')
131+ fi
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 }}
197+
198+ libraries+="./temp/${filename}.o "
199+ done < <(find "${LIBRARY_PATH}" -type f -name '*.c')
182200
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
201+ if [[ "${{ env.LIBRARY_PATH }}" == "${{ env.PROJECT_PATH }}" ]]; then
202+ rm -f ./temp/main.o
203+ libraries=$(echo "$libraries" | sed 's#\./temp/main\.o ##g')
204+ fi
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