Skip to content

Instantly share code, notes, and snippets.

@logbase2
Created April 29, 2019 03:20
Show Gist options
  • Save logbase2/6411f21718912ef3195e87dade3540c6 to your computer and use it in GitHub Desktop.
Save logbase2/6411f21718912ef3195e87dade3540c6 to your computer and use it in GitHub Desktop.
Build script for building SDL2 and extensions for iOS, tvOS and macOS
#!/bin/bash
#
# usage: Make executable and type ./get_sdl.sh
#
# Note - Use -showBuildSettings such as:
# xcodebuild -configuration Release HEADER_SEARCH_PATHS="../../SDL/include/ ./Frameworks/FreeType.framework/Headers/" -target "Static Library" -arch x86_64 -sdk macosx -showBuildSettings
# to list all build settings...
#
# Note - Had to update the HEADER_SEARCH_PATHS and MACOSX_DEPLOYMENT_TARGET for
# a couple of libraries for the macOS versions. The HEADER_SEARCH_PATHS were set to look
# for a .framework for SDL.h etc. and the MACOSX_DEPLOYMENT_TARGET is set to 10.5
# but produces an error saying 10.6 is required.
#
# Ideas taken from: https://gist.github.com/i8degrees/74f977f41082c89b33fe
# and https://github.com/ThirdPartyNinjas/sdl_ios/blob/master/sdl_ios.sh
#
OUTPUT_DIR="SDL_BUILD"
SDL_VERSION="2.0.9"
SDL_TTF_VERSION="2.0.15"
SDL_IMAGE_VERSION="2.0.4"
SDL_NET_VERSION="2.0.1"
SDL_MIXER_VERSION="2.0.4"
SDL_DIR_NAME="SDL2-$SDL_VERSION"
SDL_TTF_DIR_NAME="SDL2_ttf-$SDL_TTF_VERSION"
SDL_IMAGE_DIR_NAME="SDL2_image-$SDL_IMAGE_VERSION"
SDL_NET_DIR_NAME="SDL2_net-$SDL_NET_VERSION"
SDL_MIXER_DIR_NAME="SDL2_mixer-$SDL_MIXER_VERSION"
SDL_FILE_NAME="$SDL_DIR_NAME.zip"
SDL_TTF_FILE_NAME="$SDL_TTF_DIR_NAME.zip"
SDL_IMAGE_FILE_NAME="$SDL_IMAGE_DIR_NAME.zip"
SDL_NET_FILE_NAME="$SDL_NET_DIR_NAME.zip"
SDL_MIXER_FILE_NAME="$SDL_MIXER_DIR_NAME.zip"
SDL_URL="https://www.libsdl.org/release/$SDL_FILE_NAME"
SDL_TTF_URL="https://www.libsdl.org/projects/SDL_ttf/release/$SDL_TTF_FILE_NAME"
SDL_IMAGE_URL="https://www.libsdl.org/projects/SDL_image/release/$SDL_IMAGE_FILE_NAME"
SDL_NET_URL="https://www.libsdl.org/projects/SDL_net/release/$SDL_NET_FILE_NAME"
SDL_MIXER_URL="https://www.libsdl.org/projects/SDL_mixer/release/$SDL_MIXER_FILE_NAME"
if [ -d "$OUTPUT_DIR" ]
then
echo "Found old output folder - deleting"
rm -Rf "$OUTPUT_DIR"
fi
mkdir "$OUTPUT_DIR"
cd "$OUTPUT_DIR"
# Main SDL2
# Build for iOS
mkdir SDL
mkdir SDL/include
mkdir SDL/lib
curl $SDL_URL -o "$SDL_FILE_NAME"
unzip "$SDL_FILE_NAME"
pushd .
cd "$SDL_DIR_NAME/Xcode-iOS/SDL"
cp ../../include/* ../../../SDL/include/
mkdir templibs
xcodebuild -configuration Release -target libSDL-iOS -arch i386 -sdk iphonesimulator clean build
cp build/Release-iphonesimulator/libSDL2.a templibs/libSDL2_i386.a
xcodebuild -configuration Release -target libSDL-iOS -arch x86_64 -sdk iphonesimulator clean build
cp build/Release-iphonesimulator/libSDL2.a templibs/libSDL2_x86_64.a
xcodebuild -configuration Release -target libSDL-iOS -arch armv7 -sdk iphoneos clean build
cp build/Release-iphoneos/libSDL2.a templibs/libSDL2_armv7.a
xcodebuild -configuration Release -target libSDL-iOS -arch armv7s -sdk iphoneos clean build
cp build/Release-iphoneos/libSDL2.a templibs/libSDL2_armv7s.a
xcodebuild -configuration Release -target libSDL-iOS -arch arm64 -sdk iphoneos clean build
cp build/Release-iphoneos/libSDL2.a templibs/libSDL2_arm64.a
lipo templibs/*.a -create -output ../../../SDL/lib/libSDL2-iOS.a
rm -rf templibs
rm -rf build
# Build for tvOS
mkdir templibs
xcodebuild -configuration Release -target libSDL-tvOS -arch x86_64 -sdk appletvsimulator clean build
cp build/Release-appletvsimulator/libSDL2.a templibs/libSDL2_x86_64.a
xcodebuild -configuration Release -target libSDL-tvOS -arch arm64 -sdk appletvos clean build
cp build/Release-appletvos/libSDL2.a templibs/libSDL2_arm64.a
lipo templibs/*.a -create -output ../../../SDL/lib/libSDL2-tvOS.a
rm -rf templibs
rm -rf build
# build for macOS
cd ../../Xcode/SDL
xcodebuild -configuration Release -target "Static Library" -arch x86_64 -sdk macosx clean build
cp build/Release/libSDL2.a ../../../SDL/lib/libSDL2-macOS.a
rm -rf build
popd
# SDL_TTF
mkdir SDL_ttf
mkdir SDL_ttf/include
mkdir SDL_ttf/lib
curl $SDL_TTF_URL -o "$SDL_TTF_FILE_NAME"
unzip "$SDL_TTF_FILE_NAME"
pushd .
cd "$SDL_TTF_DIR_NAME/Xcode-iOS/"
cp ../SDL_ttf.h ../../SDL_ttf/include/
mkdir templibs
# Build for iOS
xcodebuild -configuration Release -target libSDL_ttf-iOS -arch i386 -sdk iphonesimulator clean build
cp build/Release-iphonesimulator/libSDL2_ttf.a templibs/libSDL2_ttf_i386.a
xcodebuild -configuration Release -target libSDL_ttf-iOS -arch x86_64 -sdk iphonesimulator clean build
cp build/Release-iphonesimulator/libSDL2_ttf.a templibs/libSDL2_ttf_x86_64.a
xcodebuild -configuration Release -target libSDL_ttf-iOS -arch armv7 -sdk iphoneos clean build
cp build/Release-iphoneos/libSDL2_ttf.a templibs/libSDL2_ttf_armv7.a
xcodebuild -configuration Release -target libSDL_ttf-iOS -arch armv7s -sdk iphoneos clean build
cp build/Release-iphoneos/libSDL2_ttf.a templibs/libSDL2_ttf_armv7s.a
xcodebuild -configuration Release -target libSDL_ttf-iOS -arch arm64 -sdk iphoneos clean build
cp build/Release-iphoneos/libSDL2_ttf.a templibs/libSDL2_ttf_arm64.a
lipo templibs/*.a -create -output ../../SDL_ttf/lib/libSDL2_ttf-iOS.a
rm -rf templibs
rm -rf build
# Build for tvOS
mkdir templibs
xcodebuild -configuration Release -target libSDL_ttf-tvOS -arch x86_64 -sdk appletvsimulator clean build
cp build/Release-appletvsimulator/libSDL2_ttf.a templibs/libSDL2_ttf_x86_64.a
xcodebuild -configuration Release -target libSDL_ttf-tvOS -arch arm64 -sdk appletvos clean build
cp build/Release-appletvos/libSDL2_ttf.a templibs/libSDL2_ttf_arm64.a
lipo templibs/*.a -create -output ../../SDL_ttf/lib/libSDL2_ttf-tvOS.a
rm -rf templibs
rm -rf build
# build for macOS
cd ../Xcode/
xcodebuild -configuration Release HEADER_SEARCH_PATHS="../../SDL/include/ ./Frameworks/FreeType.framework/Headers/" MACOSX_DEPLOYMENT_TARGET="10.6" -target "Static Library" -arch x86_64 -sdk macosx clean build
cp build/Release/libSDL2_ttf.a ../../SDL_ttf/lib/libSDL2_ttf-macOS.a
rm -rf build
popd
# SDL_IMAGE
mkdir SDL_image
mkdir SDL_image/include
mkdir SDL_image/lib
curl $SDL_IMAGE_URL -o "$SDL_IMAGE_FILE_NAME"
unzip "$SDL_IMAGE_FILE_NAME"
pushd .
cd "$SDL_IMAGE_DIR_NAME/Xcode-iOS/"
cp ../SDL_image.h ../../SDL_image/include/
mkdir templibs
# Build for iOS
xcodebuild -configuration Release -target libSDL_image-iOS -arch i386 -sdk iphonesimulator clean build
cp build/Release-iphonesimulator/libSDL2_image.a templibs/libSDL2_image_i386.a
xcodebuild -configuration Release -target libSDL_image-iOS -arch x86_64 -sdk iphonesimulator clean build
cp build/Release-iphonesimulator/libSDL2_image.a templibs/libSDL2_image_x86_64.a
xcodebuild -configuration Release -target libSDL_image-iOS -arch armv7 -sdk iphoneos clean build
cp build/Release-iphoneos/libSDL2_image.a templibs/libSDL2_image_armv7.a
xcodebuild -configuration Release -target libSDL_image-iOS -arch armv7s -sdk iphoneos clean build
cp build/Release-iphoneos/libSDL2_image.a templibs/libSDL2_image_armv7s.a
xcodebuild -configuration Release -target libSDL_image-iOS -arch arm64 -sdk iphoneos clean build
cp build/Release-iphoneos/libSDL2_image.a templibs/libSDL2_image_arm64.a
lipo templibs/*.a -create -output ../../SDL_image/lib/libSDL2_image-iOS.a
rm -rf templibs
rm -rf build
# Build for tvOS
mkdir templibs
xcodebuild -configuration Release -target libSDL_image-tvOS -arch x86_64 -sdk appletvsimulator clean build
cp build/Release-appletvsimulator/libSDL2_image.a templibs/libSDL2_image_x86_64.a
xcodebuild -configuration Release -target libSDL_image-tvOS -arch arm64 -sdk appletvos clean build
cp build/Release-appletvos/libSDL2_image.a templibs/libSDL2_image_arm64.a
lipo templibs/*.a -create -output ../../SDL_image/lib/libSDL2_image-tvOS.a
rm -rf templibs
rm -rf build
# build for macOS
cd ../Xcode/
xcodebuild -configuration Release HEADER_SEARCH_PATHS="../../SDL/include/" -target "Static Library" MACOSX_DEPLOYMENT_TARGET="10.6" -arch x86_64 -sdk macosx clean build
cp build/Release/libSDL2_image.a ../../SDL_image/lib/libSDL2_image-macOS.a
rm -rf build
popd
# SDL_NET
mkdir SDL_net
mkdir SDL_net/include
mkdir SDL_net/lib
curl $SDL_NET_URL -o "$SDL_NET_FILE_NAME"
unzip "$SDL_NET_FILE_NAME"
pushd .
cd "$SDL_NET_DIR_NAME/Xcode-iOS/"
cp ../SDL_net.h ../../SDL_net/include/
mkdir templibs
# Build for iOS
xcodebuild -configuration Release -target "Static Library" -arch i386 -sdk iphonesimulator clean build
cp build/Release-iphonesimulator/libSDL2_net.a templibs/libSDL2_net_i386.a
xcodebuild -configuration Release -target "Static Library" -arch x86_64 -sdk iphonesimulator clean build
cp build/Release-iphonesimulator/libSDL2_net.a templibs/libSDL2_net_x86_64.a
xcodebuild -configuration Release -target "Static Library" -arch armv7 -sdk iphoneos clean build
cp build/Release-iphoneos/libSDL2_net.a templibs/libSDL2_net_armv7.a
xcodebuild -configuration Release -target "Static Library" -arch armv7s -sdk iphoneos clean build
cp build/Release-iphoneos/libSDL2_net.a templibs/libSDL2_net_armv7s.a
xcodebuild -configuration Release -target "Static Library" -arch arm64 -sdk iphoneos clean build
cp build/Release-iphoneos/libSDL2_net.a templibs/libSDL2_net_arm64.a
lipo templibs/*.a -create -output ../../SDL_net/lib/libSDL2_net-iOS.a
rm -rf templibs
rm -rf build
# Build for tvOS
mkdir templibs
xcodebuild -configuration Release -target "Static Library" -arch x86_64 -sdk appletvsimulator clean build
cp build/Release-appletvsimulator/libSDL2_net.a templibs/libSDL2_net_x86_64.a
xcodebuild -configuration Release -target "Static Library" -arch arm64 -sdk appletvos clean build
cp build/Release-appletvos/libSDL2_net.a templibs/libSDL2_net_arm64.a
lipo templibs/*.a -create -output ../../SDL_net/lib/libSDL2_net-tvOS.a
rm -rf templibs
rm -rf build
# build for macOS
cd ../Xcode/
xcodebuild -configuration Release HEADER_SEARCH_PATHS="../../SDL/include/" -target "Static Library" MACOSX_DEPLOYMENT_TARGET="10.6" -arch x86_64 -sdk macosx clean build
cp build/Release/libSDL2_net.a ../../SDL_net/lib/libSDL2_net-macOS.a
rm -rf build
popd
# SDL_MIXER
mkdir SDL_mixer
mkdir SDL_mixer/include
mkdir SDL_mixer/lib
curl $SDL_MIXER_URL -o "$SDL_MIXER_FILE_NAME"
unzip "$SDL_MIXER_FILE_NAME"
pushd .
cd "$SDL_MIXER_DIR_NAME/Xcode-iOS/"
cp ../SDL_mixer.h ../../SDL_mixer/include/
mkdir templibs
# Build for iOS
xcodebuild -configuration Release -target libSDL_mixer-iOS -arch i386 -sdk iphonesimulator clean build
cp build/Release-iphonesimulator/libSDL2_mixer.a templibs/libSDL2_mixer_i386.a
xcodebuild -configuration Release -target libSDL_mixer-iOS -arch x86_64 -sdk iphonesimulator clean build
cp build/Release-iphonesimulator/libSDL2_mixer.a templibs/libSDL2_mixer_x86_64.a
xcodebuild -configuration Release -target libSDL_mixer-iOS -arch armv7 -sdk iphoneos clean build
cp build/Release-iphoneos/libSDL2_mixer.a templibs/libSDL2_mixer_armv7.a
xcodebuild -configuration Release -target libSDL_mixer-iOS -arch armv7s -sdk iphoneos clean build
cp build/Release-iphoneos/libSDL2_mixer.a templibs/libSDL2_mixer_armv7s.a
xcodebuild -configuration Release -target libSDL_mixer-iOS -arch arm64 -sdk iphoneos clean build
cp build/Release-iphoneos/libSDL2_mixer.a templibs/libSDL2_mixer_arm64.a
lipo templibs/*.a -create -output ../../SDL_mixer/lib/libSDL2_mixer-iOS.a
rm -rf templibs
rm -rf build
# Build for tvOS
mkdir templibs
xcodebuild -configuration Release -target libSDL_mixer-tvOS -arch x86_64 -sdk appletvsimulator clean build
cp build/Release-appletvsimulator/libSDL2_mixer.a templibs/libSDL2_mixer_x86_64.a
xcodebuild -configuration Release -target libSDL_mixer-tvOS -arch arm64 -sdk appletvos clean build
cp build/Release-appletvos/libSDL2_mixer.a templibs/libSDL2_mixer_arm64.a
lipo templibs/*.a -create -output ../../SDL_mixer/lib/libSDL2_mixer-tvOS.a
rm -rf templibs
rm -rf build
# build for macOS
cd ../Xcode/
xcodebuild -configuration Release HEADER_SEARCH_PATHS="../../SDL/include/" -target "Static Library" MACOSX_DEPLOYMENT_TARGET="10.6" -arch x86_64 -sdk macosx clean build
cp build/Release/libSDL2_mixer.a ../../SDL_mixer/lib/libSDL2_mixer-macOS.a
rm -rf build
popd
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment