@@ -81,16 +81,19 @@ jobs:
8181 TOOLCHAIN : " 3.7.0.1796"
8282 DFP : " ATtiny_DFP.2.0.368"
8383 DEVICE : " attiny1606"
84- OutputFolder : " ./output"
85- FirmwareName : " DIU_FW_1_0"
84+ OUTPUT_FOLDER : " ./output"
85+ LIBRARY_PATH : " ./firmware/lib"
86+ PROJECT_PATH : " ./firmware/DIU_FW_1_0"
87+ FIRMWARE_NAME : " DIU_FW_1_0_t1606"
88+ PREPROCESSOR : " -DF_CPU=12000000UL"
8689 runs-on : ubuntu-latest
8790 steps :
8891 - name : Fetch repository
89- uses : actions/checkout@v4
92+ uses : actions/checkout@v5
9093 - name : Copy License
9194 run : |
92- mkdir ${{ env.OutputFolder }}
93- cp ./LICENSE ${{ env.OutputFolder }}
95+ mkdir -p ${{ env.OUTPUT_FOLDER }}
96+ cp ./LICENSE ${{ env.OUTPUT_FOLDER }}
9497 - name : Install zip
9598 run : sudo apt-get install -y zip
9699 - name : install-build-tools
@@ -103,55 +106,73 @@ jobs:
103106 unzip *.atpack -d ./DFP
104107 - name : build-firmware
105108 run : |
106- mkdir temp
107-
108- libraries=""
109+ mkdir -p temp
110+ rm -rf ./temp/*
109111
110- for dir in ./firmware/lib/*/
111- do
112- name=${dir%*/}
113- echo "Building ${name##*/}"
112+ build_with_defines() {
113+ local defines="$1"
114+ local libraries=""
114115
115- first_file=$(ls ./firmware/lib/${name##*/}/*.c| head -1)
116- filename=$(basename -- "$first_file ")
116+ while read -r file; do
117+ local filename=$(basename -- "$file ")
117118 filename="${filename%.*}"
118119
119- ./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
120+ ./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -g -x c -O1 -mmcu=${{ env.DEVICE }} -std=gnu99 \
121+ -B ./DFP/gcc/dev/${{ env.DEVICE }} \
122+ $defines \
123+ -I ./DFP/include -c "${file}" -o "./temp/${filename}.o"
120124
121125 libraries+="./temp/${filename}.o "
122- done
126+ done < <(find "${{ env.LIBRARY_PATH }}" -type f -name '*.c')
123127
124- ./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
125- ./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 }
128+ echo "$libraries"
129+ }
126130
127- ./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -j .text -j .data -O ihex ./temp/main.elf ${{ env.OutputFolder }}/${{ env.FirmwareName }}_t1606.hex
128- ./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
131+ ./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -g -x c -O1 -mmcu=${{ env.DEVICE }} -std=gnu99 \
132+ -B ./DFP/gcc/dev/${{ env.DEVICE }} \
133+ -I ./DFP/include \
134+ ${{ env.PREPROCESSOR }} \
135+ -c ${{ env.PROJECT_PATH }}/main.c -o ./main.o
136+ ./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -g -mmcu=${{ env.DEVICE }} \
137+ -B ./DFP/gcc/dev/${{ env.DEVICE }} \
138+ -I ./DFP/include \
139+ -o ./main.elf ./main.o \
140+ ${{ env.PREPROCESSOR }} \
141+ $(build_with_defines "${{ env.PREPROCESSOR }}")
142+
143+ ./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -j .text -j .data \
144+ -O ihex ./main.elf ${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.hex
145+ ./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -j .eeprom --change-section-lma .eeprom=0 \
146+ -O ihex ./main.elf ${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.eep
129147
130- tar -czvf build.tar.gz ${{ env.OutputFolder }}
131- zip -r build.zip ${{ env.OutputFolder }}
148+ tar -czvf build.tar.gz ${{ env.OUTPUT_FOLDER }}
149+ zip -r build.zip ${{ env.OUTPUT_FOLDER }}
132150
133151 - name : upload-firmware
134152 uses : actions/upload-artifact@v4
135153 with :
136154 name : firmware-build
137- path : ${{ env.OutputFolder }}
155+ path : ${{ env.OUTPUT_FOLDER }}
138156 retention-days : 1
139-
157+
140158 build-test-firmware :
141159 env :
142160 TOOLCHAIN : " 3.7.0.1796"
143161 DFP : " ATtiny_DFP.2.0.368"
144162 DEVICE : " attiny1606"
145- OutputFolder : " ./output"
146- FirmwareName : " DIU_TEST"
163+ OUTPUT_FOLDER : " ./output"
164+ LIBRARY_PATH : " ./firmware/lib"
165+ PROJECT_PATH : " ./firmware/DIU_TEST"
166+ FIRMWARE_NAME : " DIU_TEST_t1606"
167+ PREPROCESSOR : " -DF_CPU=12000000UL"
147168 runs-on : ubuntu-latest
148169 steps :
149170 - name : Fetch repository
150- uses : actions/checkout@v4
171+ uses : actions/checkout@v5
151172 - name : Copy License
152173 run : |
153- mkdir ${{ env.OutputFolder }}
154- cp ./LICENSE ${{ env.OutputFolder }}
174+ mkdir -p ${{ env.OUTPUT_FOLDER }}
175+ cp ./LICENSE ${{ env.OUTPUT_FOLDER }}
155176 - name : Install zip
156177 run : sudo apt-get install -y zip
157178 - name : install-build-tools
@@ -164,40 +185,55 @@ jobs:
164185 unzip *.atpack -d ./DFP
165186 - name : build-firmware
166187 run : |
167- mkdir temp
168-
169- libraries=""
188+ mkdir -p temp
189+ rm -rf ./temp/*
170190
171- for dir in ./firmware/lib/*/
172- do
173- name=${dir%*/}
174- echo "Building ${name##*/}"
191+ build_with_defines() {
192+ local defines="$1"
193+ local libraries=""
175194
176- first_file=$(ls ./firmware/lib/${name##*/}/*.c| head -1)
177- filename=$(basename -- "$first_file ")
195+ while read -r file; do
196+ local filename=$(basename -- "$file ")
178197 filename="${filename%.*}"
179198
180- ./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
199+ ./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -g -x c -O1 -mmcu=${{ env.DEVICE }} -std=gnu99 \
200+ -B ./DFP/gcc/dev/${{ env.DEVICE }} \
201+ $defines \
202+ -I ./DFP/include -c "${file}" -o "./temp/${filename}.o"
181203
182204 libraries+="./temp/${filename}.o "
183- done
205+ done < <(find "${{ env.LIBRARY_PATH }}" -type f -name '*.c')
184206
185- ./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
186- ./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 }
207+ echo "$libraries"
208+ }
187209
188- ./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -j .text -j .data -O ihex ./temp/main.elf ${{ env.OutputFolder }}/${{ env.FirmwareName }}_t1606.hex
189- ./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
210+ ./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -g -x c -O1 -mmcu=${{ env.DEVICE }} -std=gnu99 \
211+ -B ./DFP/gcc/dev/${{ env.DEVICE }} \
212+ -I ./DFP/include \
213+ ${{ env.PREPROCESSOR }} \
214+ -c ${{ env.PROJECT_PATH }}/main.c -o ./main.o
215+ ./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -g -mmcu=${{ env.DEVICE }} \
216+ -B ./DFP/gcc/dev/${{ env.DEVICE }} \
217+ -I ./DFP/include \
218+ -o ./main.elf ./main.o \
219+ ${{ env.PREPROCESSOR }} \
220+ $(build_with_defines "${{ env.PREPROCESSOR }}")
221+
222+ ./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -j .text -j .data \
223+ -O ihex ./main.elf ${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.hex
224+ ./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -j .eeprom --change-section-lma .eeprom=0 \
225+ -O ihex ./main.elf ${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.eep
190226
191- tar -czvf test-build.tar.gz ${{ env.OutputFolder }}
192- zip -r test-build.zip ${{ env.OutputFolder }}
227+ tar -czvf test-build.tar.gz ${{ env.OUTPUT_FOLDER }}
228+ zip -r test-build.zip ${{ env.OUTPUT_FOLDER }}
193229
194230 - name : upload-test-firmware
195231 uses : actions/upload-artifact@v4
196232 with :
197233 name : firmware-test-build
198- path : ${{ env.OutputFolder }}
234+ path : ${{ env.OUTPUT_FOLDER }}
199235 retention-days : 1
200-
236+
201237 create-release :
202238 needs : [export-kicad, export-freecad, build-firmware]
203239 runs-on : ubuntu-latest
@@ -358,6 +394,16 @@ jobs:
358394 asset_name : firmware.tar.gz
359395 asset_content_type : application/gzip
360396
397+ - name : Upload Test Build Asset
398+ uses : actions/upload-release-asset@v1
399+ env :
400+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
401+ with :
402+ upload_url : ${{ steps.create_release.outputs.upload_url }}
403+ asset_path : ./artifact/build.zip
404+ asset_name : firmware.zip
405+ asset_content_type : application/zip
406+
361407 - name : Download Test Build Artifacts
362408 uses : actions/download-artifact@v4
363409 with :
0 commit comments