#!/bin/bash set -x set -e cd `dirname "$0"` shadernames=(FullscreenVert BlitFrom2D BlitFrom2DArray BlitFrom3D BlitFromCube) generate_shaders() { fileplatform=$1 compileplatform=$2 sdkplatform=$3 minversion=$4 for shadername in "${shadernames[@]}"; do xcrun -sdk $sdkplatform metal -c -std=$compileplatform-metal1.1 -m$sdkplatform-version-min=$minversion -Wall -O3 -D COMPILE_$shadername -o ./$shadername.air ./Metal_Blit.metal || exit $? xcrun -sdk $sdkplatform metallib -o $shadername.metallib $shadername.air || exit $? xxd -i $shadername.metallib | perl -w -p -e 's/\Aunsigned /const unsigned /;' >./${shadername}_$fileplatform.h rm -f $shadername.air $shadername.metallib done } generate_shaders macos macos macosx 10.11 generate_shaders ios ios iphoneos 8.0 generate_shaders iphonesimulator ios iphonesimulator 8.0 generate_shaders tvos ios appletvos 9.0 generate_shaders tvsimulator ios appletvsimulator 9.0 # Bundle together one mega-header catShaders() { target=$1 for shadername in "${shadernames[@]}"; do cat ${shadername}_$target.h >> Metal_Blit.h done } rm -f Metal_Blit.h echo "#if defined(SDL_PLATFORM_IOS)" >> Metal_Blit.h echo "#if TARGET_OS_SIMULATOR" >> Metal_Blit.h catShaders iphonesimulator echo "#else" >> Metal_Blit.h catShaders ios echo "#endif" >> Metal_Blit.h echo "#elif defined(SDL_PLATFORM_TVOS)" >> Metal_Blit.h echo "#if TARGET_OS_SIMULATOR" >> Metal_Blit.h catShaders tvsimulator echo "#else" >> Metal_Blit.h catShaders tvos echo "#endif" >> Metal_Blit.h echo "#else" >> Metal_Blit.h catShaders macos echo "#endif" >> Metal_Blit.h # Clean up cleanupShaders() { target=$1 for shadername in "${shadernames[@]}"; do rm -f ${shadername}_$target.h done } cleanupShaders iphonesimulator cleanupShaders ios cleanupShaders tvsimulator cleanupShaders tvos cleanupShaders macos