mirror of
https://github.com/joncampbell123/dosbox-x.git
synced 2025-05-08 02:53:03 +08:00
162 lines
5.2 KiB
Bash
Executable File
162 lines
5.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# I'm sick and tired of all the churn the three versions of autoconf
|
|
# are causing in this repo. Stop committing the configure scripts
|
|
# and just autoregen.
|
|
./autogen.sh || exit 1
|
|
|
|
# where are we?
|
|
top=$(pwd)
|
|
if test -z "${top}" ; then exit 1; fi
|
|
|
|
# fix
|
|
chmod +x vs/sdl/build-scripts/strip_fPIC.sh
|
|
|
|
orig_CFLAGS="${CFLAGS}"
|
|
orig_LDFLAGS="${LDFLAGS}"
|
|
orig_CPPFLAGS="${CPPFLAGS}"
|
|
orig_CXXFLAGS="${CXXFLAGS}"
|
|
|
|
# Ensure sdl2 isn't detected as we aren't going to use it, and the presence of
|
|
# this folder will cause the build to fail.
|
|
rm -rf vs/sdl2/linux-host vs/sdl2/linux-build
|
|
|
|
# Remove our temporary copies of dosbox-x executable before rebuilding
|
|
rm -f src/dosbox-x-arm64 src/dosbox-x-x86_64
|
|
|
|
do_cleanup() {
|
|
rm -rf vs/sdl/linux-host vs/sdl/linux-build
|
|
rm -rf vs/sdlnet/linux-host vs/sdlnet/linux-build
|
|
rm -rf vs/zlib/linux-host vs/zlib/linux-build
|
|
rm -rf vs/libpng/linux-host vs/libpng/linux-build
|
|
rm -rf vs/freetype/linux-host vs/freetype/linux-build
|
|
[ -e Makefile ] && make clean
|
|
}
|
|
|
|
universal=0
|
|
architectures="$(uname -m)"
|
|
if [ "${1}" = "universal" ]; then
|
|
shift
|
|
if [ "${architectures}" = "arm64" ]; then
|
|
# We can only build universal binaries on an arm64 host because we
|
|
# need homebrew functional under both architectures.
|
|
universal=1
|
|
architectures="arm64 x86_64"
|
|
fi
|
|
fi
|
|
|
|
arm64_brew_cmd=""
|
|
x86_64_brew_cmd=""
|
|
# arm64 native Homebrew
|
|
if [ -x /opt/homebrew/bin/brew ]; then
|
|
arm64_brew_cmd="/opt/homebrew/bin/brew"
|
|
fi
|
|
|
|
# x86_64 Homebrew
|
|
if [ -x /usr/local/bin/brew ]; then
|
|
# old homebrew
|
|
x86_64_brew_cmd="/usr/local/bin/brew"
|
|
elif [ -x /usr/local/Homebrew/bin/brew ]; then
|
|
# new homebrew
|
|
x86_64_brew_cmd="/usr/local/Homebrew/bin/brew"
|
|
fi
|
|
|
|
# x86_64 on arm64 for universal builds if x86_64 Homebrew is installed
|
|
if [ -n "${x86_64_brew_cmd}" ] && [ "${universal}" -eq 1 ]; then
|
|
x86_64_brew_cmd="/usr/bin/arch -x86_64 ${x86_64_brew_cmd}"
|
|
fi
|
|
|
|
for arch in ${architectures}; do
|
|
declare brew_cmd="${arch}_brew_cmd"
|
|
if [ -n "${!brew_cmd}" ]; then
|
|
${!brew_cmd} list fluid-synth &>/dev/null || ${!brew_cmd} install fluid-synth
|
|
${!brew_cmd} list libslirp &>/dev/null || ${!brew_cmd} install libslirp
|
|
${!brew_cmd} list pkg-config &>/dev/null || ${!brew_cmd} install pkg-config
|
|
fi
|
|
|
|
do_cleanup
|
|
|
|
arch_flags="-arch ${arch} -mmacosx-version-min=10.12 "
|
|
CFLAGS="${arch_flags}${orig_CFLAGS}"
|
|
LDFLAGS="${arch_flags}${orig_LDFLAGS}"
|
|
CPPFLAGS="${arch_flags}${orig_CPPFLAGS}"
|
|
CXXFLAGS="${arch_flags}${orig_CXXFLAGS}"
|
|
export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS
|
|
|
|
# prefer to compile against our own copy of SDL 1.x
|
|
echo "Compiling our internal SDL 1.x"
|
|
(cd vs/sdl && ./build-dosbox.sh) || exit 1
|
|
new="-I${top}/vs/sdl/linux-host/include "
|
|
nld="-L${top}/vs/sdl/linux-host/lib "
|
|
CFLAGS="${CFLAGS}${new}"
|
|
LDFLAGS="${LDFLAGS}${nld}"
|
|
CPPFLAGS="${CPPFLAGS}${new}"
|
|
CXXFLAGS="${CXXFLAGS}${new}"
|
|
export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS
|
|
|
|
# prefer to compile against our own copy of SDLnet 1.x
|
|
echo "Compiling our internal SDLnet 1.x"
|
|
(cd vs/sdlnet && ./build-dosbox.sh) || exit 1
|
|
|
|
# prefer to compile against our own zlib
|
|
echo "Compiling our internal zlib"
|
|
(cd vs/zlib && ./build-dosbox.sh) || exit 1
|
|
new="-I${top}/vs/zlib/linux-host/include "
|
|
nld="-L${top}/vs/zlib/linux-host/lib "
|
|
CFLAGS="${CFLAGS}${new}"
|
|
LDFLAGS="${LDFLAGS}${nld}"
|
|
CPPFLAGS="${CPPFLAGS}${new}"
|
|
CXXFLAGS="${CXXFLAGS}${new}"
|
|
export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS
|
|
|
|
# prefer to compile against our own libpng (comment this out to disable)
|
|
echo "Compiling our internal libpng"
|
|
(cd vs/libpng && ./build-dosbox.sh) || exit 1
|
|
new="-I${top}/vs/libpng/linux-host/include "
|
|
nld="-L${top}/vs/libpng/linux-host/lib "
|
|
CFLAGS="${CFLAGS}${new}"
|
|
LDFLAGS="${LDFLAGS}${nld}"
|
|
CPPFLAGS="${CPPFLAGS}${new}"
|
|
CXXFLAGS="${CXXFLAGS}${new}"
|
|
export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS
|
|
|
|
# prefer to compile against our own freetype
|
|
echo "Compiling our internal freetype"
|
|
(cd vs/freetype && ./build-dosbox.sh) || exit 1
|
|
new="-I${top}/vs/freetype/linux-host/include/freetype2 "
|
|
nld="-L${top}/vs/freetype/linux-host/lib -lfreetype "
|
|
CFLAGS="${CFLAGS}${new}"
|
|
LDFLAGS="${LDFLAGS}${nld}"
|
|
CPPFLAGS="${CPPFLAGS}${new}"
|
|
CXXFLAGS="${CXXFLAGS}${new}"
|
|
INTERNAL_FREETYPE=1
|
|
export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS INTERNAL_FREETYPE
|
|
|
|
opts=
|
|
|
|
# if Brew has installed packages, try to use those too
|
|
if [ -n "${!brew_cmd}" ]; then
|
|
echo "Brew is installed, I'm going to use its libraries too"
|
|
new="-I$(${!brew_cmd} --prefix)/include "
|
|
nld="-L$(${!brew_cmd} --prefix)/lib "
|
|
CFLAGS="${CFLAGS}${new}"
|
|
LDFLAGS="${LDFLAGS}${nld}"
|
|
CPPFLAGS="${CPPFLAGS}${new}"
|
|
CXXFLAGS="${CXXFLAGS}${new}"
|
|
PKG_CONFIG_PATH="${PKG_CONFIG_PATH}:$(${!brew_cmd} --prefix)/lib/pkgconfig"
|
|
export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS PKG_CONFIG_PATH
|
|
fi
|
|
|
|
if [ "${universal}" = 1 ]; then
|
|
opts="${opts} --enable-universal"
|
|
fi
|
|
|
|
# now compile ourself
|
|
echo "Compiling DOSBox-X"
|
|
chmod +x configure
|
|
./configure --enable-debug=heavy --prefix=/usr "${opts}" "${@}" || exit 1
|
|
make -j3 || exit 1
|
|
|
|
cp src/dosbox-x "src/dosbox-x-${arch}"
|
|
done
|