diff --git a/Makefile b/Makefile index 6728eb9..ef8c4cb 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ apps = scbl ld-script?=scbl.ld -FLAGS_MARCH ?= rv32im +FLAGS_MARCH ?= rv32im_zicsr FLAGS_MABI ?= ilp32 PLATFORM_HDR=plf_$(PLATFORM).h @@ -59,33 +59,34 @@ apps_elf = $(patsubst %, $(build_dir)/%.elf, $(basename $(apps))) apps_hex = $(patsubst %, $(build_dir)/%.hex, $(basename $(apps))) $(apps_elf): $(build_dir)/%.elf: $(build_dir)/%.o $(app_objs) - @echo "LD\t$@" + @printf "LD\t%s\n" "$@" $(LD) $(LDFLAGS) -o $@ $^ $(LIBS) $(OBJDUMP) $@ > $(@:.elf=.dump) $(OBJCOPY) -Obinary -S $@ $(@:.elf=.bin) $(build_dir)/%.o: src/%.c | $(build_dir) - @echo "CC\t$<" + @printf "CC\t%s\n" "$<" @$(CC) $(CFLAGS) $(C_DEFINES) -c $< -o $@ $(build_dir)/%.o: src/%.S | $(build_dir) - @echo "AS\t$<" + @printf "AS\t%s\n" "$<" @$(CC) $(CFLAGS) $(ASM_DEFINES) -c $< -o $@ $(build_dir)/%.o: common/%.c | $(build_dir) - @echo "CC\t$<" + @printf "CC\t%s\n" "$<" @$(CC) $(CFLAGS) $(C_DEFINES) -c $< -o $@ $(build_dir)/%.o: common/%.S | $(build_dir) - @echo "AS\t$<" + @printf "AS\t%s\n" "$<" @$(CC) $(CFLAGS) $(ASM_DEFINES) -c $< -o $@ $(build_dir)/%.o: %.c | $(build_dir) + @printf "CC\t%s\n" "$<" @echo "CC\t$<" @$(CC) $(CFLAGS) $(C_DEFINES) -c $< -o $@ $(build_dir)/%.o: %.S | $(build_dir) - @echo "AS\t$<" + @printf "AS\t%s\n" "$<" @$(CC) $(CFLAGS) $(ASM_DEFINES) -c $< -o $@ # make Xilinx *.mem and Altera *.hex files diff --git a/mk_altera_hex.sh b/mk_altera_hex.sh index 8684a9d..f9ac555 100755 --- a/mk_altera_hex.sh +++ b/mk_altera_hex.sh @@ -8,30 +8,33 @@ readonly BYTES_PER_LINE=8 readonly BYTES_PER_READ=64 readonly LINES_IN_BUFFER=$BYTES_PER_READ/$BYTES_PER_LINE -readonly FORMAT_STR_PREFIX=$(printf '%%s:%02X%%04X00' $BYTES_PER_LINE) +FORMAT_STR_PREFIX=$(printf '%%s:%02X%%04X00' $BYTES_PER_LINE) +readonly FORMAT_STR_PREFIX -printf "" >$2 +printf "" >"$2" outaddr=0 -wcstr=$(wc -c $1) +wcstr=$(wc -c "$1") fsize=${wcstr% *} -for (( addr = 0 ; addr < $fsize ; addr += $BYTES_PER_READ )) ; do - bytes=( $(od -An -t u1 -N $BYTES_PER_READ --width=1000 -j $addr $1) ) +for (( addr = 0 ; addr < fsize ; addr += BYTES_PER_READ )) ; do + bytes=() + while IFS=$'' read -r line; do array+=("$line"); done < <((od -An -t u1 -N $BYTES_PER_READ --width=1000 -j $addr "$1")) out_str="" ii=0 - for (( n = 0 ; n < $LINES_IN_BUFFER ; n++ )) ; do - printf -v out_str $FORMAT_STR_PREFIX "$out_str" $outaddr - cs=$[$outaddr/256+$outaddr%256] + for (( n = 0 ; n < LINES_IN_BUFFER ; n++ )) ; do + # shellcheck disable=SC2059 + printf -v out_str "$FORMAT_STR_PREFIX" "$out_str" $outaddr + cs=$((outaddr/256+outaddr%256)) line_bytes="" - for (( i = $ii+$BYTES_PER_LINE-1 ; i >= $ii ; i--)) ; do + for (( i = ii+BYTES_PER_LINE-1 ; i >= ii ; i--)) ; do val=${bytes[$i]} - printf -v line_bytes '%s%02X' "$line_bytes" $val - cs=$[$cs+$val] + printf -v line_bytes '%s%02X' "$line_bytes" "$val" + cs=$((cs+val)) done - cs=$[$cs+$BYTES_PER_LINE] - printf -v out_str '%s%s%02X\n' "$out_str" "$line_bytes" $[(0x100-$cs%256)%256] - outaddr=$[$outaddr+1] - ii=$[$ii+$BYTES_PER_LINE] + cs=$((cs+BYTES_PER_LINE)) + printf -v out_str '%s%s%02X\n' "$out_str" "$line_bytes" $(((0x100-cs%256)%256)) + outaddr=$((outaddr+1)) + ii=$((ii+BYTES_PER_LINE)) done - printf '%s' "$out_str" >>$2 + printf '%s' "$out_str" >>"$2" done -printf ":00000001FF\n" >>$2 +printf ":00000001FF\n" >>"$2" \ No newline at end of file