@@ -83,17 +83,21 @@ jobs:
8383 env :
8484 TOOLCHAIN : " 3.7.0.1796"
8585 DFP : " ATtiny_DFP.2.0.368"
86+ DEVICE : " atmega16a"
8687 DEVICE : " attiny1606"
87- OutputFolder : " ./output"
88- FirmwareName : " DIU_FW_1_0"
88+ OUTPUT_FOLDER : " ./output"
89+ LIBRARY_PATH : " ./firmware/lib"
90+ PROJECT_PATH : " ./firmware/DIU_FW_1_0"
91+ FIRMWARE_NAME : " DIU_FW_1_0_t1606"
92+ PREPROCESSOR : " -DF_CPU=12000000UL"
8993 runs-on : ubuntu-latest
9094 steps :
9195 - name : Fetch repository
92- uses : actions/checkout@v4
96+ uses : actions/checkout@v5
9397 - name : Copy License
9498 run : |
95- mkdir ${{ env.OutputFolder }}
96- cp ./LICENSE ${{ env.OutputFolder }}
99+ mkdir -p ${{ env.OUTPUT_FOLDER }}
100+ cp ./LICENSE ${{ env.OUTPUT_FOLDER }}
97101 - name : Install zip
98102 run : sudo apt-get install -y zip
99103 - name : install-build-tools
@@ -106,32 +110,47 @@ jobs:
106110 unzip *.atpack -d ./DFP
107111 - name : build-firmware
108112 run : |
109- mkdir temp
113+ mkdir -p temp
114+ rm -rf ./temp/*
110115
111- libraries=""
116+ build_with_defines() {
117+ local defines="$1"
118+ local libraries=""
112119
113- for dir in ./firmware/lib/*/
114- do
115- name=${dir%*/}
116- echo "Building ${name##*/}"
117-
118- first_file=$(ls ./firmware/lib/${name##*/}/*.c| head -1)
119- filename=$(basename -- "$first_file")
120+ while read -r file; do
121+ local filename=$(basename -- "$file")
120122 filename="${filename%.*}"
121123
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/lib/${name##*/}/${filename}.c -o ./temp/${filename}.o
124+ ./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -g -x c -O1 -mmcu=${{ env.DEVICE }} -std=gnu99 \
125+ -B ./DFP/gcc/dev/${{ env.DEVICE }} \
126+ $defines \
127+ -I ./DFP/include -c "${file}" -o "./temp/${filename}.o"
123128
124129 libraries+="./temp/${filename}.o "
125- done
130+ done < <(find "${{ env.LIBRARY_PATH }}" -type f -name '*.c')
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}
132+ echo "$libraries"
133+ }
134+
135+ ./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -g -x c -O1 -mmcu=${{ env.DEVICE }} -std=gnu99 \
136+ -B ./DFP/gcc/dev/${{ env.DEVICE }} \
137+ -I ./DFP/include \
138+ ${{ env.PREPROCESSOR }} \
139+ -c ${{ env.PROJECT_PATH }}/main.c -o ./main.o
140+ ./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -g -mmcu=${{ env.DEVICE }} \
141+ -B ./DFP/gcc/dev/${{ env.DEVICE }} \
142+ -I ./DFP/include \
143+ -o ./main.elf ./main.o \
144+ ${{ env.PREPROCESSOR }} \
145+ $(build_with_defines "${{ env.PREPROCESSOR }}")
129146
130- ./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -j .text -j .data -O ihex ./temp/main.elf ${{ env.OutputFolder }}/${{ env.FirmwareName }}_t1606.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 }}_t1606.eep
147+ ./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -j .text -j .data \
148+ -O ihex ./main.elf ${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.hex
149+ ./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -j .eeprom --change-section-lma .eeprom=0 \
150+ -O ihex ./main.elf ${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.eep
132151
133- tar -czvf build.tar.gz ${{ env.OutputFolder }}
134- zip -r build.zip ${{ env.OutputFolder }}
152+ tar -czvf build.tar.gz ${{ env.OUTPUT_FOLDER }}
153+ zip -r build.zip ${{ env.OUTPUT_FOLDER }}
135154
136155 - name : upload-firmware
137156 uses : actions/upload-artifact@v4
@@ -144,17 +163,21 @@ jobs:
144163 env :
145164 TOOLCHAIN : " 3.7.0.1796"
146165 DFP : " ATtiny_DFP.2.0.368"
166+ DEVICE : " atmega16a"
147167 DEVICE : " attiny1606"
148- OutputFolder : " ./output"
149- FirmwareName : " DIU_TEST"
168+ OUTPUT_FOLDER : " ./output"
169+ LIBRARY_PATH : " ./firmware/lib"
170+ PROJECT_PATH : " ./firmware/DIU_TEST"
171+ FIRMWARE_NAME : " DIU_TEST_t1606"
172+ PREPROCESSOR : " -DF_CPU=12000000UL"
150173 runs-on : ubuntu-latest
151174 steps :
152175 - name : Fetch repository
153- uses : actions/checkout@v4
176+ uses : actions/checkout@v5
154177 - name : Copy License
155178 run : |
156- mkdir ${{ env.OutputFolder }}
157- cp ./LICENSE ${{ env.OutputFolder }}
179+ mkdir -p ${{ env.OUTPUT_FOLDER }}
180+ cp ./LICENSE ${{ env.OUTPUT_FOLDER }}
158181 - name : Install zip
159182 run : sudo apt-get install -y zip
160183 - name : install-build-tools
@@ -167,32 +190,47 @@ jobs:
167190 unzip *.atpack -d ./DFP
168191 - name : build-firmware
169192 run : |
170- mkdir temp
193+ mkdir -p temp
194+ rm -rf ./temp/*
171195
172- libraries=""
196+ build_with_defines() {
197+ local defines="$1"
198+ local libraries=""
173199
174- for dir in ./firmware/lib/*/
175- do
176- name=${dir%*/}
177- echo "Building ${name##*/}"
178-
179- first_file=$(ls ./firmware/lib/${name##*/}/*.c| head -1)
180- filename=$(basename -- "$first_file")
200+ while read -r file; do
201+ local filename=$(basename -- "$file")
181202 filename="${filename%.*}"
182203
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/lib/${name##*/}/${filename}.c -o ./temp/${filename}.o
204+ ./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -g -x c -O1 -mmcu=${{ env.DEVICE }} -std=gnu99 \
205+ -B ./DFP/gcc/dev/${{ env.DEVICE }} \
206+ $defines \
207+ -I ./DFP/include -c "${file}" -o "./temp/${filename}.o"
184208
185209 libraries+="./temp/${filename}.o "
186- done
210+ done < <(find "${{ env.LIBRARY_PATH }}" -type f -name '*.c')
187211
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}
212+ echo "$libraries"
213+ }
214+
215+ ./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -g -x c -O1 -mmcu=${{ env.DEVICE }} -std=gnu99 \
216+ -B ./DFP/gcc/dev/${{ env.DEVICE }} \
217+ -I ./DFP/include \
218+ ${{ env.PREPROCESSOR }} \
219+ -c ${{ env.PROJECT_PATH }}/main.c -o ./main.o
220+ ./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -g -mmcu=${{ env.DEVICE }} \
221+ -B ./DFP/gcc/dev/${{ env.DEVICE }} \
222+ -I ./DFP/include \
223+ -o ./main.elf ./main.o \
224+ ${{ env.PREPROCESSOR }} \
225+ $(build_with_defines "${{ env.PREPROCESSOR }}")
190226
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
227+ ./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -j .text -j .data \
228+ -O ihex ./main.elf ${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.hex
229+ ./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -j .eeprom --change-section-lma .eeprom=0 \
230+ -O ihex ./main.elf ${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.eep
193231
194- tar -czvf build.tar.gz ${{ env.OutputFolder }}
195- zip -r build.zip ${{ env.OutputFolder }}
232+ tar -czvf test- build.tar.gz ${{ env.OUTPUT_FOLDER }}
233+ zip -r test- build.zip ${{ env.OUTPUT_FOLDER }}
196234
197235 - name : upload-test-firmware
198236 uses : actions/upload-artifact@v4
0 commit comments