mirror of
https://github.com/godotengine/godot-mono-builds.git
synced 2026-01-04 14:10:11 +03:00
Compare commits
41 Commits
release/mo
...
release-52
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5299efd80c | ||
|
|
11364fafc7 | ||
|
|
a7297fdf09 | ||
|
|
08b10e1b66 | ||
|
|
6291fa07a6 | ||
|
|
574f1404d2 | ||
|
|
4bf530983a | ||
|
|
d29929a407 | ||
|
|
fcf205c105 | ||
|
|
2fa04b9dc7 | ||
|
|
7533d081e4 | ||
|
|
aaee521d08 | ||
|
|
20368d7289 | ||
|
|
c865201eba | ||
|
|
62c407fd0f | ||
|
|
2ef74ff260 | ||
|
|
1cc1257eda | ||
|
|
187d156c89 | ||
|
|
4e93604bc4 | ||
|
|
efd26fbbff | ||
|
|
baa6f22377 | ||
|
|
dfb29cab81 | ||
|
|
0d72e71a50 | ||
|
|
1755de4f1e | ||
|
|
6d4f576264 | ||
|
|
f63f4e2e44 | ||
|
|
aad08390cb | ||
|
|
2d30ce6362 | ||
|
|
c6bdc0feca | ||
|
|
d62d874dd2 | ||
|
|
2bf7d71c7c | ||
|
|
fb6da044d7 | ||
|
|
c3a9d311bc | ||
|
|
d75582bd3c | ||
|
|
75a0b00364 | ||
|
|
47e40daefe | ||
|
|
29683d76fc | ||
|
|
7937417c83 | ||
|
|
0cfb06c6e4 | ||
|
|
0a2b5f8fab | ||
|
|
61df21a190 |
394
.github/workflows/build.yml
vendored
394
.github/workflows/build.yml
vendored
@@ -21,29 +21,19 @@ on:
|
||||
branches:
|
||||
- 'release/**'
|
||||
|
||||
# Use ubuntu-16.04 for the best compatibility.
|
||||
# Use ubuntu-latest for the Windows builds because of outdated MinGW headers on ubuntu-16.04.
|
||||
# Use ubuntu-latest for the WASM runtime ("machine `wasm32' not recognized" on ubuntu-16.04)
|
||||
|
||||
env:
|
||||
# Use SHA or tag instead of the branch for caching purposes.
|
||||
MONO_TAG: mono-6.12.0.144
|
||||
PYTHON_VERSION: 3.9
|
||||
MONO_TAG: mono-6.12.0.182
|
||||
PYTHON_VERSION: '3.10'
|
||||
# Should match the version that Mono supports.
|
||||
EMSDK_VERSION: 1.39.9
|
||||
ANDROID_CMAKE_VERSION: 3.10.2.4988404
|
||||
# These should be synced with the Godot repo.
|
||||
# platform/android/java/app/config.gradle
|
||||
ANDROID_PLATFORM: android-29
|
||||
ANDROID_API: 18
|
||||
ANDROID_NDK_VERSION: 21.4.7075529
|
||||
# platform/iphone/detect.py
|
||||
IOS_VERSION_MIN: 10.0
|
||||
|
||||
jobs:
|
||||
linux:
|
||||
name: Linux
|
||||
runs-on: ubuntu-16.04
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
target: [x86, x86_64]
|
||||
@@ -51,27 +41,45 @@ jobs:
|
||||
- name: Set Environment Variables
|
||||
run: |
|
||||
echo "MONO_SOURCE_ROOT=$GITHUB_WORKSPACE/mono_sources" >> $GITHUB_ENV
|
||||
- name: Install Dependencies (x86)
|
||||
if: matrix.target == 'x86'
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
sudo dpkg --add-architecture i386
|
||||
sudo apt-get -y update
|
||||
sudo apt-get -y install git autoconf libtool libtool-bin automake build-essential gettext cmake python3 curl
|
||||
sudo apt-get -y install gcc-multilib g++-multilib zlib1g-dev:i386
|
||||
- name: Install Dependencies (x86_64)
|
||||
sudo apt-get -y install git autoconf libtool libtool-bin automake gettext cmake python3 curl
|
||||
- name: Install Linux SDK (x86_64)
|
||||
if: matrix.target == 'x86_64'
|
||||
run: |
|
||||
sudo apt-get -y update
|
||||
sudo apt-get -y install git autoconf libtool libtool-bin automake build-essential gettext cmake python3 curl
|
||||
cd /home/runner
|
||||
curl -LO https://downloads.tuxfamily.org/godotengine/toolchains/linux/2021-02-11/x86_64-godot-linux-gnu_sdk-buildroot.tar.bz2
|
||||
tar xf x86_64-godot-linux-gnu_sdk-buildroot.tar.bz2
|
||||
rm -f x86_64-godot-linux-gnu_sdk-buildroot.tar.bz2
|
||||
cd x86_64-godot-linux-gnu_sdk-buildroot
|
||||
./relocate-sdk.sh
|
||||
cd bin
|
||||
rm -f {aclocal*,auto*,libtool*,m4}
|
||||
for file in x86_64-godot-*; do alias=$(echo $file | sed "s/godot-//"); ln -s $file $alias; done
|
||||
echo "PATH=/home/runner/x86_64-godot-linux-gnu_sdk-buildroot/bin:${PATH}" >> $GITHUB_ENV
|
||||
- name: Install Linux SDK (x86)
|
||||
if: matrix.target == 'x86'
|
||||
run: |
|
||||
cd /home/runner
|
||||
curl -LO https://downloads.tuxfamily.org/godotengine/toolchains/linux/2021-02-11/i686-godot-linux-gnu_sdk-buildroot.tar.bz2
|
||||
tar xf i686-godot-linux-gnu_sdk-buildroot.tar.bz2
|
||||
rm -f i686-godot-linux-gnu_sdk-buildroot.tar.bz2
|
||||
cd i686-godot-linux-gnu_sdk-buildroot
|
||||
./relocate-sdk.sh
|
||||
cd bin
|
||||
rm -f {aclocal*,auto*,libtool*,m4}
|
||||
for file in i686-godot-*; do alias=$(echo $file | sed "s/godot-//"); ln -s $file $alias; done
|
||||
echo "PATH=/home/runner/i686-godot-linux-gnu_sdk-buildroot/bin:${PATH}" >> $GITHUB_ENV
|
||||
- name: Cache Mono Sources
|
||||
id: cache_mono_sources
|
||||
uses: actions/cache@v2.1.5
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ${{ env.MONO_SOURCE_ROOT }}
|
||||
key: ${{ runner.os }}-${{ env.MONO_TAG }}-mono-sources
|
||||
- name: Checkout Mono Sources
|
||||
if: steps.cache_mono_sources.outputs.cache-hit != 'true'
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: mono/mono
|
||||
ref: ${{ env.MONO_TAG }}
|
||||
@@ -80,11 +88,11 @@ jobs:
|
||||
- name: Clean Mono
|
||||
run: pushd ${{ env.MONO_SOURCE_ROOT }} && git reset --hard && git clean -xffd && git submodule foreach --recursive git reset --hard && git submodule foreach --recursive git clean -xffd && git submodule update --init --recursive && popd
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
path: godot-mono-builds
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v2.2.2
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
- name: Patch Mono
|
||||
@@ -101,7 +109,7 @@ jobs:
|
||||
mkdir -p $HOME/mono-installs-artifacts
|
||||
(cd $HOME/mono-installs && zip -ry $HOME/mono-installs-artifacts/linux-${{ matrix.target }}.zip desktop-linux-${{ matrix.target }}-release)
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: linux-${{ matrix.target }}
|
||||
path: ~/mono-installs-artifacts/linux-${{ matrix.target }}.zip
|
||||
@@ -109,7 +117,7 @@ jobs:
|
||||
run: pushd ${{ env.MONO_SOURCE_ROOT }} && git reset --hard && git clean -xffd && git submodule foreach --recursive git reset --hard && git submodule foreach --recursive git clean -xffd && git submodule update --init --recursive && popd
|
||||
- name: Upload config.log After Error
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: linux-${{ matrix.target }}-config.log
|
||||
path: ~/mono-configs/desktop-linux-${{ matrix.target }}-release/config.log
|
||||
@@ -139,13 +147,13 @@ jobs:
|
||||
sudo apt-get -y install mingw-w64 libz-mingw-w64-dev
|
||||
- name: Cache Mono Sources
|
||||
id: cache_mono_sources
|
||||
uses: actions/cache@v2.1.5
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ${{ env.MONO_SOURCE_ROOT }}
|
||||
key: ${{ runner.os }}-${{ env.MONO_TAG }}-mono-sources
|
||||
- name: Checkout Mono Sources
|
||||
if: steps.cache_mono_sources.outputs.cache-hit != 'true'
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: mono/mono
|
||||
ref: ${{ env.MONO_TAG }}
|
||||
@@ -154,11 +162,11 @@ jobs:
|
||||
- name: Clean Mono
|
||||
run: pushd ${{ env.MONO_SOURCE_ROOT }} && git reset --hard && git clean -xffd && git submodule foreach --recursive git reset --hard && git submodule foreach --recursive git clean -xffd && git submodule update --init --recursive && popd
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
path: godot-mono-builds
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v2.2.2
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
- name: Patch Mono
|
||||
@@ -175,7 +183,7 @@ jobs:
|
||||
mkdir -p $HOME/mono-installs-artifacts
|
||||
(cd $HOME/mono-installs && zip -ry $HOME/mono-installs-artifacts/windows-${{ matrix.target }}.zip desktop-windows-${{ matrix.target }}-release)
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: windows-${{ matrix.target }}
|
||||
path: ~/mono-installs-artifacts/windows-${{ matrix.target }}.zip
|
||||
@@ -183,7 +191,7 @@ jobs:
|
||||
run: pushd ${{ env.MONO_SOURCE_ROOT }} && git reset --hard && git clean -xffd && git submodule foreach --recursive git reset --hard && git submodule foreach --recursive git clean -xffd && git submodule update --init --recursive && popd
|
||||
- name: Upload config.log After Error
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: windows-${{ matrix.target }}-config.log
|
||||
path: ~/mono-configs/desktop-windows-${{ matrix.target }}-release/config.log
|
||||
@@ -193,7 +201,7 @@ jobs:
|
||||
runs-on: macos-latest
|
||||
strategy:
|
||||
matrix:
|
||||
target: [x86_64]
|
||||
target: [arm64, x86_64]
|
||||
steps:
|
||||
- name: Set Environment Variables
|
||||
run: |
|
||||
@@ -203,13 +211,13 @@ jobs:
|
||||
brew install autoconf automake libtool pkg-config cmake python3
|
||||
- name: Cache Mono Sources
|
||||
id: cache_mono_sources
|
||||
uses: actions/cache@v2.1.5
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ${{ env.MONO_SOURCE_ROOT }}
|
||||
key: ${{ runner.os }}-${{ env.MONO_TAG }}-mono-sources
|
||||
- name: Checkout Mono Sources
|
||||
if: steps.cache_mono_sources.outputs.cache-hit != 'true'
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: mono/mono
|
||||
ref: ${{ env.MONO_TAG }}
|
||||
@@ -218,11 +226,11 @@ jobs:
|
||||
- name: Clean Mono
|
||||
run: pushd ${{ env.MONO_SOURCE_ROOT }} && git reset --hard && git clean -xffd && git submodule foreach --recursive git reset --hard && git submodule foreach --recursive git clean -xffd && git submodule update --init --recursive && popd
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
path: godot-mono-builds
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v2.2.2
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
- name: Patch Mono
|
||||
@@ -239,7 +247,7 @@ jobs:
|
||||
mkdir -p $HOME/mono-installs-artifacts
|
||||
(cd $HOME/mono-installs && zip -ry $HOME/mono-installs-artifacts/osx-${{ matrix.target }}.zip desktop-osx-${{ matrix.target }}-release)
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: osx-${{ matrix.target }}
|
||||
path: ~/mono-installs-artifacts/osx-${{ matrix.target }}.zip
|
||||
@@ -247,7 +255,7 @@ jobs:
|
||||
run: pushd ${{ env.MONO_SOURCE_ROOT }} && git reset --hard && git clean -xffd && git submodule foreach --recursive git reset --hard && git submodule foreach --recursive git clean -xffd && git submodule update --init --recursive && popd
|
||||
- name: Upload config.log After Error
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: osx-${{ matrix.target }}-config.log
|
||||
path: ~/mono-configs/desktop-osx-${{ matrix.target }}-release/config.log
|
||||
@@ -257,7 +265,7 @@ jobs:
|
||||
runs-on: macos-latest
|
||||
strategy:
|
||||
matrix:
|
||||
target: [arm64, x86_64]
|
||||
target: [arm64, x86_64, arm64-sim]
|
||||
steps:
|
||||
- name: Set Environment Variables
|
||||
run: |
|
||||
@@ -267,13 +275,13 @@ jobs:
|
||||
brew install autoconf automake libtool pkg-config cmake python3
|
||||
- name: Cache Mono Sources
|
||||
id: cache_mono_sources
|
||||
uses: actions/cache@v2.1.5
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ${{ env.MONO_SOURCE_ROOT }}
|
||||
key: ${{ runner.os }}-${{ env.MONO_TAG }}-mono-sources
|
||||
- name: Checkout Mono Sources
|
||||
if: steps.cache_mono_sources.outputs.cache-hit != 'true'
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: mono/mono
|
||||
ref: ${{ env.MONO_TAG }}
|
||||
@@ -282,11 +290,11 @@ jobs:
|
||||
- name: Clean Mono
|
||||
run: pushd ${{ env.MONO_SOURCE_ROOT }} && git reset --hard && git clean -xffd && git submodule foreach --recursive git reset --hard && git submodule foreach --recursive git clean -xffd && git submodule update --init --recursive && popd
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
path: godot-mono-builds
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v2.2.2
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
- name: Patch Mono
|
||||
@@ -304,7 +312,7 @@ jobs:
|
||||
mkdir -p $HOME/mono-installs-artifacts
|
||||
(cd $HOME/mono-installs && zip -ry $HOME/mono-installs-artifacts/ios-${{ matrix.target }}.zip ios-${{ matrix.target }}-release)
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: ios-${{ matrix.target }}
|
||||
path: ~/mono-installs-artifacts/ios-${{ matrix.target }}.zip
|
||||
@@ -312,7 +320,7 @@ jobs:
|
||||
run: pushd ${{ env.MONO_SOURCE_ROOT }} && git reset --hard && git clean -xffd && git submodule foreach --recursive git reset --hard && git submodule foreach --recursive git clean -xffd && git submodule update --init --recursive && popd
|
||||
- name: Upload config.log After Error
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: ios-${{ matrix.target }}-config.log
|
||||
path: ~/mono-configs/ios-${{ matrix.target }}-release/config.log
|
||||
@@ -337,13 +345,13 @@ jobs:
|
||||
brew install autoconf automake libtool pkg-config cmake python3
|
||||
- name: Cache Mono Sources
|
||||
id: cache_mono_sources
|
||||
uses: actions/cache@v2.1.5
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ${{ env.MONO_SOURCE_ROOT }}
|
||||
key: ${{ runner.os }}-${{ env.MONO_TAG }}-mono-sources
|
||||
- name: Checkout Mono Sources
|
||||
if: steps.cache_mono_sources.outputs.cache-hit != 'true'
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: mono/mono
|
||||
ref: ${{ env.MONO_TAG }}
|
||||
@@ -352,18 +360,18 @@ jobs:
|
||||
- name: Clean Mono
|
||||
run: pushd ${{ env.MONO_SOURCE_ROOT }} && git reset --hard && git clean -xffd && git submodule foreach --recursive git reset --hard && git submodule foreach --recursive git clean -xffd && git submodule update --init --recursive && popd
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
path: godot-mono-builds
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v2.2.2
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
- name: Patch Mono
|
||||
run:
|
||||
python3 godot-mono-builds/patch_mono.py
|
||||
- name: Download LLVM artifact
|
||||
uses: actions/download-artifact@v2
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: llvm-${{ matrix.llvm }}-macos-latest
|
||||
# Tilde ~/ not supported when downloading yet: https://github.com/actions/download-artifact/issues/37
|
||||
@@ -391,7 +399,7 @@ jobs:
|
||||
mkdir -p $HOME/mono-installs-artifacts
|
||||
(cd $HOME/mono-installs && zip -ry $HOME/mono-installs-artifacts/ios-${{ matrix.target }}.zip ios-${{ matrix.target }}-release)
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: ios-${{ matrix.target }}
|
||||
path: ~/mono-installs-artifacts/ios-${{ matrix.target }}.zip
|
||||
@@ -399,49 +407,41 @@ jobs:
|
||||
run: pushd ${{ env.MONO_SOURCE_ROOT }} && git reset --hard && git clean -xffd && git submodule foreach --recursive git reset --hard && git submodule foreach --recursive git clean -xffd && git submodule update --init --recursive && popd
|
||||
- name: Upload Runtime config.log After Error
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: ios-${{ matrix.target }}-runtime-config.log
|
||||
path: ~/mono-configs/ios-${{ matrix.runtime_target }}-release/config.log
|
||||
- name: Upload Cross config.log After Error
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: ios-${{ matrix.target }}-config.log
|
||||
path: ~/mono-configs/ios-${{ matrix.target }}-release/config.log
|
||||
|
||||
android:
|
||||
name: Android
|
||||
runs-on: ubuntu-16.04
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
target: [armeabi-v7a, arm64-v8a, x86, x86_64]
|
||||
target: [armv7, arm64v8, x86, x86_64]
|
||||
steps:
|
||||
- name: Set Environment Variables
|
||||
run: |
|
||||
env
|
||||
echo "MONO_SOURCE_ROOT=$GITHUB_WORKSPACE/mono_sources" >> $GITHUB_ENV
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
sudo apt-get -y update
|
||||
sudo apt-get -y install git autoconf libtool libtool-bin automake build-essential gettext cmake python3 curl
|
||||
sudo apt-get -y install snapd
|
||||
- name: Install Android SDK Manager
|
||||
run: |
|
||||
sudo snap install androidsdk
|
||||
androidsdk "platforms;${ANDROID_PLATFORM}"
|
||||
androidsdk "ndk;${ANDROID_NDK_VERSION}"
|
||||
androidsdk "cmake;${ANDROID_CMAKE_VERSION}"
|
||||
echo "ANDROID_SDK_ROOT=$HOME/snap/androidsdk/current/" >> $GITHUB_ENV
|
||||
echo "ANDROID_NDK_ROOT=$ANDROID_SDK_ROOT/ndk/$ANDROID_NDK_VERSION" >> $GITHUB_ENV
|
||||
- name: Cache Mono Sources
|
||||
id: cache_mono_sources
|
||||
uses: actions/cache@v2.1.5
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ${{ env.MONO_SOURCE_ROOT }}
|
||||
key: ${{ runner.os }}-${{ env.MONO_TAG }}-mono-sources
|
||||
- name: Checkout Mono Sources
|
||||
if: steps.cache_mono_sources.outputs.cache-hit != 'true'
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: mono/mono
|
||||
ref: ${{ env.MONO_TAG }}
|
||||
@@ -450,11 +450,11 @@ jobs:
|
||||
- name: Clean Mono
|
||||
run: pushd ${{ env.MONO_SOURCE_ROOT }} && git reset --hard && git clean -xffd && git submodule foreach --recursive git reset --hard && git submodule foreach --recursive git clean -xffd && git submodule update --init --recursive && popd
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
path: godot-mono-builds
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v2.2.2
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
- name: Patch Mono
|
||||
@@ -462,16 +462,16 @@ jobs:
|
||||
python3 godot-mono-builds/patch_mono.py
|
||||
- name: Configure
|
||||
run:
|
||||
python3 godot-mono-builds/android.py configure --target=${{ matrix.target }} -j 2 --android-api-version=${ANDROID_API} --android-cmake-version=${ANDROID_CMAKE_VERSION}
|
||||
python3 godot-mono-builds/android.py configure --target=${{ matrix.target }} -j 2
|
||||
- name: Make
|
||||
run:
|
||||
python3 godot-mono-builds/android.py make --target=${{ matrix.target }} -j 2 --android-api-version=${ANDROID_API} --android-cmake-version=${ANDROID_CMAKE_VERSION}
|
||||
python3 godot-mono-builds/android.py make --target=${{ matrix.target }} -j 2
|
||||
- name: Compress Output
|
||||
run: |
|
||||
mkdir -p $HOME/mono-installs-artifacts
|
||||
(cd $HOME/mono-installs && zip -ry $HOME/mono-installs-artifacts/android-${{ matrix.target }}.zip android-${{ matrix.target }}-release)
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: android-${{ matrix.target }}
|
||||
path: ~/mono-installs-artifacts/android-${{ matrix.target }}.zip
|
||||
@@ -479,158 +479,7 @@ jobs:
|
||||
run: pushd ${{ env.MONO_SOURCE_ROOT }} && git reset --hard && git clean -xffd && git submodule foreach --recursive git reset --hard && git submodule foreach --recursive git clean -xffd && git submodule update --init --recursive && popd
|
||||
- name: Upload config.log After Error
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: android-${{ matrix.target }}-config.log
|
||||
path: ~/mono-configs/android-${{ matrix.target }}-release/config.log
|
||||
|
||||
android-cross:
|
||||
needs: llvm
|
||||
name: Android Cross-compiler
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
target: [cross-arm, cross-arm64, cross-x86, cross-x86_64, cross-arm-win, cross-arm64-win, cross-x86-win, cross-x86_64-win]
|
||||
os: [ubuntu-16.04, ubuntu-latest]
|
||||
exclude:
|
||||
- target: cross-arm
|
||||
os: ubuntu-latest
|
||||
- target: cross-arm64
|
||||
os: ubuntu-latest
|
||||
- target: cross-x86
|
||||
os: ubuntu-latest
|
||||
- target: cross-x86_64
|
||||
os: ubuntu-latest
|
||||
- target: cross-arm-win
|
||||
os: ubuntu-16.04
|
||||
- target: cross-arm64-win
|
||||
os: ubuntu-16.04
|
||||
- target: cross-x86-win
|
||||
os: ubuntu-16.04
|
||||
- target: cross-x86_64-win
|
||||
os: ubuntu-16.04
|
||||
include:
|
||||
- target: cross-arm
|
||||
llvm: llvm64
|
||||
runtime_target: armeabi-v7a
|
||||
os: ubuntu-16.04
|
||||
- target: cross-arm64
|
||||
llvm: llvm64
|
||||
runtime_target: arm64-v8a
|
||||
os: ubuntu-16.04
|
||||
- target: cross-x86
|
||||
llvm: llvm64
|
||||
runtime_target: x86
|
||||
os: ubuntu-16.04
|
||||
- target: cross-x86_64
|
||||
llvm: llvm64
|
||||
runtime_target: x86_64
|
||||
os: ubuntu-16.04
|
||||
- target: cross-arm-win
|
||||
llvm: llvmwin64
|
||||
runtime_target: armeabi-v7a
|
||||
os: ubuntu-latest
|
||||
- target: cross-arm64-win
|
||||
llvm: llvmwin64
|
||||
runtime_target: arm64-v8a
|
||||
os: ubuntu-latest
|
||||
- target: cross-x86-win
|
||||
llvm: llvmwin64
|
||||
runtime_target: x86
|
||||
os: ubuntu-latest
|
||||
- target: cross-x86_64-win
|
||||
llvm: llvmwin64
|
||||
runtime_target: x86_64
|
||||
os: ubuntu-latest
|
||||
steps:
|
||||
- name: Set Environment Variables
|
||||
run: |
|
||||
echo "MONO_SOURCE_ROOT=$GITHUB_WORKSPACE/mono_sources" >> $GITHUB_ENV
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
sudo apt-get -y update
|
||||
sudo apt-get -y install git autoconf libtool libtool-bin automake build-essential gettext cmake python3 curl
|
||||
- name: Install Dependencies (Targeting Windows)
|
||||
if: matrix.llvm == 'llvmwin64'
|
||||
run: |
|
||||
sudo apt-get -y install mingw-w64 libz-mingw-w64-dev
|
||||
- name: Install Android SDK Manager
|
||||
run: |
|
||||
sudo apt-get -y install snapd
|
||||
sudo snap install androidsdk
|
||||
androidsdk "ndk;${ANDROID_NDK_VERSION}"
|
||||
androidsdk "cmake;${ANDROID_CMAKE_VERSION}"
|
||||
echo "ANDROID_SDK_ROOT=$HOME/snap/androidsdk/current/" >> $GITHUB_ENV
|
||||
echo "ANDROID_NDK_ROOT=$ANDROID_SDK_ROOT/ndk/$ANDROID_NDK_VERSION" >> $GITHUB_ENV
|
||||
- name: Cache Mono Sources
|
||||
id: cache_mono_sources
|
||||
uses: actions/cache@v2.1.5
|
||||
with:
|
||||
path: ${{ env.MONO_SOURCE_ROOT }}
|
||||
key: ${{ runner.os }}-${{ env.MONO_TAG }}-mono-sources
|
||||
- name: Checkout Mono Sources
|
||||
if: steps.cache_mono_sources.outputs.cache-hit != 'true'
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: mono/mono
|
||||
ref: ${{ env.MONO_TAG }}
|
||||
submodules: true
|
||||
path: ${{ env.MONO_SOURCE_ROOT }}
|
||||
- name: Clean Mono
|
||||
run: pushd ${{ env.MONO_SOURCE_ROOT }} && git reset --hard && git clean -xffd && git submodule foreach --recursive git reset --hard && git submodule foreach --recursive git clean -xffd && git submodule update --init --recursive && popd
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
path: godot-mono-builds
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v2.2.2
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
- name: Download LLVM artifact
|
||||
uses: actions/download-artifact@v2
|
||||
with:
|
||||
name: llvm-${{ matrix.llvm }}-${{ matrix.os }}
|
||||
# Tilde ~/ not supported when downloading yet: https://github.com/actions/download-artifact/issues/37
|
||||
# File permissions are also messed up: https://github.com/actions/upload-artifact/issues/38
|
||||
# We have to manually move the folder and restore the file permissions in the next step.
|
||||
path: ./llvm-${{ matrix.llvm }}
|
||||
- name: Stamp LLVM
|
||||
run: |
|
||||
mkdir -p $HOME/mono-installs/ && mv ./llvm-${{ matrix.llvm }} $HOME/mono-installs/
|
||||
chmod 755 $HOME/mono-installs/llvm-${{ matrix.llvm }}/bin/*
|
||||
mkdir -p $HOME/mono-configs/ && touch $HOME/mono-configs/.stamp-${{ matrix.llvm }}-make
|
||||
- name: Patch Mono
|
||||
run:
|
||||
python3 godot-mono-builds/patch_mono.py
|
||||
- name: Configure Runtime
|
||||
run:
|
||||
python3 godot-mono-builds/android.py configure --target=${{ matrix.runtime_target }} -j 2 --android-api-version=${ANDROID_API} --android-cmake-version=${ANDROID_CMAKE_VERSION}
|
||||
- name: Configure
|
||||
run:
|
||||
python3 godot-mono-builds/android.py configure --target=${{ matrix.target }} -j 2 --android-api-version=${ANDROID_API} --android-cmake-version=${ANDROID_CMAKE_VERSION}
|
||||
- name: Make
|
||||
run:
|
||||
python3 godot-mono-builds/android.py make --target=${{ matrix.target }} -j 2 --android-api-version=${ANDROID_API} --android-cmake-version=${ANDROID_CMAKE_VERSION}
|
||||
- name: Compress Output
|
||||
run: |
|
||||
mkdir -p $HOME/mono-installs-artifacts
|
||||
(cd $HOME/mono-installs && zip -ry $HOME/mono-installs-artifacts/android-${{ matrix.target }}.zip android-${{ matrix.target }}-release)
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: android-${{ matrix.target }}
|
||||
path: ~/mono-installs-artifacts/android-${{ matrix.target }}.zip
|
||||
- name: Clean Mono
|
||||
run: pushd ${{ env.MONO_SOURCE_ROOT }} && git reset --hard && git clean -xffd && git submodule foreach --recursive git reset --hard && git submodule foreach --recursive git clean -xffd && git submodule update --init --recursive && popd
|
||||
- name: Upload Runtime config.log After Error
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: android-${{ matrix.target }}-runtime-config.log
|
||||
path: ~/mono-configs/android-${{ matrix.runtime_target }}-release/config.log
|
||||
- name: Upload Cross config.log After Error
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: android-${{ matrix.target }}-config.log
|
||||
path: ~/mono-configs/android-${{ matrix.target }}-release/config.log
|
||||
@@ -651,13 +500,13 @@ jobs:
|
||||
sudo apt-get -y install git autoconf libtool libtool-bin automake build-essential gettext cmake python3 curl
|
||||
- name: Cache Mono Sources
|
||||
id: cache_mono_sources
|
||||
uses: actions/cache@v2.1.5
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ${{ env.MONO_SOURCE_ROOT }}
|
||||
key: ${{ runner.os }}-${{ env.MONO_TAG }}-mono-sources
|
||||
- name: Checkout Mono Sources
|
||||
if: steps.cache_mono_sources.outputs.cache-hit != 'true'
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: mono/mono
|
||||
ref: ${{ env.MONO_TAG }}
|
||||
@@ -666,15 +515,15 @@ jobs:
|
||||
- name: Clean Mono
|
||||
run: pushd ${{ env.MONO_SOURCE_ROOT }} && git reset --hard && git clean -xffd && git submodule foreach --recursive git reset --hard && git submodule foreach --recursive git clean -xffd && git submodule update --init --recursive && popd
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
path: godot-mono-builds
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v2.2.2
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
- name: Setup Emscripten SDK
|
||||
uses: mymindstorm/setup-emsdk@v9
|
||||
uses: mymindstorm/setup-emsdk@v11
|
||||
with:
|
||||
version: ${{ env.EMSDK_VERSION }}
|
||||
- name: Patch Mono
|
||||
@@ -691,7 +540,7 @@ jobs:
|
||||
mkdir -p $HOME/mono-installs-artifacts
|
||||
(cd $HOME/mono-installs && zip -ry $HOME/mono-installs-artifacts/wasm-${{ matrix.target }}.zip wasm-${{ matrix.target }}-release)
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: wasm-${{ matrix.target }}
|
||||
path: ~/mono-installs-artifacts/wasm-${{ matrix.target }}.zip
|
||||
@@ -699,7 +548,7 @@ jobs:
|
||||
run: pushd ${{ env.MONO_SOURCE_ROOT }} && git reset --hard && git clean -xffd && git submodule foreach --recursive git reset --hard && git submodule foreach --recursive git clean -xffd && git submodule update --init --recursive && popd
|
||||
- name: Upload config.log After Error
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: wasm-${{ matrix.target }}-config.log
|
||||
path: ~/mono-configs/wasm-${{ matrix.target }}-release/config.log
|
||||
@@ -709,22 +558,16 @@ jobs:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-16.04, ubuntu-latest, macos-latest]
|
||||
os: [ubuntu-latest, macos-latest]
|
||||
target: [llvm64, llvmwin64]
|
||||
exclude:
|
||||
# Ubuntu 16.04 is only needed for the Linux build
|
||||
- os: ubuntu-16.04
|
||||
target: llvmwin64
|
||||
# Ubuntu latest is only needed for the Windows build
|
||||
- os: ubuntu-latest
|
||||
target: llvm64
|
||||
# We already build for Windows on ubuntu-latest
|
||||
- os: macos-latest
|
||||
target: llvmwin64
|
||||
steps:
|
||||
- name: Cache LLVM
|
||||
id: cache_llvm
|
||||
uses: actions/cache@v2.1.5
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/mono-installs/llvm-${{ matrix.target }}
|
||||
key: ${{ runner.os }}-${{ env.MONO_TAG }}-llvm-${{ matrix.target }}
|
||||
@@ -735,7 +578,20 @@ jobs:
|
||||
if: steps.cache_llvm.outputs.cache-hit != 'true' && runner.os == 'Linux'
|
||||
run: |
|
||||
sudo apt-get -y update
|
||||
sudo apt-get -y install git autoconf libtool libtool-bin automake build-essential gettext cmake python3 curl
|
||||
sudo apt-get -y install git autoconf libtool libtool-bin automake gettext cmake python3 curl
|
||||
- name: Install Linux SDK (x86_64)
|
||||
if: steps.cache_llvm.outputs.cache-hit != 'true' && runner.os == 'Linux'
|
||||
run: |
|
||||
cd /home/runner
|
||||
curl -LO https://downloads.tuxfamily.org/godotengine/toolchains/linux/2021-02-11/x86_64-godot-linux-gnu_sdk-buildroot.tar.bz2
|
||||
tar xf x86_64-godot-linux-gnu_sdk-buildroot.tar.bz2
|
||||
rm -f x86_64-godot-linux-gnu_sdk-buildroot.tar.bz2
|
||||
cd x86_64-godot-linux-gnu_sdk-buildroot
|
||||
./relocate-sdk.sh
|
||||
cd bin
|
||||
rm -f {aclocal*,auto*,libtool*,m4}
|
||||
for file in x86_64-godot-*; do alias=$(echo $file | sed "s/godot-//"); ln -s $file $alias; done
|
||||
echo "PATH=/home/runner/x86_64-godot-linux-gnu_sdk-buildroot/bin:${PATH}" >> $GITHUB_ENV
|
||||
- name: Install Dependencies (Linux Targeting Windows)
|
||||
if: steps.cache_llvm.outputs.cache-hit != 'true' && runner.os == 'Linux' && matrix.target == 'llvmwin64'
|
||||
run: |
|
||||
@@ -747,13 +603,13 @@ jobs:
|
||||
- name: Cache Mono Sources
|
||||
if: steps.cache_llvm.outputs.cache-hit != 'true'
|
||||
id: cache_mono_sources
|
||||
uses: actions/cache@v2.1.5
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ${{ env.MONO_SOURCE_ROOT }}
|
||||
key: ${{ runner.os }}-${{ env.MONO_TAG }}-mono-sources
|
||||
- name: Checkout Mono Sources
|
||||
if: steps.cache_mono_sources.outputs.cache-hit != 'true' && steps.cache_llvm.outputs.cache-hit != 'true'
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: mono/mono
|
||||
ref: ${{ env.MONO_TAG }}
|
||||
@@ -764,12 +620,12 @@ jobs:
|
||||
run: pushd ${{ env.MONO_SOURCE_ROOT }} && git reset --hard && git clean -xffd && git submodule foreach --recursive git reset --hard && git submodule foreach --recursive git clean -xffd && git submodule update --init --recursive && popd
|
||||
- name: Checkout
|
||||
if: steps.cache_llvm.outputs.cache-hit != 'true'
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
path: godot-mono-builds
|
||||
- name: Setup Python
|
||||
if: steps.cache_llvm.outputs.cache-hit != 'true'
|
||||
uses: actions/setup-python@v2.2.2
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
- name: Patch Mono
|
||||
@@ -781,7 +637,7 @@ jobs:
|
||||
run:
|
||||
python3 godot-mono-builds/llvm.py make --target=${{ matrix.target }} -j 2
|
||||
- name: Upload LLVM Artifact
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: llvm-${{ matrix.target }}-${{ matrix.os }}
|
||||
path: ~/mono-installs/llvm-${{ matrix.target }}
|
||||
@@ -790,14 +646,14 @@ jobs:
|
||||
run: pushd ${{ env.MONO_SOURCE_ROOT }} && git reset --hard && git clean -xffd && git submodule foreach --recursive git reset --hard && git submodule foreach --recursive git clean -xffd && git submodule update --init --recursive && popd
|
||||
- name: Upload config.log After Error
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: llvm-${{ matrix.target }}-${{ matrix.os }}-config.log
|
||||
path: ~/mono-configs/llvm-${{ matrix.target }}/config.log
|
||||
|
||||
bcl:
|
||||
name: BCL
|
||||
runs-on: ubuntu-16.04
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
product: [desktop, desktop-win32, android, ios, wasm]
|
||||
@@ -808,16 +664,28 @@ jobs:
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
sudo apt-get -y update
|
||||
sudo apt-get -y install git autoconf libtool libtool-bin automake build-essential gettext cmake python3 curl
|
||||
sudo apt-get -y install git autoconf libtool libtool-bin automake gettext cmake python3 curl
|
||||
- name: Install Linux SDK (x86_64)
|
||||
run: |
|
||||
cd /home/runner
|
||||
curl -LO https://downloads.tuxfamily.org/godotengine/toolchains/linux/2021-02-11/x86_64-godot-linux-gnu_sdk-buildroot.tar.bz2
|
||||
tar xf x86_64-godot-linux-gnu_sdk-buildroot.tar.bz2
|
||||
rm -f x86_64-godot-linux-gnu_sdk-buildroot.tar.bz2
|
||||
cd x86_64-godot-linux-gnu_sdk-buildroot
|
||||
./relocate-sdk.sh
|
||||
cd bin
|
||||
rm -f {aclocal*,auto*,libtool*,m4}
|
||||
for file in x86_64-godot-*; do alias=$(echo $file | sed "s/godot-//"); ln -s $file $alias; done
|
||||
echo "PATH=/home/runner/x86_64-godot-linux-gnu_sdk-buildroot/bin:${PATH}" >> $GITHUB_ENV
|
||||
- name: Cache Mono Sources
|
||||
id: cache_mono_sources
|
||||
uses: actions/cache@v2.1.5
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ${{ env.MONO_SOURCE_ROOT }}
|
||||
key: ${{ runner.os }}-${{ env.MONO_TAG }}-mono-sources
|
||||
- name: Checkout Mono Sources
|
||||
if: steps.cache_mono_sources.outputs.cache-hit != 'true'
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: mono/mono
|
||||
ref: ${{ env.MONO_TAG }}
|
||||
@@ -826,11 +694,11 @@ jobs:
|
||||
- name: Clean Mono
|
||||
run: pushd ${{ env.MONO_SOURCE_ROOT }} && git reset --hard && git clean -xffd && git submodule foreach --recursive git reset --hard && git submodule foreach --recursive git clean -xffd && git submodule update --init --recursive && popd
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
path: godot-mono-builds
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v2.2.2
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
- name: Patch Mono
|
||||
@@ -848,7 +716,7 @@ jobs:
|
||||
mkdir -p $HOME/mono-installs-artifacts
|
||||
(cd $HOME/mono-installs && zip -ry $HOME/mono-installs-artifacts/bcl-${{ matrix.product }}.zip ${{ matrix.product }}-bcl)
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: bcl-${{ matrix.product }}
|
||||
path: ~/mono-installs-artifacts/bcl-${{ matrix.product }}.zip
|
||||
@@ -856,16 +724,16 @@ jobs:
|
||||
run: pushd ${{ env.MONO_SOURCE_ROOT }} && git reset --hard && git clean -xffd && git submodule foreach --recursive git reset --hard && git submodule foreach --recursive git clean -xffd && git submodule update --init --recursive && popd
|
||||
- name: Upload config.log After Error
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: bcl-${{ matrix.product }}-config.log
|
||||
path: ~/mono-configs/bcl/config.log
|
||||
|
||||
create-release:
|
||||
if: success() && github.event_name == 'create' && startsWith(github.ref, 'refs/heads/release/')
|
||||
needs: [linux, windows, osx, ios, ios-cross, android, android-cross, wasm, bcl]
|
||||
needs: [linux, windows, osx, ios, ios-cross, android, wasm, bcl]
|
||||
name: Create Release
|
||||
runs-on: ubuntu-16.04
|
||||
runs-on: ubuntu-18.04
|
||||
outputs:
|
||||
release_upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||
steps:
|
||||
@@ -884,8 +752,6 @@ jobs:
|
||||
Mono Version: ${{ env.MONO_TAG }}
|
||||
|
||||
EMSDK Version: ${{ env.EMSDK_VERSION }}
|
||||
Android Platform: ${{ env.ANDROID_PLATFORM }}
|
||||
Android API: ${{ env.ANDROID_API }}
|
||||
iOS Min Version: ${{ env.IOS_VERSION_MIN }}
|
||||
draft: false
|
||||
prerelease: false
|
||||
@@ -894,19 +760,17 @@ jobs:
|
||||
if: success() && github.event_name == 'create' && startsWith(github.ref, 'refs/heads/release/')
|
||||
needs: create-release
|
||||
name: Upload Release Artifacts
|
||||
runs-on: ubuntu-16.04
|
||||
runs-on: ubuntu-18.04
|
||||
strategy:
|
||||
matrix:
|
||||
artifact_name: [linux-x86, linux-x86_64, windows-x86, windows-x86_64, osx-x86_64,
|
||||
artifact_name: [linux-x86, linux-x86_64, windows-x86, windows-x86_64, osx-arm64, osx-x86_64,
|
||||
ios-arm64, ios-x86_64, ios-cross-arm64,
|
||||
android-armeabi-v7a, android-arm64-v8a, android-x86, android-x86_64,
|
||||
android-cross-arm, android-cross-arm64, android-cross-x86, android-cross-x86_64,
|
||||
android-cross-arm-win, android-cross-arm64-win, android-cross-x86-win, android-cross-x86_64-win,
|
||||
android-armv7, android-arm64v8, android-x86, android-x86_64,
|
||||
wasm-runtime, wasm-runtime-threads,
|
||||
bcl-desktop, bcl-desktop-win32, bcl-android, bcl-ios, bcl-wasm]
|
||||
steps:
|
||||
- name: Download Artifact
|
||||
uses: actions/download-artifact@v2
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: ${{ matrix.artifact_name }}
|
||||
path: ./
|
||||
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,2 +1,3 @@
|
||||
__pycache__/
|
||||
*.pyc
|
||||
.DS_Store
|
||||
|
||||
25
README.md
25
README.md
@@ -9,9 +9,9 @@ This repository contains scripts for building the Mono runtime to use with Godot
|
||||
The scripts are tested against specific versions of the toolchains used by Godot.
|
||||
While they may work with other versions, you might have issues applying patches or compiling, so we recommend using the versions below.
|
||||
|
||||
- Mono: 6.12.0.144.
|
||||
- Mono: 6.12.0.182.
|
||||
- Emscripten: 1.39.9.
|
||||
- Android: API level 29.
|
||||
- Android NDK: 23.2.8568313
|
||||
|
||||
## Command-line options
|
||||
|
||||
@@ -36,7 +36,7 @@ export MONO_SOURCE_ROOT=$HOME/git/mono
|
||||
|
||||
### Notes
|
||||
- Python 3.7 or higher is required.
|
||||
- OSXCROSS is supported expect for building the Mono cross-compilers.
|
||||
- OSXCROSS is supported except for building the Mono cross-compilers.
|
||||
- Building on Windows is not supported. It's possible to use Cygwin or WSL (Windows Subsystem for Linux) but this hasn't been tested.
|
||||
|
||||
## Compiling Godot for Desktop with this Runtime
|
||||
@@ -72,25 +72,18 @@ _AOT cross-compilers for desktop platforms cannot be built with these scripts ye
|
||||
|
||||
## Android
|
||||
|
||||
Building for Android requires the Android SDK cmdline-tools to be installed in the Android SDK folder.
|
||||
|
||||
```bash
|
||||
# These are the default values. This step can be omitted if SDK and NDK root are in this location.
|
||||
# The default location for the Android SDK is $HOME/Android/Sdk. This step can be omitted if SDK is in this location.
|
||||
export ANDROID_SDK_ROOT=$HOME/Android/Sdk
|
||||
export ANDROID_NDK_ROOT=$ANDROID_SDK_ROOT/ndk-bundle
|
||||
|
||||
# Build the runtime for all supported Android ABIs.
|
||||
./android.py configure --target=all-runtime
|
||||
./android.py make --target=all-runtime
|
||||
|
||||
# Build the AOT cross-compilers targeting all supported Android ABIs.
|
||||
./android.py configure --target=all-cross
|
||||
./android.py make --target=all-cross
|
||||
|
||||
# Build the AOT cross-compilers for Windows targeting all supported Android ABIs.
|
||||
./android.py configure --target=all-cross-win --mxe-prefix=/usr
|
||||
./android.py make --target=all-cross-win --mxe-prefix=/usr
|
||||
./android.py configure --target=all-targets
|
||||
./android.py make --target=all-targets
|
||||
```
|
||||
|
||||
The option `--target=all-runtime` is a shortcut for `--target=armeabi-v7a --target=x86 --target=arm64-v8a --target=x86_64`. The equivalent applies for `all-cross` and `all-cross-win`.
|
||||
The option `--target=all-targets` is a shortcut for `--target=armv7 --target=arm64v8 --target=x86 --target=x86_64`.
|
||||
|
||||
# iOS
|
||||
|
||||
|
||||
455
android.py
455
android.py
@@ -2,95 +2,71 @@
|
||||
|
||||
import os
|
||||
import os.path
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
from os.path import join as path_join
|
||||
|
||||
from options import *
|
||||
from os_utils import *
|
||||
import runtime
|
||||
|
||||
|
||||
runtime_targets = ['armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64']
|
||||
cross_targets = ['cross-arm', 'cross-arm64', 'cross-x86', 'cross-x86_64']
|
||||
cross_mxe_targets = ['cross-arm-win', 'cross-arm64-win', 'cross-x86-win', 'cross-x86_64-win']
|
||||
DEFAULT_NDK_VERSION = '23.2.8568313'
|
||||
DEFAULT_CMAKE_VERSION = '3.18.1'
|
||||
targets = ['armv7', 'arm64v8', 'x86', 'x86_64']
|
||||
|
||||
|
||||
def is_cross(target) -> bool:
|
||||
return target in cross_targets or is_cross_mxe(target)
|
||||
def get_min_api_version(target) -> str:
|
||||
# Minimum API version should be in sync with Godot's platform/android/detect.py.
|
||||
# Note: The minimum API version for arm64v8 and x86_64 is '21'
|
||||
min_versions = {
|
||||
'armv7': '19',
|
||||
'arm64v8': '21',
|
||||
'x86': '19',
|
||||
'x86_64': '21',
|
||||
}
|
||||
return min_versions[target]
|
||||
|
||||
|
||||
def is_cross_mxe(target) -> bool:
|
||||
return target in cross_mxe_targets
|
||||
def check_for_android_ndk(opts: AndroidOpts):
|
||||
if not os.path.exists(os.path.join(opts.android_sdk_root, 'ndk', opts.android_ndk_version)):
|
||||
print("Attempting to install Android NDK version %s" % (opts.android_ndk_version))
|
||||
sdkmanager = opts.android_sdk_root + "/cmdline-tools/latest/bin/sdkmanager"
|
||||
if os.path.exists(sdkmanager):
|
||||
sdk_args = "ndk;" + opts.android_ndk_version
|
||||
subprocess.check_call([sdkmanager, sdk_args])
|
||||
else:
|
||||
print("ERROR: Cannot find %s. Please ensure ANDROID_SDK_ROOT is correct and cmdline-tools are installed" % (sdkmanager))
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def android_autodetect_cmake(opts: AndroidOpts) -> str:
|
||||
from distutils.version import LooseVersion
|
||||
from os import listdir
|
||||
|
||||
sdk_cmake_basedir = path_join(opts.android_sdk_root, 'cmake')
|
||||
versions = []
|
||||
|
||||
for entry in listdir(sdk_cmake_basedir):
|
||||
if os.path.isdir(path_join(sdk_cmake_basedir, entry)):
|
||||
try:
|
||||
version = LooseVersion(entry)
|
||||
versions += [version]
|
||||
except ValueError:
|
||||
continue # Not a version folder
|
||||
|
||||
if len(versions) == 0:
|
||||
raise BuildError('Cannot auto-detect Android CMake version')
|
||||
|
||||
lattest_version = str(sorted(versions)[-1])
|
||||
print('Auto-detected Android CMake version: ' + lattest_version)
|
||||
|
||||
return lattest_version
|
||||
def check_for_cmake(opts: AndroidOpts):
|
||||
if not os.path.exists(os.path.join(opts.android_sdk_root, 'cmake', opts.android_cmake_version)):
|
||||
print("Attempting to install CMake version %s" % (opts.android_cmake_version))
|
||||
sdkmanager = opts.android_sdk_root + "/cmdline-tools/latest/bin/sdkmanager"
|
||||
if os.path.exists(sdkmanager):
|
||||
sdk_args = "cmake;" + opts.android_cmake_version
|
||||
subprocess.check_call([sdkmanager, sdk_args])
|
||||
else:
|
||||
print("ERROR: Cannot find %s. Please ensure ANDROID_SDK_ROOT is correct and cmdline-tools are installed" % (sdkmanager))
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def get_api_version_or_min(opts: AndroidOpts, target: str) -> str:
|
||||
min_versions = { 'arm64-v8a': '21', 'x86_64': '21' }
|
||||
if target in min_versions and int(opts.android_api_version) < int(min_versions[target]):
|
||||
print('WARNING: %s is less than minimum platform for %s; using %s' % (opts.android_api_version, target, min_versions[target]))
|
||||
return min_versions[target]
|
||||
min_api_version = get_min_api_version(target)
|
||||
if int(opts.android_api_version) < int(min_api_version):
|
||||
print('WARNING: API version %s is less than the minimum for platform %s; using %s' % (opts.android_api_version, target, min_api_version))
|
||||
return min_api_version
|
||||
return opts.android_api_version
|
||||
|
||||
|
||||
def get_android_cmake_version(opts: AndroidOpts) -> str:
|
||||
return opts.android_cmake_version if opts.android_cmake_version != 'autodetect' else android_autodetect_cmake(opts)
|
||||
|
||||
|
||||
class AndroidTargetTable:
|
||||
archs = {
|
||||
'armeabi-v7a': 'arm',
|
||||
'arm64-v8a': 'arm64',
|
||||
'x86': 'x86',
|
||||
'x86_64': 'x86_64'
|
||||
}
|
||||
|
||||
abi_names = {
|
||||
'armeabi-v7a': 'arm-linux-androideabi',
|
||||
'arm64-v8a': 'aarch64-linux-android',
|
||||
'x86': 'i686-linux-android',
|
||||
'x86_64': 'x86_64-linux-android'
|
||||
}
|
||||
|
||||
host_triples = {
|
||||
'armeabi-v7a': 'armv5-linux-androideabi',
|
||||
'arm64-v8a': 'aarch64-linux-android',
|
||||
'x86': 'i686-linux-android',
|
||||
'x86_64': 'x86_64-linux-android'
|
||||
}
|
||||
|
||||
|
||||
def setup_android_target_template(env: dict, opts: AndroidOpts, target: str):
|
||||
extra_target_envs = {
|
||||
'armeabi-v7a': {
|
||||
'armv7': {
|
||||
'android-armeabi-v7a_CFLAGS': ['-D__POSIX_VISIBLE=201002', '-DSK_RELEASE', '-DNDEBUG', '-UDEBUG', '-fpic', '-march=armv7-a', '-mtune=cortex-a8', '-mfpu=vfp', '-mfloat-abi=softfp'],
|
||||
'android-armeabi-v7a_CXXFLAGS': ['-D__POSIX_VISIBLE=201002', '-DSK_RELEASE', '-DNDEBUG', '-UDEBUG', '-fpic', '-march=armv7-a', '-mtune=cortex-a8', '-mfpu=vfp', '-mfloat-abi=softfp'],
|
||||
'android-armeabi-v7a_LDFLAGS': ['-Wl,--fix-cortex-a8']
|
||||
},
|
||||
'arm64-v8a': {
|
||||
'arm64v8': {
|
||||
'android-arm64-v8a_CFLAGS': ['-D__POSIX_VISIBLE=201002', '-DSK_RELEASE', '-DNDEBUG', '-UDEBUG', '-fpic', '-DL_cuserid=9', '-DANDROID64'],
|
||||
'android-arm64-v8a_CXXFLAGS': ['-D__POSIX_VISIBLE=201002', '-DSK_RELEASE', '-DNDEBUG', '-UDEBUG', '-fpic', '-DL_cuserid=9', '-DANDROID64']
|
||||
},
|
||||
@@ -100,55 +76,51 @@ def setup_android_target_template(env: dict, opts: AndroidOpts, target: str):
|
||||
'android-x86_64_CXXFLAGS': ['-DL_cuserid=9']
|
||||
}
|
||||
}
|
||||
env.update(extra_target_envs[target])
|
||||
|
||||
if target in extra_target_envs:
|
||||
env.update(extra_target_envs[target])
|
||||
if target == "armv7":
|
||||
target_triple = "armv7a-linux-androideabi"
|
||||
bin_utils = "arm-linux-androideabi"
|
||||
elif target == "arm64v8":
|
||||
target_triple = "aarch64-linux-android"
|
||||
bin_utils = target_triple
|
||||
elif target == "x86":
|
||||
target_triple = "i686-linux-android"
|
||||
bin_utils = target_triple
|
||||
elif target == "x86_64":
|
||||
target_triple = "x86_64-linux-android"
|
||||
bin_utils = target_triple
|
||||
|
||||
android_new_ndk = True
|
||||
if sys.platform.startswith("linux"):
|
||||
host_subpath = "linux-x86_64"
|
||||
elif sys.platform.startswith("darwin"):
|
||||
host_subpath = "darwin-x86_64"
|
||||
elif sys.platform.startswith("win"):
|
||||
if platform.machine().endswith("64"):
|
||||
host_subpath = "windows-x86_64"
|
||||
else:
|
||||
host_subpath = "windows"
|
||||
|
||||
with open(path_join(opts.android_ndk_root, 'source.properties')) as file:
|
||||
for line in file:
|
||||
line = line.strip()
|
||||
if line.startswith('Pkg.Revision ') or line.startswith('Pkg.Revision='):
|
||||
pkg_revision = line.split('=')[1].strip()
|
||||
mayor = int(pkg_revision.split('.')[0])
|
||||
android_new_ndk = mayor >= 18
|
||||
break
|
||||
cmake_path = os.path.join(opts.android_sdk_root, 'cmake', opts.android_cmake_version, 'bin')
|
||||
ndk_path = os.path.join(opts.android_sdk_root, 'ndk', opts.android_ndk_version)
|
||||
toolchain_path = os.path.join(ndk_path, 'toolchains/llvm/prebuilt', host_subpath)
|
||||
compiler_path = os.path.join(toolchain_path, 'bin')
|
||||
compiler_wrapper = target_triple + env['ANDROID_API_VERSION'] + '-'
|
||||
bin_utils_path = os.path.join(toolchain_path, bin_utils, 'bin')
|
||||
android_api = env['ANDROID_API_VERSION']
|
||||
|
||||
arch = AndroidTargetTable.archs[target]
|
||||
abi_name = AndroidTargetTable.abi_names[target]
|
||||
host_triple = AndroidTargetTable.host_triples[target]
|
||||
api = env['ANDROID_API_VERSION']
|
||||
|
||||
toolchain_path = path_join(opts.android_toolchains_prefix, opts.toolchain_name_fmt % (target, api))
|
||||
|
||||
tools_path = path_join(toolchain_path, 'bin')
|
||||
name_fmt = abi_name + '-%s'
|
||||
|
||||
sdk_cmake_dir = path_join(opts.android_sdk_root, 'cmake', get_android_cmake_version(opts))
|
||||
if not os.path.isdir(sdk_cmake_dir):
|
||||
print('Android CMake directory \'%s\' not found' % sdk_cmake_dir)
|
||||
|
||||
AR = path_join(tools_path, name_fmt % 'ar')
|
||||
AS = path_join(tools_path, name_fmt % 'as')
|
||||
CC = path_join(tools_path, name_fmt % 'clang')
|
||||
CXX = path_join(tools_path, name_fmt % 'clang++')
|
||||
AR = os.path.join(compiler_path, 'llvm-ar')
|
||||
AS = os.path.join(bin_utils_path, 'as')
|
||||
CC = os.path.join(compiler_path, compiler_wrapper + 'clang')
|
||||
CXX = os.path.join(compiler_path, compiler_wrapper + 'clang++')
|
||||
LD = os.path.join(compiler_path, 'ld')
|
||||
DLLTOOL = ''
|
||||
LD = path_join(tools_path, name_fmt % 'ld')
|
||||
OBJDUMP = path_join(tools_path, name_fmt % 'objdump')
|
||||
RANLIB = path_join(tools_path, name_fmt % 'ranlib')
|
||||
CMAKE = path_join(sdk_cmake_dir, 'bin', 'cmake')
|
||||
STRIP = path_join(tools_path, name_fmt % 'strip')
|
||||
|
||||
CPP = path_join(tools_path, name_fmt % 'cpp')
|
||||
if not os.path.isfile(CPP):
|
||||
CPP = path_join(tools_path, (name_fmt % 'clang'))
|
||||
CPP += ' -E'
|
||||
|
||||
CXXCPP = path_join(tools_path, name_fmt % 'cpp')
|
||||
if not os.path.isfile(CXXCPP):
|
||||
CXXCPP = path_join(tools_path, (name_fmt % 'clang++'))
|
||||
CXXCPP += ' -E'
|
||||
OBJDUMP = os.path.join(compiler_path, 'llvm-objdump')
|
||||
RANLIB = os.path.join(compiler_path, 'llvm-ranlib')
|
||||
CMAKE = os.path.join(cmake_path, 'cmake')
|
||||
STRIP = os.path.join(compiler_path, 'llvm-strip')
|
||||
CPP = CC + ' -E'
|
||||
CXXCPP = CXX + ' -E'
|
||||
|
||||
ccache_path = os.environ.get('CCACHE', '')
|
||||
if ccache_path:
|
||||
@@ -176,25 +148,18 @@ def setup_android_target_template(env: dict, opts: AndroidOpts, target: str):
|
||||
CFLAGS += [
|
||||
'-fstack-protector',
|
||||
'-DMONODROID=1'
|
||||
'-D__ANDROID_API__=' + android_api
|
||||
]
|
||||
CFLAGS += ['-D__ANDROID_API__=' + api] if android_new_ndk else []
|
||||
|
||||
CXXFLAGS += [
|
||||
'-fstack-protector',
|
||||
'-DMONODROID=1'
|
||||
'-D__ANDROID_API__=' + android_api,
|
||||
]
|
||||
CXXFLAGS += ['-D__ANDROID_API__=' + api] if android_new_ndk else []
|
||||
|
||||
CPPFLAGS += ['-I%s/sysroot/usr/include' % toolchain_path]
|
||||
CXXCPPFLAGS += ['-I%s/sysroot/usr/include' % toolchain_path]
|
||||
|
||||
path_link = '%s/platforms/android-%s/arch-%s/usr/lib' % (opts.android_ndk_root, api, arch)
|
||||
|
||||
LDFLAGS += [
|
||||
'-z', 'now', '-z', 'relro', '-z', 'noexecstack',
|
||||
'-ldl', '-lm', '-llog', '-lc', '-lgcc',
|
||||
'-Wl,-rpath-link=%s,-dynamic-linker=/system/bin/linker' % path_link,
|
||||
'-L' + path_link
|
||||
'-ldl', '-lm', '-llog', '-lc'
|
||||
]
|
||||
|
||||
# Fixes this error: DllImport unable to load library 'dlopen failed: empty/missing DT_HASH in "libmono-native.so" (built with --hash-style=gnu?)'.
|
||||
@@ -211,15 +176,15 @@ def setup_android_target_template(env: dict, opts: AndroidOpts, target: str):
|
||||
'--enable-minimal=ssa,portability,attach,verifier,full_messages,sgen_remset'
|
||||
',sgen_marksweep_par,sgen_marksweep_fixed,sgen_marksweep_fixed_par'
|
||||
',sgen_copying,logging,security,shared_handles,interpreter',
|
||||
'--with-btls-android-ndk=%s' % opts.android_ndk_root,
|
||||
'--with-btls-android-api=%s' % api,
|
||||
'--with-btls-android-ndk=%s' % ndk_path,
|
||||
'--with-btls-android-api=%s' % android_api,
|
||||
]
|
||||
|
||||
CONFIGURE_FLAGS += ['--enable-monodroid']
|
||||
CONFIGURE_FLAGS += ['--with-btls-android-ndk-asm-workaround'] if android_new_ndk else []
|
||||
CONFIGURE_FLAGS += ['--with-btls-android-ndk-asm-workaround']
|
||||
|
||||
CONFIGURE_FLAGS += [
|
||||
'--with-btls-android-cmake-toolchain=%s/build/cmake/android.toolchain.cmake' % opts.android_ndk_root,
|
||||
'--with-btls-android-cmake-toolchain=%s/build/cmake/android.toolchain.cmake' % ndk_path,
|
||||
'--with-sigaltstack=yes',
|
||||
'--with-tls=pthread',
|
||||
'--without-ikvm-native',
|
||||
@@ -250,186 +215,16 @@ def setup_android_target_template(env: dict, opts: AndroidOpts, target: str):
|
||||
env['_android-%s_CONFIGURE_FLAGS' % target] = CONFIGURE_FLAGS
|
||||
|
||||
# Runtime template
|
||||
runtime.setup_runtime_template(env, opts, 'android', target, host_triple)
|
||||
runtime.setup_runtime_template(env, opts, 'android', target, target_triple)
|
||||
|
||||
|
||||
class AndroidCrossTable:
|
||||
target_archs = {
|
||||
'cross-arm': 'armv7',
|
||||
'cross-arm64': 'aarch64-v8a',
|
||||
'cross-x86': 'i686',
|
||||
'cross-x86_64': 'x86_64'
|
||||
}
|
||||
def strip_libs(opts: AndroidOpts, product: str, target: str):
|
||||
ndk_path = os.path.join(opts.android_sdk_root, 'ndk', opts.android_ndk_version)
|
||||
toolchain_path = os.path.join(ndk_path, 'toolchains/llvm/prebuilt/linux-x86_64')
|
||||
strip = os.path.join(toolchain_path, 'bin', 'llvm-strip')
|
||||
|
||||
device_targets = {
|
||||
'cross-arm': 'armeabi-v7a',
|
||||
'cross-arm64': 'arm64-v8a',
|
||||
'cross-x86': 'x86',
|
||||
'cross-x86_64': 'x86_64'
|
||||
}
|
||||
|
||||
offsets_dumper_abis = {
|
||||
'cross-arm': 'armv7-none-linux-androideabi',
|
||||
'cross-arm64': 'aarch64-v8a-linux-android',
|
||||
'cross-x86': 'i686-none-linux-android',
|
||||
'cross-x86_64': 'x86_64-none-linux-android'
|
||||
}
|
||||
|
||||
|
||||
def get_android_libclang_path(opts):
|
||||
if sys.platform == 'darwin':
|
||||
return '%s/toolchains/llvm/prebuilt/darwin-x86_64/lib64/libclang.dylib' % opts.android_ndk_root
|
||||
elif sys.platform in ['linux', 'linux2']:
|
||||
loc = '%s/toolchains/llvm/prebuilt/linux-x86_64/lib64/libclang.so.9svn' % opts.android_ndk_root
|
||||
if os.path.isfile(loc):
|
||||
return loc
|
||||
return '%s/toolchains/llvm/prebuilt/linux-x86_64/lib64/libclang.so.8svn' % opts.android_ndk_root
|
||||
assert False
|
||||
|
||||
|
||||
def setup_android_cross_template(env: dict, opts: AndroidOpts, target: str, host_arch: str):
|
||||
def get_host_triple():
|
||||
if sys.platform == 'darwin':
|
||||
return '%s-apple-darwin11' % host_arch
|
||||
elif sys.platform in ['linux', 'linux2']:
|
||||
return '%s-linux-gnu' % host_arch
|
||||
assert False
|
||||
|
||||
target_arch = AndroidCrossTable.target_archs[target]
|
||||
device_target = AndroidCrossTable.device_targets[target]
|
||||
offsets_dumper_abi = AndroidCrossTable.offsets_dumper_abis[target]
|
||||
host_triple = get_host_triple()
|
||||
target_triple = '%s-linux-android' % target_arch
|
||||
|
||||
android_libclang = get_android_libclang_path(opts)
|
||||
|
||||
env['_android-%s_OFFSETS_DUMPER_ARGS' % target] = [
|
||||
'--libclang=%s' % android_libclang,
|
||||
'--sysroot=%s/sysroot' % opts.android_ndk_root
|
||||
]
|
||||
|
||||
env['_android-%s_AR' % target] = 'ar'
|
||||
env['_android-%s_AS' % target] = 'as'
|
||||
env['_android-%s_CC' % target] = 'cc'
|
||||
env['_android-%s_CXX' % target] = 'c++'
|
||||
env['_android-%s_CXXCPP' % target] = 'cpp'
|
||||
env['_android-%s_LD' % target] = 'ld'
|
||||
env['_android-%s_RANLIB' % target] = 'ranlib'
|
||||
env['_android-%s_STRIP' % target] = 'strip'
|
||||
|
||||
is_darwin = sys.platform == 'darwin'
|
||||
|
||||
CFLAGS = []
|
||||
CFLAGS += ['-DDEBUG_CROSS'] if not opts.release else []
|
||||
CFLAGS += ['-mmacosx-version-min=10.9'] if is_darwin else []
|
||||
|
||||
env['_android-%s_CFLAGS' % target] = CFLAGS
|
||||
|
||||
CXXFLAGS = []
|
||||
CXXFLAGS += ['-DDEBUG_CROSS'] if not opts.release else []
|
||||
CXXFLAGS += ['-mmacosx-version-min=10.9', '-stdlib=libc++'] if is_darwin else []
|
||||
|
||||
env['_android-%s_CXXFLAGS' % target] = CXXFLAGS
|
||||
|
||||
env['_android-%s_CONFIGURE_FLAGS' % target] = [
|
||||
'--disable-boehm',
|
||||
'--disable-mcs-build',
|
||||
'--disable-nls',
|
||||
'--enable-maintainer-mode',
|
||||
'--with-tls=pthread'
|
||||
]
|
||||
|
||||
# Runtime cross template
|
||||
runtime.setup_runtime_cross_template(env, opts, 'android', target, host_triple, target_triple, device_target, 'llvm64', offsets_dumper_abi)
|
||||
|
||||
|
||||
def setup_android_cross_mxe_template(env: dict, opts: AndroidOpts, target: str, host_arch: str):
|
||||
table_target = cross_targets[cross_mxe_targets.index(target)] # Re-use the non-mxe table
|
||||
|
||||
target_arch = AndroidCrossTable.target_archs[table_target]
|
||||
device_target = AndroidCrossTable.device_targets[table_target]
|
||||
offsets_dumper_abi = AndroidCrossTable.offsets_dumper_abis[table_target]
|
||||
host_triple = '%s-w64-mingw32' % host_arch
|
||||
target_triple = '%s-linux-android' % target_arch
|
||||
|
||||
android_libclang = get_android_libclang_path(opts)
|
||||
|
||||
env['_android-%s_OFFSETS_DUMPER_ARGS' % target] = [
|
||||
'--libclang=%s' % android_libclang,
|
||||
'--sysroot=%s/sysroot' % opts.android_ndk_root
|
||||
]
|
||||
|
||||
mxe_bin = path_join(opts.mxe_prefix, 'bin')
|
||||
|
||||
env['_android-%s_PATH' % target] = mxe_bin
|
||||
|
||||
name_fmt = host_arch + '-w64-mingw32-%s'
|
||||
|
||||
env['_android-%s_AR' % target] = path_join(mxe_bin, name_fmt % 'ar')
|
||||
env['_android-%s_AS' % target] = path_join(mxe_bin, name_fmt % 'as')
|
||||
env['_android-%s_CC' % target] = path_join(mxe_bin, name_fmt % 'gcc')
|
||||
env['_android-%s_CXX' % target] = path_join(mxe_bin, name_fmt % 'g++')
|
||||
env['_android-%s_DLLTOOL' % target] = path_join(mxe_bin, name_fmt % 'dlltool')
|
||||
env['_android-%s_LD' % target] = path_join(mxe_bin, name_fmt % 'ld')
|
||||
env['_android-%s_OBJDUMP' % target] = path_join(mxe_bin, name_fmt % 'objdump')
|
||||
env['_android-%s_RANLIB' % target] = path_join(mxe_bin, name_fmt % 'ranlib')
|
||||
env['_android-%s_STRIP' % target] = path_join(mxe_bin, name_fmt % 'strip')
|
||||
|
||||
mingw_zlib_prefix = '%s/opt/mingw-zlib/usr' % opts.mxe_prefix
|
||||
if not os.path.isdir(mingw_zlib_prefix):
|
||||
mingw_zlib_prefix = opts.mxe_prefix
|
||||
|
||||
CFLAGS = []
|
||||
CFLAGS += ['-DDEBUG_CROSS'] if not opts.release else []
|
||||
CFLAGS += ['-I%s/%s-w64-mingw32/include' % (mingw_zlib_prefix, host_arch)]
|
||||
|
||||
env['_android-%s_CFLAGS' % target] = CFLAGS
|
||||
|
||||
CXXFLAGS = []
|
||||
CXXFLAGS += ['-DDEBUG_CROSS'] if not opts.release else []
|
||||
CXXFLAGS += ['-I%s/%s-w64-mingw32/include' % (mingw_zlib_prefix, host_arch)]
|
||||
|
||||
env['_android-%s_CXXFLAGS' % target] = CXXFLAGS
|
||||
|
||||
env['_android-%s_LDFLAGS' % target] = []
|
||||
|
||||
CONFIGURE_FLAGS = [
|
||||
'--disable-boehm',
|
||||
'--disable-mcs-build',
|
||||
'--disable-nls',
|
||||
'--enable-static-gcc-libs',
|
||||
'--enable-maintainer-mode',
|
||||
'--with-tls=pthread'
|
||||
]
|
||||
|
||||
CONFIGURE_FLAGS += ['--with-static-zlib=%s/%s-w64-mingw32/lib/libz.a' % (mingw_zlib_prefix, host_arch)]
|
||||
|
||||
env['_android-%s_CONFIGURE_FLAGS' % target] = CONFIGURE_FLAGS
|
||||
|
||||
# Runtime cross template
|
||||
runtime.setup_runtime_cross_template(env, opts, 'android', target, host_triple, target_triple, device_target, 'llvmwin64', offsets_dumper_abi)
|
||||
|
||||
|
||||
def make_standalone_toolchain(opts: AndroidOpts, target: str, api: str):
|
||||
install_dir = path_join(opts.android_toolchains_prefix, opts.toolchain_name_fmt % (target, api))
|
||||
if os.path.isdir(path_join(install_dir, 'bin')):
|
||||
return # Looks like it's already there, so no need to re-create it
|
||||
command = path_join(opts.android_ndk_root, 'build', 'tools', 'make_standalone_toolchain.py')
|
||||
args = [command, '--verbose', '--force', '--api=' + api, '--arch=' + AndroidTargetTable.archs[target],
|
||||
'--install-dir=' + install_dir]
|
||||
run_command('python3', args=args, name='make_standalone_toolchain')
|
||||
|
||||
|
||||
def strip_libs(opts: AndroidOpts, product: str, target: str, api: str):
|
||||
toolchain_path = path_join(opts.android_toolchains_prefix, opts.toolchain_name_fmt % (target, api))
|
||||
|
||||
tools_path = path_join(toolchain_path, 'bin')
|
||||
name_fmt = AndroidTargetTable.abi_names[target] + '-%s'
|
||||
|
||||
strip = path_join(tools_path, name_fmt % 'strip')
|
||||
|
||||
install_dir = path_join(opts.install_dir, '%s-%s-%s' % (product, target, opts.configuration))
|
||||
out_libs_dir = path_join(install_dir, 'lib')
|
||||
install_dir = os.path.join(opts.install_dir, '%s-%s-%s' % (product, target, opts.configuration))
|
||||
out_libs_dir = os.path.join(install_dir, 'lib')
|
||||
|
||||
lib_files = globs(('*.a', '*.so'), dirpath=out_libs_dir)
|
||||
if len(lib_files):
|
||||
@@ -439,20 +234,9 @@ def strip_libs(opts: AndroidOpts, product: str, target: str, api: str):
|
||||
def configure(opts: AndroidOpts, product: str, target: str):
|
||||
env = { 'ANDROID_API_VERSION': get_api_version_or_min(opts, target) }
|
||||
|
||||
if is_cross(target):
|
||||
import llvm
|
||||
setup_android_target_template(env, opts, target)
|
||||
|
||||
if is_cross_mxe(target):
|
||||
llvm.make(opts, 'llvmwin64')
|
||||
setup_android_cross_mxe_template(env, opts, target, host_arch='x86_64')
|
||||
else:
|
||||
llvm.make(opts, 'llvm64')
|
||||
setup_android_cross_template(env, opts, target, host_arch='x86_64')
|
||||
else:
|
||||
make_standalone_toolchain(opts, target, env['ANDROID_API_VERSION'])
|
||||
setup_android_target_template(env, opts, target)
|
||||
|
||||
if not os.path.isfile(path_join(opts.mono_source_root, 'configure')):
|
||||
if not os.path.isfile(os.path.join(opts.mono_source_root, 'configure')):
|
||||
runtime.run_autogen(opts)
|
||||
|
||||
runtime.run_configure(env, opts, product, target)
|
||||
@@ -461,7 +245,7 @@ def configure(opts: AndroidOpts, product: str, target: str):
|
||||
def make(opts: AndroidOpts, product: str, target: str):
|
||||
env = { 'ANDROID_API_VERSION': get_api_version_or_min(opts, target) }
|
||||
|
||||
build_dir = path_join(opts.configure_dir, '%s-%s-%s' % (product, target, opts.configuration))
|
||||
build_dir = os.path.join(opts.configure_dir, '%s-%s-%s' % (product, target, opts.configuration))
|
||||
|
||||
make_args = make_default_args(opts)
|
||||
make_args += ['-C', build_dir]
|
||||
@@ -471,15 +255,15 @@ def make(opts: AndroidOpts, product: str, target: str):
|
||||
run_command('make', args=['-C', '%s/support' % build_dir, 'install'], name='make install support')
|
||||
run_command('make', args=['-C', '%s/data' % build_dir, 'install'], name='make install data')
|
||||
|
||||
if opts.strip_libs and not is_cross(target):
|
||||
strip_libs(opts, product, target, env['ANDROID_API_VERSION'])
|
||||
if opts.strip_libs:
|
||||
strip_libs(opts, product, target)
|
||||
|
||||
|
||||
def clean(opts: AndroidOpts, product: str, target: str):
|
||||
rm_rf(
|
||||
path_join(opts.configure_dir, '%s-%s-%s' % (product, target, opts.configuration)),
|
||||
path_join(opts.configure_dir, '%s-%s-%s.config.cache' % (product, target, opts.configuration)),
|
||||
path_join(opts.install_dir, '%s-%s-%s' % (product, target, opts.configuration))
|
||||
os.path.join(opts.configure_dir, '%s-%s-%s' % (product, target, opts.configuration)),
|
||||
os.path.join(opts.configure_dir, '%s-%s-%s.config.cache' % (product, target, opts.configuration)),
|
||||
os.path.join(opts.install_dir, '%s-%s-%s' % (product, target, opts.configuration))
|
||||
)
|
||||
|
||||
|
||||
@@ -489,13 +273,7 @@ def main(raw_args):
|
||||
from collections import OrderedDict
|
||||
from typing import Callable
|
||||
|
||||
target_shortcuts = {
|
||||
'all-runtime': runtime_targets,
|
||||
'all-cross': cross_targets,
|
||||
'all-cross-win': cross_mxe_targets
|
||||
}
|
||||
|
||||
target_values = runtime_targets + cross_targets + cross_mxe_targets + list(target_shortcuts)
|
||||
target_choices = targets + ['all-targets']
|
||||
|
||||
actions = OrderedDict()
|
||||
actions['configure'] = configure
|
||||
@@ -504,28 +282,20 @@ def main(raw_args):
|
||||
|
||||
parser = cmd_utils.build_arg_parser(
|
||||
description='Builds the Mono runtime for Android',
|
||||
env_vars={
|
||||
'ANDROID_SDK_ROOT': 'Overrides default value for --android-sdk',
|
||||
'ANDROID_NDK_ROOT': 'Overrides default value for --android-ndk',
|
||||
'ANDROID_HOME': 'Same as ANDROID_SDK_ROOT'
|
||||
}
|
||||
env_vars={ 'ANDROID_SDK_ROOT': 'Overrides default value for --android-sdk' }
|
||||
)
|
||||
|
||||
home = os.environ.get('HOME')
|
||||
android_sdk_default = os.environ.get('ANDROID_HOME', os.environ.get('ANDROID_SDK_ROOT', path_join(home, 'Android/Sdk')))
|
||||
android_ndk_default = os.environ.get('ANDROID_NDK_ROOT', path_join(android_sdk_default, 'ndk-bundle'))
|
||||
android_sdk_default = os.environ.get('ANDROID_SDK_ROOT', os.path.join(home, 'Android/Sdk'))
|
||||
|
||||
default_help = 'default: %(default)s'
|
||||
|
||||
parser.add_argument('action', choices=['configure', 'make', 'clean'])
|
||||
parser.add_argument('--target', choices=target_values, action='append', required=True)
|
||||
parser.add_argument('--toolchains-prefix', default=path_join(home, 'android-toolchains'), help=default_help)
|
||||
parser.add_argument('--target', choices=target_choices, action='append', required=True)
|
||||
parser.add_argument('--android-sdk', default=android_sdk_default, help=default_help)
|
||||
parser.add_argument('--android-ndk', default=android_ndk_default, help=default_help)
|
||||
# Default API version should be in sync with Godot's platform/android/detect.py.
|
||||
# Note that `get_api_version_or_min` will upgrade it to 21 for arm64v8 and x86_64.
|
||||
parser.add_argument('--android-api-version', default='18', help=default_help)
|
||||
parser.add_argument('--android-cmake-version', default='autodetect', help=default_help)
|
||||
parser.add_argument('--android-ndk-version', default=DEFAULT_NDK_VERSION, help=default_help)
|
||||
parser.add_argument('--android-api-version', default=get_min_api_version(targets[0]), help=default_help)
|
||||
parser.add_argument('--android-cmake-version', default=DEFAULT_CMAKE_VERSION, help=default_help)
|
||||
|
||||
cmd_utils.add_runtime_arguments(parser, default_help)
|
||||
|
||||
@@ -540,11 +310,14 @@ def main(raw_args):
|
||||
print('Mono sources directory not found: ' + opts.mono_source_root)
|
||||
sys.exit(1)
|
||||
|
||||
targets = cmd_utils.expand_input_targets(input_targets, target_shortcuts)
|
||||
check_for_android_ndk(opts)
|
||||
check_for_cmake(opts)
|
||||
|
||||
build_targets = cmd_utils.expand_input_targets(input_targets, { 'all-targets': targets })
|
||||
action = actions[input_action]
|
||||
|
||||
try:
|
||||
for target in targets:
|
||||
for target in build_targets:
|
||||
action(opts, 'android', target)
|
||||
except BuildError as e:
|
||||
sys.exit(e.message)
|
||||
|
||||
38
bcl.py
38
bcl.py
@@ -40,7 +40,7 @@ def get_profile_install_dirs(opts: BaseOpts, product: str):
|
||||
profiles = profiles_table[product]
|
||||
return [path_join(install_dir, get_profile_dir(profile, product)) for profile in profiles]
|
||||
|
||||
def configure_bcl(opts: BclOpts):
|
||||
def configure_bcl(opts: BclOpts, product: str):
|
||||
stamp_file = path_join(opts.configure_dir, '.stamp-bcl-configure')
|
||||
|
||||
if os.path.isfile(stamp_file):
|
||||
@@ -54,12 +54,21 @@ def configure_bcl(opts: BclOpts):
|
||||
|
||||
CONFIGURE_FLAGS = [
|
||||
'--disable-boehm',
|
||||
'--disable-btls-lib',
|
||||
'--disable-nls',
|
||||
'--disable-support-build',
|
||||
'--with-mcs-docs=no'
|
||||
]
|
||||
|
||||
if product == 'desktop-win32':
|
||||
CONFIGURE_FLAGS += [
|
||||
'--enable-btls',
|
||||
'--enable-btls-lib'
|
||||
]
|
||||
else:
|
||||
CONFIGURE_FLAGS += [
|
||||
'--disable-btls-lib'
|
||||
]
|
||||
|
||||
configure = path_join(opts.mono_source_root, 'configure')
|
||||
configure_args = CONFIGURE_FLAGS
|
||||
|
||||
@@ -84,8 +93,8 @@ def make_bcl(opts: BclOpts):
|
||||
touch(stamp_file)
|
||||
|
||||
|
||||
def build_bcl(opts: BclOpts):
|
||||
configure_bcl(opts)
|
||||
def build_bcl(opts: BclOpts, product: str):
|
||||
configure_bcl(opts, product)
|
||||
make_bcl(opts)
|
||||
|
||||
|
||||
@@ -97,7 +106,7 @@ def clean_bcl(opts: BclOpts):
|
||||
|
||||
|
||||
def make_product(opts: BclOpts, product: str):
|
||||
build_bcl(opts)
|
||||
build_bcl(opts, product)
|
||||
|
||||
build_dir = path_join(opts.configure_dir, 'bcl')
|
||||
|
||||
@@ -178,6 +187,25 @@ def make_product(opts: BclOpts, product: str):
|
||||
|
||||
run_command('csc', android_env_csc_args)
|
||||
|
||||
# (custom 'Xamarin.iOS.dll')
|
||||
if product == 'ios':
|
||||
this_script_dir = os.path.dirname(os.path.realpath(__file__))
|
||||
monotouch_profile_dir = '%s/%s' % (install_dir, 'monotouch')
|
||||
refs = ['mscorlib.dll', 'System.Net.Http.dll']
|
||||
|
||||
mkdir_p(monotouch_profile_dir)
|
||||
|
||||
android_env_csc_args = [
|
||||
path_join(this_script_dir, 'files', 'xi.cs'),
|
||||
'-keyfile:' + path_join(this_script_dir, 'files', 'xi.snk'),
|
||||
'-out:%s' % path_join(monotouch_profile_dir, 'Xamarin.iOS.dll'),
|
||||
'-optimize', '-deterministic', '-publicsign', '-target:library',
|
||||
'-nostdlib', '-noconfig', '-langversion:latest'
|
||||
]
|
||||
android_env_csc_args += ['-r:%s' % path_join(monotouch_profile_dir, r) for r in refs]
|
||||
|
||||
run_command('csc', android_env_csc_args)
|
||||
|
||||
|
||||
def clean_product(opts: BclOpts, product: str):
|
||||
clean_bcl(opts)
|
||||
|
||||
52
desktop.py
52
desktop.py
@@ -15,7 +15,7 @@ import runtime
|
||||
targets = {
|
||||
'linux': ['x86', 'x86_64'],
|
||||
'windows': ['x86', 'x86_64'],
|
||||
'osx': ['x86_64']
|
||||
'osx': ['arm64', 'x86_64']
|
||||
}
|
||||
|
||||
target_arch = {
|
||||
@@ -28,14 +28,24 @@ target_arch = {
|
||||
'x86_64': 'x86_64'
|
||||
},
|
||||
'osx': {
|
||||
'arm64': 'arm64',
|
||||
'x86_64': 'x86_64'
|
||||
}
|
||||
}
|
||||
|
||||
host_triples = {
|
||||
'linux': '%s-linux-gnu',
|
||||
'windows': '%s-w64-mingw32',
|
||||
'osx': '%s-apple-darwin',
|
||||
'linux': {
|
||||
'x86': 'i686-linux-gnu',
|
||||
'x86_64': 'x86_64-linux-gnu'
|
||||
},
|
||||
'windows': {
|
||||
'x86': 'i686-w64-mingw32',
|
||||
'x86_64': 'x86_64-w64-mingw32'
|
||||
},
|
||||
'osx': {
|
||||
'arm64': 'aarch64-apple-darwin20',
|
||||
'x86_64': 'x86_64-apple-darwin'
|
||||
}
|
||||
}
|
||||
|
||||
llvm_table = {
|
||||
@@ -70,25 +80,26 @@ def get_osxcross_sdk(osxcross_bin, arch):
|
||||
|
||||
|
||||
def setup_desktop_template(env: dict, opts: DesktopOpts, product: str, target_platform: str, target: str):
|
||||
host_triple = host_triples[target_platform] % target_arch[target_platform][target]
|
||||
host_triple = host_triples[target_platform][target]
|
||||
|
||||
CONFIGURE_FLAGS = [
|
||||
'--disable-boehm',
|
||||
'--disable-mcs-build',
|
||||
'--enable-maintainer-mode',
|
||||
'--with-tls=pthread',
|
||||
'--without-ikvm-native'
|
||||
'--without-ikvm-native',
|
||||
'--enable-btls',
|
||||
]
|
||||
|
||||
if target_platform == 'windows':
|
||||
CONFIGURE_FLAGS += [
|
||||
'--with-libgdiplus=%s' % opts.mxe_prefix
|
||||
'--with-libgdiplus=%s' % opts.mxe_prefix,
|
||||
'--enable-btls-lib',
|
||||
]
|
||||
else:
|
||||
CONFIGURE_FLAGS += [
|
||||
'--disable-iconv',
|
||||
'--disable-nls',
|
||||
'--enable-dynamic-btls',
|
||||
'--with-sigaltstack=yes',
|
||||
]
|
||||
|
||||
@@ -137,7 +148,20 @@ def setup_desktop_template(env: dict, opts: DesktopOpts, product: str, target_pl
|
||||
# DTrace is not available when building with OSXCROSS
|
||||
CONFIGURE_FLAGS += ['--enable-dtrace=no']
|
||||
else:
|
||||
env['_%s-%s_CC' % (product, target)] = 'cc'
|
||||
osx_toolchain = '/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain'
|
||||
|
||||
env['_%s-%s_CC' % (product, target)] = '%s/usr/bin/clang' % osx_toolchain
|
||||
env['_%s-%s_CXX' % (product, target)] = '%s/usr/bin/clang++' % osx_toolchain
|
||||
|
||||
osx_sysroot = '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk'
|
||||
|
||||
CFLAGS = [
|
||||
'-isysroot', osx_sysroot,
|
||||
'-arch', target_arch[target_platform][target]
|
||||
]
|
||||
|
||||
env['_%s-%s_CFLAGS' % (product, target)] = CFLAGS
|
||||
env['_%s-%s_CXXFLAGS' % (product, target)] = CFLAGS
|
||||
|
||||
env['_%s-%s_CONFIGURE_FLAGS' % (product, target)] = CONFIGURE_FLAGS
|
||||
|
||||
@@ -187,6 +211,14 @@ def configure(opts: DesktopOpts, product: str, target_platform: str, target: str
|
||||
def make(opts: DesktopOpts, product: str, target_platform: str, target: str):
|
||||
build_dir = path_join(opts.configure_dir, '%s-%s-%s' % (product, target, opts.configuration))
|
||||
|
||||
if target_platform == 'windows':
|
||||
mxe = 'mxe-Win64' if target == 'x86_64' else 'mxe-Win32'
|
||||
replace_in_new_file(
|
||||
src_file='%s/sdks/builds/%s.cmake.in' % (opts.mono_source_root, mxe),
|
||||
search='@MXE_PATH@', replace=opts.mxe_prefix,
|
||||
dst_file='%s/mono/btls/%s.cmake' % (opts.mono_source_root, mxe)
|
||||
)
|
||||
|
||||
make_args = make_default_args(opts)
|
||||
make_args += ['-C', build_dir]
|
||||
|
||||
@@ -202,7 +234,7 @@ def copy_bcl(opts: DesktopOpts, product: str, target_platform: str, target: str)
|
||||
from distutils.dir_util import copy_tree
|
||||
from bcl import get_profile_install_dirs
|
||||
dest_dir = path_join(opts.install_dir, '%s-%s-%s' % (product, target, opts.configuration), 'lib/mono/4.5')
|
||||
for src_dir in get_profile_install_dirs(opts, 'desktop'):
|
||||
for src_dir in get_profile_install_dirs(opts, 'desktop-win32' if target_platform == 'windows' else 'desktop'):
|
||||
if not os.path.isdir(src_dir):
|
||||
raise BuildError('BCL source directory does not exist: %s. The BCL must be built prior to this.' % src_dir)
|
||||
copy_tree(src_dir, dest_dir)
|
||||
|
||||
33
files/patches/btls-cmake-args-linux-mingw.diff
Normal file
33
files/patches/btls-cmake-args-linux-mingw.diff
Normal file
@@ -0,0 +1,33 @@
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 088128e5e74..54693aace64 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -5918,6 +5918,8 @@ if test "x$enable_btls" = "xyes"; then
|
||||
if test "x$HAVE_YASM" != "xyes"; then
|
||||
BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
|
||||
fi
|
||||
+ mono_btls_dir_abs=`cd $srcdir && pwd`/mono/btls
|
||||
+ BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCYGWIN=TRUE -DCMAKE_TOOLCHAIN_FILE=\"$mono_btls_dir_abs/mxe-Win32.cmake\""
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
@@ -5929,6 +5931,8 @@ if test "x$enable_btls" = "xyes"; then
|
||||
if test "x$HAVE_YASM" != "xyes"; then
|
||||
BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
|
||||
fi
|
||||
+ mono_btls_dir_abs=`cd $srcdir && pwd`/mono/btls
|
||||
+ BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCYGWIN=TRUE -DCMAKE_TOOLCHAIN_FILE=\"$mono_btls_dir_abs/mxe-Win64.cmake\""
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
diff --git a/mono/btls/CMakeLists.txt b/mono/btls/CMakeLists.txt
|
||||
index 992f41e4c7f..9946f5d21a4 100644
|
||||
--- a/mono/btls/CMakeLists.txt
|
||||
+++ b/mono/btls/CMakeLists.txt
|
||||
@@ -129,4 +129,5 @@ endif ()
|
||||
|
||||
if (CYGWIN)
|
||||
target_link_libraries (mono-btls-shared wsock32 ws2_32)
|
||||
+ target_link_options (mono-btls-shared PRIVATE -static-libgcc)
|
||||
endif ()
|
||||
\ No newline at end of file
|
||||
48
files/patches/fix-mono-log-spam.diff
Normal file
48
files/patches/fix-mono-log-spam.diff
Normal file
@@ -0,0 +1,48 @@
|
||||
diff --git a/mono/metadata/threadpool-io.c b/mono/metadata/threadpool-io.c
|
||||
index fdfef2de91e28..45ac0d84b2429 100644
|
||||
--- a/mono/metadata/threadpool-io.c
|
||||
+++ b/mono/metadata/threadpool-io.c
|
||||
@@ -180,6 +180,7 @@ selector_thread_wakeup_drain_pipes (void)
|
||||
{
|
||||
gchar buffer [128];
|
||||
gint received;
|
||||
+ static gint warnings_issued = 0;
|
||||
|
||||
for (;;) {
|
||||
#if !defined(HOST_WIN32)
|
||||
@@ -192,11 +193,16 @@ selector_thread_wakeup_drain_pipes (void)
|
||||
* some unices (like AIX) send ERESTART, which doesn't
|
||||
* exist on some other OSes errno
|
||||
*/
|
||||
- if (errno != EINTR && errno != EAGAIN && errno != ERESTART)
|
||||
+ if (errno != EINTR && errno != EAGAIN && errno != ERESTART) {
|
||||
#else
|
||||
- if (errno != EINTR && errno != EAGAIN)
|
||||
+ if (errno != EINTR && errno != EAGAIN) {
|
||||
#endif
|
||||
- g_warning ("selector_thread_wakeup_drain_pipes: read () failed, error (%d) %s\n", errno, g_strerror (errno));
|
||||
+ // limit amount of spam we write
|
||||
+ if (warnings_issued < 100) {
|
||||
+ g_warning ("selector_thread_wakeup_drain_pipes: read () failed, error (%d) %s\n", errno, g_strerror (errno));
|
||||
+ warnings_issued++;
|
||||
+ }
|
||||
+ }
|
||||
break;
|
||||
}
|
||||
#else
|
||||
@@ -204,8 +210,13 @@ selector_thread_wakeup_drain_pipes (void)
|
||||
if (received == 0)
|
||||
break;
|
||||
if (received == SOCKET_ERROR) {
|
||||
- if (WSAGetLastError () != WSAEINTR && WSAGetLastError () != WSAEWOULDBLOCK)
|
||||
- g_warning ("selector_thread_wakeup_drain_pipes: recv () failed, error (%d)\n", WSAGetLastError ());
|
||||
+ if (WSAGetLastError () != WSAEINTR && WSAGetLastError () != WSAEWOULDBLOCK) {
|
||||
+ // limit amount of spam we write
|
||||
+ if (warnings_issued < 100) {
|
||||
+ g_warning ("selector_thread_wakeup_drain_pipes: recv () failed, error (%d)\n", WSAGetLastError ());
|
||||
+ warnings_issued++;
|
||||
+ }
|
||||
+ }
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
15
files/xi.cs
Normal file
15
files/xi.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
using System.Net.Http;
|
||||
|
||||
[assembly:System.Reflection.AssemblyVersionAttribute ("0.0.0.0")]
|
||||
[assembly:System.Runtime.CompilerServices.InternalsVisibleTo ("System.Net.Http, PublicKey=002400000480000094000000060200000024000052534131000400000100010007d1fa57c4aed9f0a32e84aa0faefd0de9e8fd6aec8f87fb03766c834c99921eb23be79ad9d5dcc1dd9ad236132102900b723cf980957fc4e177108fc607774f29e8320e92ea05ece4e821c0a5efe8f1645c4c0c93c1ab99285d622caa652c1dfad63d745d6f2de5f17e5eaf0fc4963d261c8a12436518206dc093344d5ad293")]
|
||||
|
||||
namespace ObjCRuntime
|
||||
{
|
||||
internal class RuntimeOptions
|
||||
{
|
||||
internal static HttpMessageHandler GetHttpMessageHandler()
|
||||
{
|
||||
return new HttpClientHandler();
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
files/xi.snk
Normal file
BIN
files/xi.snk
Normal file
Binary file not shown.
21
ios.py
21
ios.py
@@ -14,7 +14,7 @@ import runtime
|
||||
this_script_dir = os.path.dirname(os.path.realpath(__file__))
|
||||
|
||||
device_targets = ['armv7', 'arm64']
|
||||
sim_targets = ['i386', 'x86_64']
|
||||
sim_targets = ['i386', 'x86_64', 'arm64-sim']
|
||||
cross_targets = ['cross-armv7', 'cross-arm64']
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@ class iOSTargetTable:
|
||||
archs = {
|
||||
'armv7': 'arm',
|
||||
'arm64': 'arm64',
|
||||
'arm64-sim': 'arm64',
|
||||
'i386': 'i386',
|
||||
'x86_64': 'x86_64'
|
||||
}
|
||||
@@ -33,6 +34,7 @@ class iOSTargetTable:
|
||||
host_triples = {
|
||||
'armv7': 'arm-apple-darwin11',
|
||||
'arm64': 'aarch64-apple-darwin11',
|
||||
'arm64-sim': 'aarch64-apple-darwin11',
|
||||
'i386': 'i386-apple-darwin11',
|
||||
'x86_64': 'x86_64-apple-darwin11'
|
||||
}
|
||||
@@ -40,6 +42,7 @@ class iOSTargetTable:
|
||||
osxcross_tool_triples = {
|
||||
'armv7': 'arm-apple-darwin11', # TODO: ?
|
||||
'arm64': 'arm-apple-darwin11',
|
||||
'arm64-sim': 'arm-apple-darwin11',
|
||||
'i386': 'i386-apple-darwin11', # TODO: ?
|
||||
'x86_64': 'x86_64-apple-darwin11'
|
||||
}
|
||||
@@ -185,7 +188,7 @@ def setup_ios_simulator_template(env: dict, opts: iOSOpts, target: str):
|
||||
if not ios_sysroot_path:
|
||||
raise RuntimeError('Cannot find iOS SDK; specify one manually with \'--ios-sdk\'.')
|
||||
|
||||
sysroot_flags = ['-isysroot', ios_sysroot_path, '-miphoneos-version-min=%s' % opts.ios_version_min]
|
||||
sysroot_flags = ['-isysroot', ios_sysroot_path, '-mios-simulator-version-min=%s' % opts.ios_version_min]
|
||||
|
||||
arch = iOSTargetTable.archs[target]
|
||||
host_triple = iOSTargetTable.host_triples[target]
|
||||
@@ -306,8 +309,11 @@ class iOSCrossTable:
|
||||
}
|
||||
|
||||
|
||||
def setup_ios_cross_template(env: dict, opts: iOSOpts, target: str, host_arch: str):
|
||||
def llvm_for(host_arch: str) -> str:
|
||||
return 'llvmarm64' if host_arch == 'arm64' else 'llvm64'
|
||||
|
||||
|
||||
def setup_ios_cross_template(env: dict, opts: iOSOpts, target: str, host_arch: str):
|
||||
target_triple = iOSCrossTable.target_triples[target]
|
||||
device_target = iOSCrossTable.device_targets[target]
|
||||
offsets_dumper_abi = iOSCrossTable.offsets_dumper_abis[target]
|
||||
@@ -411,7 +417,7 @@ def setup_ios_cross_template(env: dict, opts: iOSOpts, target: str, host_arch: s
|
||||
env['_ios-%s_CONFIGURE_FLAGS' % target] = CONFIGURE_FLAGS
|
||||
|
||||
# Runtime cross template
|
||||
runtime.setup_runtime_cross_template(env, opts, 'ios', target, host_triple, target_triple, device_target, 'llvm64', offsets_dumper_abi)
|
||||
runtime.setup_runtime_cross_template(env, opts, 'ios', target, host_triple, target_triple, device_target, llvm_for(host_arch), offsets_dumper_abi)
|
||||
|
||||
|
||||
def strip_libs(opts: iOSOpts, product: str, target: str):
|
||||
@@ -427,8 +433,11 @@ def configure(opts: iOSOpts, product: str, target: str):
|
||||
if is_cross(target):
|
||||
import llvm
|
||||
|
||||
llvm.make(opts, 'llvm64')
|
||||
setup_ios_cross_template(env, opts, target, host_arch='x86_64')
|
||||
host_arch='x86_64'
|
||||
|
||||
llvm.make(opts, llvm_for(host_arch))
|
||||
|
||||
setup_ios_cross_template(env, opts, target, host_arch)
|
||||
else:
|
||||
if is_sim:
|
||||
setup_ios_simulator_template(env, opts, target)
|
||||
|
||||
2
llvm.py
2
llvm.py
@@ -11,7 +11,7 @@ from os_utils import *
|
||||
# TODO: OSXCROSS
|
||||
|
||||
|
||||
target_values = ['llvm32', 'llvm64', 'llvmwin32', 'llvmwin64']
|
||||
target_values = ['llvm32', 'llvm64', 'llvmarm64', 'llvmwin32', 'llvmwin64']
|
||||
mxe_targets = {
|
||||
'llvmwin32': {'arch': 'i686', 'mxe': 'mxe-Win32'},
|
||||
'llvmwin64': {'arch': 'x86_64', 'mxe': 'mxe-Win64'}
|
||||
|
||||
@@ -23,9 +23,8 @@ class RuntimeOpts(BaseOpts):
|
||||
|
||||
@dataclass
|
||||
class AndroidOpts(RuntimeOpts):
|
||||
android_toolchains_prefix: str
|
||||
android_sdk_root: str
|
||||
android_ndk_root: str
|
||||
android_ndk_version: str
|
||||
android_api_version: str
|
||||
android_cmake_version: str
|
||||
toolchain_name_fmt: str = '%s-api%s-clang'
|
||||
@@ -80,9 +79,8 @@ def runtime_opts_from_args(args):
|
||||
def android_opts_from_args(args):
|
||||
return AndroidOpts(
|
||||
**vars(runtime_opts_from_args(args)),
|
||||
android_toolchains_prefix = abspath(args.toolchains_prefix),
|
||||
android_sdk_root = abspath(args.android_sdk),
|
||||
android_ndk_root = abspath(args.android_ndk),
|
||||
android_ndk_version = args.android_ndk_version,
|
||||
android_api_version = args.android_api_version,
|
||||
android_cmake_version = args.android_cmake_version
|
||||
)
|
||||
|
||||
@@ -27,10 +27,12 @@ def main(raw_args):
|
||||
|
||||
patches = [
|
||||
'fix-mono-android-tkill.diff',
|
||||
'fix-mono-log-spam.diff',
|
||||
'mono-dbg-agent-clear-tls-instead-of-abort.diff',
|
||||
'bcl-profile-platform-override.diff',
|
||||
'mono_ios_asl_log_deprecated.diff',
|
||||
'wasm_m2n_trampolines_hook.diff',
|
||||
'btls-cmake-args-linux-mingw.diff'
|
||||
]
|
||||
|
||||
if os.path.isfile(os.path.join(mono_source_root, 'mono/tools/offsets-tool/offsets-tool.py')):
|
||||
|
||||
Reference in New Issue
Block a user