Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 8 additions & 7 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
37 changes: 20 additions & 17 deletions mk_altera_hex.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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"