mirror of
https://github.com/visualboyadvance-m/visualboyadvance-m
synced 2025-10-05 23:52:49 +02:00
cmake: Add cmake option `DISABLE_MACOS_PACKAGE_MANAGERS` to disable automatically using macOS Homebrew, MacPorts or Fink. Use `-Ofast` instead of `-O2` for default compiler optimization flags, which enables `-ffast-math` among a few other tweaks. There is a lot of controversy about this, but in our testing on MSVC with `/fp:fast` the performance increase for this specific app is dramatic. Update version regexps on the SFML headers in `FindSFML.cmake` to allow for a variable number of spaces between the macro and its definition. Update the version of the Sparkle update checker framework for macOS from 1.23.0 to 2.3.0-beta.2, and add a command to the cmake commands for copying the framework to the `.app` to delete it first if already copied. Builder dist changes: Updates: dist old v new v ============================================================== xz 5.2.4 5.2.6 openssl 1.1.1f 1.1.1g curl 7.65.3 7.85.0 ccache 3.4.3 4.6.3 cmake 3.19.4 3.24.1 autoconf 2.69 2.71 autoconf-archive 2017.09.28 2022.09.03 libtool 2.4.6 2.4.7 help2man 1.47.5 1.49.2 libiconv 1.16 1.17 gsed 4.4 4.8 bison 3.0.5 3.8.2 texinfo 6.5 6.8 flex e7d45afc ea6493d9 libicu 65_1 71_1 nasm 2.14.02 2.15.05 pcre 8.41 8.45 libffi 3.2.1 3.4.2 libxml2 2.9.12 2.10.2 libxslt 1.1.33-rc2 1.1.37 XML-SAX 0.99 1.02 expat 2.2.4 2.4.8 libjpeg-turbo 2.0.4 2.1.4 libtiff 4.1.0 4.4.0 freetype 2.10.0 2.12.1 libgd 2.2.5 2.3.3 liberation 2.0.1 2.1.5 urw 91edd6ec 20200910 graphviz 4bf0ec9b 5.0.1 python2 2.7.15 2.7.18 python3 3.9.1 3.10.6 swig 3.0.12 4.0.2 doxygen 1.8.14 1.9.5 bakefile 33c270a5 7a218d89 XML-Parser 2.44 2.46 ninja 1.9.0 1.11.1 meson 0.51.2 0.63.2 glib 2.62.2 51251940 libgpg-error 1.41 1.45 libgcrypt 1.8.5 1.10.1 libsecret 0.19.1 0.20.5 sdl2 2.0.10 2.24.0 flac 1.3.3 1.3.4 libogg 1.3.4 1.3.5 libvorbis 1.3.6 1.3.7 harfbuzz 1.7.5 5.1.0 sfml 03375688 2.5.1 shared-mime-info 1.9 2.2 wxwidgets 9cc0c9a0 31720e1e graphite2 ce0e793f 425da3d0 xvidcore 1.3.5 1.3.7 fribidi 1.0.1 1.0.12 libgsm 1.0.18 1.0.22 libmodplug 5a39f591 d1b97ed0 libopencore-amrnb 0.1.5 0.1.6 snappy 1.1.7 af720f9a speex 1.2.0 1.2.1 vidstab 1.1.0 90c76aca libvo-amrwbenc 0.1.3 3b3fcd0d libass 0.14.0 0.16.0 libbluray 1.1.2 1.3.2 libvpx 1.8.1 1.12.0 libx264 20190913-2245 f7074e12 libxavs distrotech-xavs-git 8300fbf4 libzmq 4.2.2 4.3.4 ffmpeg 4.3.1 5.1.1 Removed dists: dist ver ========================= zlib 1.2.11 pkgconfig 0.29.2 docbook5.0 5.0 libwavpack 5.1.0 Added dists: dist ver ======================== zlib-ng ce01b1e4 zstd 1.5.2 hiredis 1.0.2 pkgconf 1.9.3 pcre2 10.40 docbook5.0.1 5.0.1 docbook5.1 5.1 Changes: Update all non-working dist URLs. Replace zlib 1.2.11 with a recent zlib-ng built with `--zlib-compat`. Add zstd and hiredis, new deps of ccache. Replace pkgconfig with pkgconf. Use both pcre1 and pcre2. Remove the libxml2-python dist alias and rebuild libxml2 `--with-python` and `--with-python3` after python 2 and 3 have built. Remove libwavpack as ffmpeg 5 no longer uses it as a dependency. Builder core: Rename some of the directories and files to be a bit nicer. Add `-Ofast -march=core2 -mtune=generic -pipe` to the global `{C,CXX,OBJC,LD}FLAGS`. These are the optimization settings used by default in the project as well, while `-pipe` significantly reduces build time by making the compiler use pipes internally. Add `-DFLOAT_APPROX` to the global `{CPP,C,CXX,OBJC}FLAGS` because we are now using `-Ofast` and consequently, `-ffast-math`. Set the `LIBRARY_PATH` variable in the global environment. Make some adjustments for the new dist versions and make some other improvements. macOS builder fixes (tested on High Sierra 10.13 and Catalina 10.15): Add support for predefined BUILD_ROOT and append BUILD_ROOT_SUFFIX. Allow pre-defined CHECKOUT directory for building the project sources. Sanitize `PATH` before build to remove `/usr/local` etc., use /usr/local/bin/brew explicitly for deps instead. If llvm and clang is installed from nix or brew, prepend the path of the highest version found to `PATH`. Remove `-lm` from build environment as macOS has never had an `m` math library and this causes problems in some config checks. Add LLVM `libunwind` from the LLVM archive. Add a patch for `glib`'s `meson.build` to statically link `gettext`/`libintl`, adds `-liconv -framework CoreFoundation`. Add an extra location to check for `stdint.h` in XCode. Signed-off-by: Rafael Kitover <rkitover@gmail.com>
207 lines
7.6 KiB
Bash
Executable File
207 lines
7.6 KiB
Bash
Executable File
#!/usr/local/bin/bash
|
|
|
|
set -e
|
|
|
|
LANG=C LC_COLLATE=C LC_CTYPE=C LC_MESSAGES=C LC_MONETARY=C LC_NUMERIC=C LC_TIME=C LC_ALL=C
|
|
export LANG LC_COLLATE LC_CTYPE LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME LC_ALL
|
|
|
|
## bash 3 does not work for this code
|
|
#if [ -z "$IN_DASH" ]; then
|
|
# if command -v dash >/dev/null; then
|
|
# export IN_DASH=1
|
|
# exec dash "$0" "$@"
|
|
# else
|
|
# echo >&2 "please install dash from homebrew or macports to run this script"
|
|
# exit 1
|
|
# fi
|
|
#fi
|
|
|
|
target_bits=64
|
|
target_cpu=x86_64
|
|
|
|
case "$1" in
|
|
-64)
|
|
shift
|
|
;;
|
|
-32)
|
|
target_bits=32
|
|
target_cpu=i386
|
|
shift
|
|
;;
|
|
-arm64)
|
|
target_bits=arm64
|
|
target_cpu=arm64
|
|
shift
|
|
;;
|
|
esac
|
|
|
|
# Need to use Xcode 9 for 32 bit builds on Mojave and newer.
|
|
# Place it in /Applications/Xcode9.app .
|
|
if [ "$target_bits" -eq 32 ] && [ -d /Applications/Xcode9.app ]; then
|
|
PREV_XCODE=$(xcode-select -p)
|
|
printf "\nSetting Xcode9 as the default Xcode for 32 bit build...\n\n"
|
|
sudo xcode-select -s /Applications/Xcode9.app/Contents/Developer
|
|
fi
|
|
|
|
export BUILD_ROOT="${BUILD_ROOT:-$HOME/vbam-build-mac-${target_bits}bit}$BUILD_ROOT_SUFFIX"
|
|
|
|
ver_file=$(mktemp)
|
|
sw_vers -productVersion | sed 's/\./ /g' > "$ver_file"
|
|
read -r macos_major macos_minor macos_patch < "$ver_file"
|
|
rm -f "$ver_file"
|
|
|
|
# Find the highest version clang and llvm in Nix or Homebrew.
|
|
best_llvm=$(
|
|
(
|
|
for nix_clang in $(find /nix/store -maxdepth 1 -type d -name '*-clang-[0-9]*[0-9]'); do
|
|
llvm_ver=$(echo "$nix_clang" | sed -E 's/.*-([0-9][0-9.]*[0-9])$/\1/')
|
|
nix_llvm=$(find /nix/store -maxdepth 1 -type d -name '*-llvm-'"$llvm_ver")
|
|
|
|
if [ -x "$nix_clang/bin/clang++" ]; then
|
|
echo "$nix_clang:$nix_llvm $($nix_clang/bin/clang++ --version | head -1 | awk '{ print $NF }')"
|
|
fi
|
|
done
|
|
|
|
for brew_llvm in $(find /usr/local/opt -maxdepth 1 -type l -name 'llvm*'); do
|
|
if [ -x "$brew_llvm/bin/clang++" ]; then
|
|
echo "$brew_llvm $($brew_llvm/bin/clang++ --version | head -1 | awk '{ print $NF }')"
|
|
fi
|
|
done
|
|
) | sort -k2,2 -V -r | head -1 | awk '{ print $1 }'
|
|
)
|
|
|
|
BUILD_ENV=$(cat <<EOF
|
|
export MACOSX_DEPLOYMENT_TARGET=10.7
|
|
export COMMAND_MODE=unix2003
|
|
export PATH=/usr/bin:/bin:/usr/sbin:/sbin
|
|
|
|
[ -n "$best_llvm" ] && export PATH="$best_llvm/bin:\$PATH"
|
|
|
|
export CC=clang
|
|
export CXX=clang++
|
|
export CPPFLAGS="-DICONV_CONST="
|
|
export CFLAGS="-m${target_bits} -framework Carbon -framework Foundation -framework CoreServices -stdlib=libc++ -Wno-unused-command-line-argument -DICONV_CONST= -Wl,-no_compact_unwind"
|
|
export CXXFLAGS="-m${target_bits} -stdlib=libc++ -framework Carbon -framework Foundation -framework CoreServices -Wno-unused-command-line-argument -DICONV_CONST= -Wl,-no_compact_unwind"
|
|
export OBJCXXFLAGS="-m${target_bits} -stdlib=libc++ -framework Carbon -framework Foundation -framework CoreServices -Wno-unused-command-line-argument -DICONV_CONST= -Wl,-no_compact_unwind"
|
|
export LDFLAGS="-m${target_bits} -framework Carbon -framework Foundation -framework CoreServices -stdlib=libc++ -Wno-unused-command-line-argument -Wl,-no_compact_unwind"
|
|
|
|
export UUID_CFLAGS="-I\$BUILD_ROOT/root/stow/libuuid/include"
|
|
export UUID_LIBS="-L\$BUILD_ROOT/root/stow/libuuid/lib -luuid"
|
|
EOF
|
|
)
|
|
|
|
export BUILD_ENV
|
|
|
|
export TAR=tar
|
|
|
|
if [ "$target_cpu" = i386 ]; then
|
|
export CONFIGURE_REQUIRED_ARGS='--host=i386-apple-darwin --build=x86_64-apple-darwin'
|
|
fi
|
|
|
|
. "$(dirname "$0")/../builder/core.sh"
|
|
|
|
# Remove -lm, macOS does not use it and it can cause build failures.
|
|
BUILD_ENV=$(printf '%s' "$BUILD_ENV" | sed 's/ -lm / /g')
|
|
export BUILD_ENV
|
|
|
|
for dist in flex libsecret c2man graphviz zip; do
|
|
table_line_remove DISTS "$dist"
|
|
done
|
|
|
|
# LLVM libunwind.
|
|
|
|
table_insert_after DISTS cmake '
|
|
libunwind https://github.com/llvm-mirror/libunwind/archive/3e6ec2ae9afaa3683269b690612f84d907943ea2.tar.gz lib/libunwind.a
|
|
'
|
|
|
|
# issues with perl modules linked to our libs and brew perl
|
|
table_line_remove DISTS shared-mime-info
|
|
|
|
table_line_replace DIST_PREFIX libuuid /usr/stow/libuuid
|
|
|
|
table_line_append DIST_PRE_BUILD zip " \
|
|
sed -i.bak 's/-DZMEM//g; s/-DNO_DIR//g;' unix/configure \
|
|
"
|
|
|
|
if [ "$target_cpu" = i386 ]; then
|
|
table_line_replace DIST_CONFIGURE_OVERRIDES openssl './Configure darwin-i386-cc no-shared --prefix=/usr --openssldir=/etc/ssl'
|
|
else
|
|
table_line_replace DIST_CONFIGURE_OVERRIDES openssl './Configure darwin64-x86_64-cc no-shared --prefix=/usr --openssldir=/etc/ssl'
|
|
fi
|
|
|
|
table_line_append DIST_PATCHES glib " \
|
|
https://gist.githubusercontent.com/rkitover/05fb70a11cc8ddcea11230b4dc5fd48b/raw/b44288a2357acd4da62ee5f07ee106d36c91b887/macOS-glib-link-static-libintl-gettext.patch \
|
|
"
|
|
|
|
stdint_h=
|
|
|
|
if [ -f "$(xcode-select -p)/SDKs/MacOSX.sdk/usr/include/stdint.h" ]; then
|
|
stdint_h="\"$(xcode-select -p)\"/SDKs/MacOSX.sdk/usr/include/stdint.h"
|
|
elif [ -f "$(xcode-select -p)/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/stdint.h" ]; then
|
|
stdint_h="\"$(xcode-select -p)\"/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/stdint.h"
|
|
else
|
|
die "Can't find macOS SDK 'stdint.h'"
|
|
fi
|
|
|
|
table_line_append DIST_EXTRA_CFLAGS libogg "-include $stdint_h"
|
|
|
|
table_line_append DIST_EXTRA_CFLAGS libvorbis "-include $stdint_h"
|
|
|
|
table_line_append DIST_EXTRA_CFLAGS libtheora "-include $stdint_h"
|
|
|
|
table_line_append DIST_EXTRA_CFLAGS ffmpeg "-include $stdint_h"
|
|
|
|
table_line_append DIST_MAKE_ARGS unzip "LD=clang"
|
|
|
|
# -Wl,-no_compact_unwind must be passed in LDFLAGS to openssl
|
|
table_line_append DIST_MAKE_ARGS openssl "LDFLAGS=\"\$LDFLAGS\""
|
|
|
|
# these are only applicable for cross-compiling to 32 bits
|
|
if [ "$target_cpu" = i386 ]; then
|
|
# some dists will not cross compile without a CONFIG_SITE
|
|
table_line_append DIST_ARGS pkgconfig '--host= --build='
|
|
table_line_append DIST_ARGS docbook2x '--host= --build='
|
|
|
|
# python does not support cross-compiling to 32bits
|
|
table_line_append DIST_ARGS python2 '--host= --build='
|
|
table_line_append DIST_ARGS python3 '--host= --build='
|
|
|
|
table_line_append DIST_ARGS sfml '-DCMAKE_OSX_ARCHITECTURES=i386'
|
|
|
|
table_line_append DIST_PRE_BUILD sfml " \
|
|
sed -i.bak '/FATAL_ERROR \"Only 64-bit architecture is supported/d' CMakeLists.txt; \
|
|
"
|
|
|
|
table_line_append DIST_ARGS libicu '--host= --build='
|
|
fi
|
|
|
|
table_line_replace DIST_CONFIGURE_TYPES libmodplug autoreconf
|
|
table_line_append DIST_PRE_BUILD libmodplug " \
|
|
sed -i.bak '/-mmacosx-version-min=/d' configure.ac; \
|
|
sed -i.bak 's/-lstdc++/-lc++/g' libmodplug.pc.in; \
|
|
"
|
|
|
|
table_line_append DIST_PRE_BUILD libzmq "sed -i.bak 's/-lstdc++/-lc++/g' src/libzmq.pc.in"
|
|
table_line_append DIST_PRE_BUILD ffmpeg "sed -i.bak 's/-lstdc++/-lc++/g' configure"
|
|
|
|
table_line_replace DISTS wxwidgets "https://github.com/wxWidgets/wxWidgets/releases/download/v3.0.5.1/wxWidgets-3.0.5.1.tar.bz2 lib/libwx_baseu-3.0*.a"
|
|
|
|
table_line_append DIST_CONFIGURE_OVERRIDES wxwidgets "--with-macosx-version-min=\$MACOSX_DEPLOYMENT_TARGET LDFLAGS=\"\$LDFLAGS -stdlib=libc++\" --disable-stl"
|
|
|
|
table_line_append DIST_ARGS libmodplug "CC=clang++ CXX=clang++"
|
|
|
|
table_line_append DIST_PRE_BUILD libvpx " \
|
|
sed -E -i.bak 's/(-mmacosx-version-min=)[[:digit:].]+/\1'\$MACOSX_DEPLOYMENT_TARGET'/g' build/make/configure.sh; \
|
|
"
|
|
|
|
table_line_append DIST_CONFIGURE_OVERRIDES ffmpeg "--disable-videotoolbox --extra-ldflags='-framework CoreText'"
|
|
|
|
table_line_append DIST_PATCHES ffmpeg "-p0 https://gist.githubusercontent.com/rkitover/db75d083b74617b186eec11965c1da74/raw/20da2f8c6d8c02ce284096c5e805ae671351cc6e/ffmpeg-macos10-7.patch"
|
|
|
|
builder "$@"
|
|
|
|
if [ -n "$PREV_XCODE" ]; then
|
|
printf "\nRe-setting '$PREV_XCODE' as the default Xcode...\n\n"
|
|
sudo xcode-select -s "$PREV_XCODE"
|
|
fi
|