Skip to content
Merged
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: 13 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,19 @@ $(LINUX_IMAGE): $(TOOLCHAIN_WRAPPER) br2-external/configs/nemu_defconfig br2-ext
# Build LibCheckpointAlpha
GCPT_BUILD_DIR := build/LibCheckpointAlpha
GCPT_BIN := $(GCPT_BUILD_DIR)/build/gcpt.bin
$(GCPT_BIN): scripts/build-gcpt.sh $(TOOLCHAIN_WRAPPER)
CROSS_COMPILE="$(abspath $(BUILDROOT_DIR)/output/host/bin)/riscv64-linux-" bash scripts/build-gcpt.sh bootloader/LibCheckpointAlpha $(GCPT_BUILD_DIR)
GCPT_DEFAULT_DTB ?= $(if $(DEFAULT_DTB),$(DEFAULT_DTB),xiangshan)
GCPT_DEFAULT_DTS := dts/$(GCPT_DEFAULT_DTB).dts.in
GCPT_DEFAULT_DTB_STAMP := build/LibCheckpointAlpha-config/dtb.$(shell printf '%s\n' "$(GCPT_DEFAULT_DTB)" | sha256sum | cut -d ' ' -f 1)
GCPT_SOURCES := $(shell find bootloader/LibCheckpointAlpha -path '*/.git' -prune -o -type f -print 2>/dev/null)
$(GCPT_DEFAULT_DTB_STAMP):
mkdir -p "$(@D)"
rm -f build/LibCheckpointAlpha-config/dtb.*
touch "$@"
$(GCPT_BIN): scripts/build-gcpt.sh $(TOOLCHAIN_WRAPPER) $(GCPT_SOURCES) $(GCPT_DEFAULT_DTS) $(GCPT_DEFAULT_DTB_STAMP)
CROSS_COMPILE="$(abspath $(BUILDROOT_DIR)/output/host/bin)/riscv64-linux-" \
DEFAULT_DTB="$(GCPT_DEFAULT_DTB)" \
DTS_TEMPLATE_DIR="$(abspath dts)" \
bash scripts/build-gcpt.sh bootloader/LibCheckpointAlpha $(GCPT_BUILD_DIR)

# Build OpenSBI
SBI_BUILD_DIR := build/opensbi
Expand Down
2 changes: 1 addition & 1 deletion bootloader/LibCheckpointAlpha
39 changes: 39 additions & 0 deletions scripts/build-gcpt.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,45 @@ GCPT_SOURCE_DIR="$(realpath "$1")"
GCPT_BUILD_DIR="$(realpath "$2")"
BUILD_DIR="$(dirname "$GCPT_BUILD_DIR")"

extract_clint_mmio() {
local dts_template_dir="$1"
local default_dtb="$2"
local dts_template="$dts_template_dir/$default_dtb.dts.in"

if ! [ -f "$dts_template" ]; then
echo "Default DTS template not found: $dts_template" >&2
return 1
fi

perl -0777 -ne '
while (/(?:[A-Za-z_][A-Za-z0-9_]*:\s*)?[A-Za-z0-9,_-]*clint@[^{]*\{(.*?)\};/sg) {
my $node = $1;
next unless $node =~ /compatible\s*=\s*[^;]*"riscv,clint0"/s;
next unless $node =~ /reg\s*=\s*<([^>]+)>/s;
my @cells = $1 =~ /(0x[0-9a-fA-F]+|\d+)/g;
next unless @cells >= 2;
my $addr = (hex_or_dec($cells[0]) << 32) + hex_or_dec($cells[1]);
printf "0x%x\n", $addr;
exit 0;
}
exit 1;
sub hex_or_dec {
my ($v) = @_;
return $v =~ /^0x/i ? hex($v) : int($v);
}
' "$dts_template"
}

if [ -z "${CLINT_MMIO:-}" ] && [ -n "${DTS_TEMPLATE_DIR:-}" ]; then
DTS_TEMPLATE_DIR="$(realpath "$DTS_TEMPLATE_DIR")"
DEFAULT_DTB="${DEFAULT_DTB:-xiangshan}"
CLINT_MMIO="$(extract_clint_mmio "$DTS_TEMPLATE_DIR" "$DEFAULT_DTB" || true)"
fi

if [ -n "${CLINT_MMIO:-}" ]; then
export CFLAGS="${CFLAGS:-} -DCONFIG_CLINT_MMIO=$CLINT_MMIO"
fi

# prepare OpenSBI source
mkdir -p "$BUILD_DIR"
rm -rf "$GCPT_BUILD_DIR"
Expand Down
4 changes: 2 additions & 2 deletions workloads/linux/spec2006/rules.mk
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ linux/spec2006: spec2006-check-spec-dir
echo " or: make linux/spec2006 BENCH=astar_biglakes SPEC=/path/to/cpu2006 -jN"; \
exit 1; \
fi
@$(MAKE) --no-print-directory -f "$(SPEC2006_RECURSE_MAKEFILE)" $(SPEC2006_BUILD_DIR)/$(SPEC2006_CASE)/fw_payload.bin
@$(MAKE) --no-print-directory -f "$(SPEC2006_RECURSE_MAKEFILE)" GCPT_DEFAULT_DTB="$(SPEC2006_DEFAULT_DTB)" $(SPEC2006_BUILD_DIR)/$(SPEC2006_CASE)/fw_payload.bin

spec2006-elf: spec2006-check-spec-dir
@if [ -z "$(BENCH)" ]; then \
Expand Down Expand Up @@ -179,7 +179,7 @@ spec2006-images: spec2006-check-spec-dir
i=0; \
for case in $(SPEC2006_IMAGE_CASES); do \
i=$$((i + 1)); \
SPEC2006_PROGRESS_K="$$i" SPEC2006_PROGRESS_N="$$total" $(MAKE) --no-print-directory -f "$(SPEC2006_RECURSE_MAKEFILE)" "$(SPEC2006_IMAGE_DIR)/bin/$$case.fw_payload.bin" || exit $$?; \
SPEC2006_PROGRESS_K="$$i" SPEC2006_PROGRESS_N="$$total" $(MAKE) --no-print-directory -f "$(SPEC2006_RECURSE_MAKEFILE)" GCPT_DEFAULT_DTB="$(SPEC2006_DEFAULT_DTB)" "$(SPEC2006_IMAGE_DIR)/bin/$$case.fw_payload.bin" || exit $$?; \
done
@printf '[spec2006 %s/%s] Output written to %s\n' "$(words $(SPEC2006_IMAGE_CASES))" "$(words $(SPEC2006_IMAGE_CASES))" "$(abspath $(SPEC2006_IMAGE_DIR))"

Expand Down
Loading