diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ad75d07f7..f8e42fb2c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -145,6 +145,33 @@ jobs: run: | ./Godot.app/Contents/MacOS/Godot --path test -s script.gd + macos-arm64: + name: Build (macOS, Clang, cross-compile arm64) + runs-on: macos-latest + steps: + - name: Checkout + uses: actions/checkout@v2.3.4 + with: + submodules: recursive + + - name: Set up Python (for SCons) + uses: actions/setup-python@v2 + with: + python-version: '3.9.1' + + - name: Install dependencies + run: | + python -m pip install scons + + - name: Build godot-cpp + run: | + # The default SDK in github the actions environemnt seems to have problems compiling for arm64. + # Use the latest 11.x SDK. + SDK_BASE=/Library/Developer/CommandLineTools/SDKs + SDK_VER=$(ls $SDK_BASE | grep "MacOSX11." | sort -r | head -n1) + echo $SDK_BASE/$SDK_VER/ + scons target=release generate_bindings=yes macos_arch=arm64 macos_deployment_target=10.15 macos_sdk_path="$SDK_BASE/$SDK_VER/" -j $(sysctl -n hw.logicalcpu) + static-checks: name: Static Checks (clang-format) runs-on: ubuntu-20.04 diff --git a/SConstruct b/SConstruct index cfb2e9532..eb2c64038 100644 --- a/SConstruct +++ b/SConstruct @@ -143,6 +143,17 @@ opts.Add( 'macOS deployment target', 'default' ) +opts.Add( + 'macos_sdk_path', + 'macOS SDK path', + '' +) +opts.Add(EnumVariable( + 'macos_arch', + 'Target macOS architecture', + 'x86_64', + ['x86_64', 'arm64'] +)) opts.Add(EnumVariable( 'ios_arch', 'Target iOS architecture', @@ -217,14 +228,19 @@ elif env['platform'] == 'osx': 'Only 64-bit builds are supported for the macOS target.' ) - env.Append(CCFLAGS=['-std=c++14', '-arch', 'x86_64']) + env.Append(CCFLAGS=['-std=c++14', '-arch', env['macos_arch']]) if env['macos_deployment_target'] != 'default': env.Append(CCFLAGS=['-mmacosx-version-min=' + env['macos_deployment_target']]) + env.Append(LINKFLAGS=['-mmacosx-version-min=' + env['macos_deployment_target']]) + + if env['macos_sdk_path']: + env.Append(CCFLAGS=['-isysroot', env['macos_sdk_path']]) + env.Append(LINKFLAGS=['-isysroot', env['macos_sdk_path']]) env.Append(LINKFLAGS=[ '-arch', - 'x86_64', + env['macos_arch'], '-framework', 'Cocoa', '-Wl,-undefined,dynamic_lookup',