Skip to content

Commit 4a9504f

Browse files
committed
Fix firmware copy bug
1 parent b2d5f4c commit 4a9504f

File tree

1 file changed

+82
-44
lines changed

1 file changed

+82
-44
lines changed

.github/workflows/build.yml

Lines changed: 82 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)