xemu/build.sh
2020-05-01 02:43:44 -07:00

140 lines
3.7 KiB
Bash
Executable File

#!/usr/bin/env bash
set -e # exit if a command fails
set -o pipefail # Will return the exit status of make if it fails
package_windows() { # Script to prepare the windows exe
mkdir -p dist
cp i386-softmmu/qemu-system-i386.exe dist/xemu.exe
cp i386-softmmu/qemu-system-i386w.exe dist/xemuw.exe
python3 ./get_deps.py dist/xemu.exe dist
strip dist/xemu.exe
strip dist/xemuw.exe
}
postbuild=''
debug_opts=''
user_opts=''
build_cflags='-O3'
job_count='12'
while [ ! -z ${1} ]
do
case "${1}" in
'-j'*)
job_count="${1:2}"
shift
;;
'--debug')
build_cflags='-O0 -g'
debug_opts='--enable-debug'
shift
;;
*)
user_opts="${user_opts} ${1}"
shift
;;
esac
done
readlink=$(command -v readlink)
case "$(uname -s)" in # Adjust compilation options based on platform
Linux)
echo 'Compiling for Linux...'
sys_cflags='-march=native -Wno-error=redundant-decls -Wno-error=unused-but-set-variable'
sys_opts='--enable-kvm --disable-xen --disable-werror'
;;
Darwin)
echo 'Compiling for MacOS...'
sys_cflags='-march=native'
sys_opts='--disable-cocoa'
# necessary to find libffi, which is required by gobject
export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}/usr/local/opt/libffi/lib/pkgconfig"
# macOS needs greadlink for a GNU compatible version of readlink
if readlink=$(command -v greadlink); then
echo 'GNU compatible readlink detected'
else
echo 'Could not find a GNU compatible readlink. Please install coreutils with homebrew'
exit -1
fi
;;
CYGWIN*|MINGW*|MSYS*)
echo 'Compiling for Windows...'
sys_cflags='-Wno-error'
sys_opts='--python=python3 --disable-cocoa --disable-opengl --disable-fortify-source'
postbuild='package_windows' # set the above function to be called after build
;;
*)
echo "could not detect OS $(uname -s), aborting" >&2
exit -1
;;
esac
# find absolute path (and resolve symlinks) to build out of tree
configure="$(dirname "$($readlink -f "${0}")")/configure"
set -x # Print commands from now on
"${configure}" \
--extra-cflags="-DXBOX=1 ${build_cflags} ${sys_cflags} ${CFLAGS}" \
${debug_opts} \
${sys_opts} \
--target-list=i386-softmmu \
--enable-trace-backends="nop" \
--enable-sdl \
--disable-curl \
--disable-vnc \
--disable-vnc-sasl \
--disable-docs \
--disable-tools \
--disable-guest-agent \
--disable-tpm \
--disable-live-block-migration \
--disable-rdma \
--disable-replication \
--disable-capstone \
--disable-fdt \
--disable-libiscsi \
--disable-spice \
--disable-user \
--disable-stack-protector \
--disable-glusterfs \
--disable-gtk \
--disable-curses \
--disable-gnutls \
--disable-nettle \
--disable-gcrypt \
--disable-crypto-afalg \
--disable-virglrenderer \
--disable-vhost-net \
--disable-vhost-crypto \
--disable-vhost-vsock \
--disable-vhost-user \
--disable-virtfs \
--disable-snappy \
--disable-bzip2 \
--disable-vde \
--disable-libxml2 \
--disable-seccomp \
--disable-numa \
--disable-lzo \
--disable-smartcard \
--disable-usb-redir \
--disable-bochs \
--disable-cloop \
--disable-dmg \
--disable-vdi \
--disable-vvfat \
--disable-qcow1 \
--disable-qed \
--disable-parallels \
--disable-sheepdog \
--without-default-devices \
--disable-blobs \
${user_opts}
time make -j"${job_count}" 2>&1 | tee build.log
${postbuild} # call post build functions