59 lines
1.8 KiB
Bash
Executable file
59 lines
1.8 KiB
Bash
Executable file
#!/bin/bash
|
|
# SPDX-License-Identifier: LGPL-3.0-or-later
|
|
# See Notices.txt for copyright information
|
|
|
|
set -e
|
|
|
|
function download_if_needed() {
|
|
local dest="$1" hash="$2" url="$3"
|
|
if [[ ! -f "$1" ]]; then
|
|
wget -O "$dest" "$url"
|
|
fi
|
|
sha256sum -c <<<"$hash *$dest"
|
|
}
|
|
|
|
function build-qemu() (
|
|
[[ -x "$QEMU_SOURCE/configure" ]] || tar -xJf "downloads/$QEMU_SOURCE.tar.xz"
|
|
|
|
rm -rf "$QEMU_BUILD"
|
|
mkdir -p "$QEMU_BUILD"
|
|
cd "$QEMU_BUILD"
|
|
export CC="clang-20 --target=powerpc64le-linux-gnu"
|
|
export CXX="clang++-20 --target=powerpc64le-linux-gnu"
|
|
export LD="clang++-20 --target=powerpc64le-linux-gnu"
|
|
export AR="llvm-ar-20"
|
|
"../$QEMU_SOURCE/configure" \
|
|
--target-list=ppc64-softmmu \
|
|
--enable-lto \
|
|
--enable-tcg-interpreter \
|
|
--without-default-features \
|
|
--cross-prefix=powerpc64le-linux-gnu-
|
|
target="$(ninja -t query qemu-system-ppc64)"
|
|
mapfile -t target_lines <<<"$target"
|
|
# add missed libs
|
|
link_inputs=(libpage-vary-common.a libqemuutil.a)
|
|
# add the rest of the libs and object files
|
|
for l in "${target_lines[@]}"; do
|
|
if [[ "$l" =~ ^' '([a-z].*)$ ]]; then
|
|
link_inputs+=("${BASH_REMATCH[1]}")
|
|
elif [[ "$l" == " outputs:" ]]; then
|
|
break
|
|
fi
|
|
done
|
|
make -j"$(nproc)" qemu-system-ppc64
|
|
echo "linking bitcode"
|
|
llvm-link-20 --only-needed --ignore-non-bitcode -o ../qemu-system-ppc64.bc "${link_inputs[@]}"
|
|
echo "disassembling bitcode"
|
|
llvm-dis-20 -o ../qemu-system-ppc64.ll ../qemu-system-ppc64.bc
|
|
)
|
|
|
|
mkdir -p downloads
|
|
|
|
QEMU_SOURCE=qemu-10.2.2
|
|
QEMU_SOURCE_HASH=784b296ff29c1417aa72323abcb2d2ea9ab9771724f577dcd785c3b04f21e176
|
|
QEMU_BUILD="$QEMU_SOURCE-build"
|
|
|
|
download_if_needed "downloads/$QEMU_SOURCE.tar.xz" "$QEMU_SOURCE_HASH" \
|
|
"https://download.qemu.org/$QEMU_SOURCE.tar.xz"
|
|
|
|
build-qemu
|