mirror of
https://github.com/godotengine/godot-mono-builds.git
synced 2026-01-03 01:48:53 +03:00
Compare commits
1 Commits
release-aa
...
release-95
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d6b37438d4 |
2
.github/FUNDING.yml
vendored
2
.github/FUNDING.yml
vendored
@@ -1,2 +0,0 @@
|
||||
patreon: godotengine
|
||||
custom: https://godotengine.org/donate
|
||||
30
.github/ISSUE_TEMPLATE/bug-report.md
vendored
30
.github/ISSUE_TEMPLATE/bug-report.md
vendored
@@ -1,30 +0,0 @@
|
||||
---
|
||||
name: Bug Report
|
||||
about: Report a bug with this repo.
|
||||
title: ''
|
||||
labels: bug
|
||||
assignees: neikeq
|
||||
|
||||
---
|
||||
|
||||
<!--
|
||||
Please search existing issues for potential duplicates before filing yours:
|
||||
https://github.com/godotengine/godot-csharp-visualstudio/issues?q=is%3Aissue
|
||||
|
||||
Only submit an issue if it is reproducible with the latest stable Godot version.
|
||||
-->
|
||||
|
||||
**OS/device including version:**
|
||||
<!-- Specify GPU model and drivers if graphics-related. -->
|
||||
|
||||
|
||||
**Issue description:**
|
||||
<!-- What happened, what was expected, and what went wrong. -->
|
||||
|
||||
|
||||
**Screenshots of issue:**
|
||||
<!--
|
||||
This section is optional.
|
||||
Drag in an image, or post an image with a link in the form of:
|
||||

|
||||
-->
|
||||
@@ -1,13 +0,0 @@
|
||||
---
|
||||
name: Feature / Enhancement Request
|
||||
about: Adding new features or improving existing ones.
|
||||
title: ''
|
||||
labels: enhancement
|
||||
assignees: neikeq
|
||||
|
||||
---
|
||||
|
||||
<!--
|
||||
Please search existing issues for potential duplicates before filing yours:
|
||||
https://github.com/godotengine/godot-csharp-visualstudio/issues?q=is%3Aissue
|
||||
-->
|
||||
6
.github/dependabot.yml
vendored
6
.github/dependabot.yml
vendored
@@ -1,6 +0,0 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
269
.github/workflows/build.yml
vendored
269
.github/workflows/build.yml
vendored
@@ -2,55 +2,38 @@ name: Build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- '**'
|
||||
- '!release/**'
|
||||
paths-ignore:
|
||||
- '.gitignore'
|
||||
- 'LICENSE'
|
||||
- 'README.md'
|
||||
pull_request:
|
||||
branches:
|
||||
- '**'
|
||||
- '!release/**'
|
||||
paths-ignore:
|
||||
- '.gitignore'
|
||||
- 'LICENSE'
|
||||
- 'README.md'
|
||||
create:
|
||||
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
|
||||
# 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
|
||||
# Use SHA instead of the branch for caching purposes
|
||||
MONO_BRANCH: 2019-10
|
||||
MONO_SHA: 1d0d939dc30a5b56f478bc9f097cab146276b9af
|
||||
PYTHON_VERSION: 3.8
|
||||
EMSDK_VERSION: 1.38.47-upstream
|
||||
ANDROID_PLATFORM: android-29
|
||||
ANDROID_API: 18
|
||||
ANDROID_NDK_VERSION: 21.4.7075529
|
||||
# platform/iphone/detect.py
|
||||
ANDROID_CMAKE_VERSION: 3.6.4111459
|
||||
ANDROID_API: 21
|
||||
IOS_VERSION_MIN: 10.0
|
||||
|
||||
jobs:
|
||||
linux:
|
||||
name: Linux
|
||||
runs-on: ubuntu-16.04
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
target: [x86, x86_64]
|
||||
steps:
|
||||
- name: Set Environment Variables
|
||||
run: |
|
||||
echo "MONO_SOURCE_ROOT=$GITHUB_WORKSPACE/mono_sources" >> $GITHUB_ENV
|
||||
echo "::set-env name=MONO_SOURCE_ROOT::$GITHUB_WORKSPACE/mono_sources"
|
||||
- name: Install Dependencies (x86)
|
||||
if: matrix.target == 'x86'
|
||||
run: |
|
||||
@@ -65,29 +48,28 @@ 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@v1
|
||||
with:
|
||||
path: ${{ env.MONO_SOURCE_ROOT }}
|
||||
key: ${{ runner.os }}-${{ env.MONO_TAG }}-mono-sources
|
||||
key: ${{ runner.os }}-${{ env.MONO_SHA }}-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 }}
|
||||
ref: ${{ env.MONO_SHA }}
|
||||
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
|
||||
uses: actions/setup-python@v1
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
- name: Patch Mono
|
||||
if: steps.cache_mono_sources.outputs.cache-hit != 'true'
|
||||
run:
|
||||
python3 godot-mono-builds/patch_mono.py
|
||||
- name: Configure
|
||||
@@ -105,8 +87,6 @@ jobs:
|
||||
with:
|
||||
name: linux-${{ matrix.target }}
|
||||
path: ~/mono-installs-artifacts/linux-${{ 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 config.log After Error
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v2
|
||||
@@ -123,7 +103,7 @@ jobs:
|
||||
steps:
|
||||
- name: Set Environment Variables
|
||||
run: |
|
||||
echo "MONO_SOURCE_ROOT=$GITHUB_WORKSPACE/mono_sources" >> $GITHUB_ENV
|
||||
echo "::set-env name=MONO_SOURCE_ROOT::$GITHUB_WORKSPACE/mono_sources"
|
||||
- name: Install Dependencies (x86)
|
||||
if: matrix.target == 'x86'
|
||||
run: |
|
||||
@@ -139,29 +119,28 @@ 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@v1
|
||||
with:
|
||||
path: ${{ env.MONO_SOURCE_ROOT }}
|
||||
key: ${{ runner.os }}-${{ env.MONO_TAG }}-mono-sources
|
||||
key: ${{ runner.os }}-${{ env.MONO_SHA }}-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 }}
|
||||
ref: ${{ env.MONO_SHA }}
|
||||
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
|
||||
uses: actions/setup-python@v1
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
- name: Patch Mono
|
||||
if: steps.cache_mono_sources.outputs.cache-hit != 'true'
|
||||
run:
|
||||
python3 godot-mono-builds/patch_mono.py
|
||||
- name: Configure
|
||||
@@ -179,8 +158,6 @@ jobs:
|
||||
with:
|
||||
name: windows-${{ matrix.target }}
|
||||
path: ~/mono-installs-artifacts/windows-${{ 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 config.log After Error
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v2
|
||||
@@ -197,35 +174,34 @@ jobs:
|
||||
steps:
|
||||
- name: Set Environment Variables
|
||||
run: |
|
||||
echo "MONO_SOURCE_ROOT=$GITHUB_WORKSPACE/mono_sources" >> $GITHUB_ENV
|
||||
echo "::set-env name=MONO_SOURCE_ROOT::$GITHUB_WORKSPACE/mono_sources"
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
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@v1
|
||||
with:
|
||||
path: ${{ env.MONO_SOURCE_ROOT }}
|
||||
key: ${{ runner.os }}-${{ env.MONO_TAG }}-mono-sources
|
||||
key: ${{ runner.os }}-${{ env.MONO_SHA }}-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 }}
|
||||
ref: ${{ env.MONO_SHA }}
|
||||
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
|
||||
uses: actions/setup-python@v1
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
- name: Patch Mono
|
||||
if: steps.cache_mono_sources.outputs.cache-hit != 'true'
|
||||
run:
|
||||
python3 godot-mono-builds/patch_mono.py
|
||||
- name: Configure
|
||||
@@ -243,8 +219,6 @@ jobs:
|
||||
with:
|
||||
name: osx-${{ matrix.target }}
|
||||
path: ~/mono-installs-artifacts/osx-${{ 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 config.log After Error
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v2
|
||||
@@ -261,35 +235,34 @@ jobs:
|
||||
steps:
|
||||
- name: Set Environment Variables
|
||||
run: |
|
||||
echo "MONO_SOURCE_ROOT=$GITHUB_WORKSPACE/mono_sources" >> $GITHUB_ENV
|
||||
echo "::set-env name=MONO_SOURCE_ROOT::$GITHUB_WORKSPACE/mono_sources"
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
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@v1
|
||||
with:
|
||||
path: ${{ env.MONO_SOURCE_ROOT }}
|
||||
key: ${{ runner.os }}-${{ env.MONO_TAG }}-mono-sources
|
||||
key: ${{ runner.os }}-${{ env.MONO_SHA }}-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 }}
|
||||
ref: ${{ env.MONO_SHA }}
|
||||
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
|
||||
uses: actions/setup-python@v1
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
- name: Patch Mono
|
||||
if: steps.cache_mono_sources.outputs.cache-hit != 'true'
|
||||
run:
|
||||
python3 godot-mono-builds/patch_mono.py
|
||||
- name: Configure
|
||||
@@ -308,8 +281,6 @@ jobs:
|
||||
with:
|
||||
name: ios-${{ matrix.target }}
|
||||
path: ~/mono-installs-artifacts/ios-${{ 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 config.log After Error
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v2
|
||||
@@ -331,35 +302,34 @@ jobs:
|
||||
steps:
|
||||
- name: Set Environment Variables
|
||||
run: |
|
||||
echo "MONO_SOURCE_ROOT=$GITHUB_WORKSPACE/mono_sources" >> $GITHUB_ENV
|
||||
echo "::set-env name=MONO_SOURCE_ROOT::$GITHUB_WORKSPACE/mono_sources"
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
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@v1
|
||||
with:
|
||||
path: ${{ env.MONO_SOURCE_ROOT }}
|
||||
key: ${{ runner.os }}-${{ env.MONO_TAG }}-mono-sources
|
||||
key: ${{ runner.os }}-${{ env.MONO_SHA }}-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 }}
|
||||
ref: ${{ env.MONO_SHA }}
|
||||
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
|
||||
uses: actions/setup-python@v1
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
- name: Patch Mono
|
||||
if: steps.cache_mono_sources.outputs.cache-hit != 'true'
|
||||
run:
|
||||
python3 godot-mono-builds/patch_mono.py
|
||||
- name: Download LLVM artifact
|
||||
@@ -395,8 +365,6 @@ jobs:
|
||||
with:
|
||||
name: ios-${{ matrix.target }}
|
||||
path: ~/mono-installs-artifacts/ios-${{ 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
|
||||
@@ -412,14 +380,14 @@ jobs:
|
||||
|
||||
android:
|
||||
name: Android
|
||||
runs-on: ubuntu-16.04
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
target: [armeabi-v7a, arm64-v8a, x86, x86_64]
|
||||
steps:
|
||||
- name: Set Environment Variables
|
||||
run: |
|
||||
echo "MONO_SOURCE_ROOT=$GITHUB_WORKSPACE/mono_sources" >> $GITHUB_ENV
|
||||
echo "::set-env name=MONO_SOURCE_ROOT::$GITHUB_WORKSPACE/mono_sources"
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
sudo apt-get -y update
|
||||
@@ -429,35 +397,34 @@ jobs:
|
||||
run: |
|
||||
sudo snap install androidsdk
|
||||
androidsdk "platforms;${ANDROID_PLATFORM}"
|
||||
androidsdk "ndk;${ANDROID_NDK_VERSION}"
|
||||
androidsdk "ndk-bundle"
|
||||
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
|
||||
echo "::set-env name=ANDROID_SDK_ROOT::$HOME/snap/androidsdk/current/"
|
||||
echo "::set-env name=ANDROID_NDK_ROOT::$ANDROID_SDK_ROOT/ndk-bundle"
|
||||
- name: Cache Mono Sources
|
||||
id: cache_mono_sources
|
||||
uses: actions/cache@v2.1.5
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: ${{ env.MONO_SOURCE_ROOT }}
|
||||
key: ${{ runner.os }}-${{ env.MONO_TAG }}-mono-sources
|
||||
key: ${{ runner.os }}-${{ env.MONO_SHA }}-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 }}
|
||||
ref: ${{ env.MONO_SHA }}
|
||||
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
|
||||
uses: actions/setup-python@v1
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
- name: Patch Mono
|
||||
if: steps.cache_mono_sources.outputs.cache-hit != 'true'
|
||||
run:
|
||||
python3 godot-mono-builds/patch_mono.py
|
||||
- name: Configure
|
||||
@@ -475,8 +442,6 @@ jobs:
|
||||
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 config.log After Error
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v2
|
||||
@@ -487,65 +452,39 @@ jobs:
|
||||
android-cross:
|
||||
needs: llvm
|
||||
name: Android Cross-compiler
|
||||
runs-on: ${{ matrix.os }}
|
||||
runs-on: ubuntu-latest
|
||||
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
|
||||
echo "::set-env name=MONO_SOURCE_ROOT::$GITHUB_WORKSPACE/mono_sources"
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
sudo apt-get -y update
|
||||
@@ -558,38 +497,37 @@ jobs:
|
||||
run: |
|
||||
sudo apt-get -y install snapd
|
||||
sudo snap install androidsdk
|
||||
androidsdk "ndk;${ANDROID_NDK_VERSION}"
|
||||
androidsdk "platforms;${ANDROID_PLATFORM}"
|
||||
androidsdk "ndk-bundle"
|
||||
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
|
||||
echo "::set-env name=ANDROID_SDK_ROOT::$HOME/snap/androidsdk/current/"
|
||||
echo "::set-env name=ANDROID_NDK_ROOT::$ANDROID_SDK_ROOT/ndk-bundle"
|
||||
- name: Cache Mono Sources
|
||||
id: cache_mono_sources
|
||||
uses: actions/cache@v2.1.5
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: ${{ env.MONO_SOURCE_ROOT }}
|
||||
key: ${{ runner.os }}-${{ env.MONO_TAG }}-mono-sources
|
||||
key: ${{ runner.os }}-${{ env.MONO_SHA }}-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 }}
|
||||
ref: ${{ env.MONO_SHA }}
|
||||
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
|
||||
uses: actions/setup-python@v1
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
- name: Download LLVM artifact
|
||||
uses: actions/download-artifact@v2
|
||||
with:
|
||||
name: llvm-${{ matrix.llvm }}-${{ matrix.os }}
|
||||
name: llvm-${{ matrix.llvm }}-ubuntu-latest
|
||||
# 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.
|
||||
@@ -600,6 +538,7 @@ jobs:
|
||||
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
|
||||
if: steps.cache_mono_sources.outputs.cache-hit != 'true'
|
||||
run:
|
||||
python3 godot-mono-builds/patch_mono.py
|
||||
- name: Configure Runtime
|
||||
@@ -620,8 +559,6 @@ jobs:
|
||||
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
|
||||
@@ -644,40 +581,39 @@ jobs:
|
||||
steps:
|
||||
- name: Set Environment Variables
|
||||
run: |
|
||||
echo "MONO_SOURCE_ROOT=$GITHUB_WORKSPACE/mono_sources" >> $GITHUB_ENV
|
||||
echo "::set-env name=MONO_SOURCE_ROOT::$GITHUB_WORKSPACE/mono_sources"
|
||||
- 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: Cache Mono Sources
|
||||
id: cache_mono_sources
|
||||
uses: actions/cache@v2.1.5
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: ${{ env.MONO_SOURCE_ROOT }}
|
||||
key: ${{ runner.os }}-${{ env.MONO_TAG }}-mono-sources
|
||||
key: ${{ runner.os }}-${{ env.MONO_SHA }}-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 }}
|
||||
ref: ${{ env.MONO_SHA }}
|
||||
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
|
||||
uses: actions/setup-python@v1
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
- name: Setup Emscripten SDK
|
||||
uses: mymindstorm/setup-emsdk@v9
|
||||
uses: mymindstorm/setup-emsdk@v2
|
||||
with:
|
||||
version: ${{ env.EMSDK_VERSION }}
|
||||
- name: Patch Mono
|
||||
if: steps.cache_mono_sources.outputs.cache-hit != 'true'
|
||||
run:
|
||||
python3 godot-mono-builds/patch_mono.py
|
||||
- name: Configure
|
||||
@@ -695,8 +631,6 @@ jobs:
|
||||
with:
|
||||
name: wasm-${{ matrix.target }}
|
||||
path: ~/mono-installs-artifacts/wasm-${{ 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 config.log After Error
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v2
|
||||
@@ -709,35 +643,28 @@ 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@v1
|
||||
with:
|
||||
path: ~/mono-installs/llvm-${{ matrix.target }}
|
||||
key: ${{ runner.os }}-${{ env.MONO_TAG }}-llvm-${{ matrix.target }}
|
||||
key: ${{ runner.os }}-${{ env.MONO_SHA }}-llvm-${{ matrix.target }}
|
||||
- name: Set Environment Variables
|
||||
run: |
|
||||
echo "MONO_SOURCE_ROOT=$GITHUB_WORKSPACE/mono_sources" >> $GITHUB_ENV
|
||||
echo "::set-env name=MONO_SOURCE_ROOT::$GITHUB_WORKSPACE/mono_sources"
|
||||
- name: Install Dependencies (Linux)
|
||||
if: steps.cache_llvm.outputs.cache-hit != 'true' && runner.os == 'Linux'
|
||||
if: steps.cache_llvm.outputs.cache-hit != 'true' && matrix.os == 'ubuntu-latest'
|
||||
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 (Linux Targeting Windows)
|
||||
if: steps.cache_llvm.outputs.cache-hit != 'true' && runner.os == 'Linux' && matrix.target == 'llvmwin64'
|
||||
if: steps.cache_llvm.outputs.cache-hit != 'true' && matrix.os == 'ubuntu-latest' && matrix.target == 'llvmwin64'
|
||||
run: |
|
||||
sudo apt-get -y install mingw-w64 libz-mingw-w64-dev
|
||||
- name: Install Dependencies (macOS)
|
||||
@@ -747,21 +674,18 @@ 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@v1
|
||||
with:
|
||||
path: ${{ env.MONO_SOURCE_ROOT }}
|
||||
key: ${{ runner.os }}-${{ env.MONO_TAG }}-mono-sources
|
||||
key: ${{ runner.os }}-${{ env.MONO_SHA }}-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
|
||||
with:
|
||||
repository: mono/mono
|
||||
ref: ${{ env.MONO_TAG }}
|
||||
ref: ${{ env.MONO_SHA }}
|
||||
submodules: true
|
||||
path: ${{ env.MONO_SOURCE_ROOT }}
|
||||
- name: Clean Mono
|
||||
if: steps.cache_llvm.outputs.cache-hit != 'true'
|
||||
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
|
||||
@@ -769,11 +693,11 @@ jobs:
|
||||
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@v1
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
- name: Patch Mono
|
||||
if: steps.cache_llvm.outputs.cache-hit != 'true'
|
||||
if: steps.cache_mono_sources.outputs.cache-hit != 'true' && steps.cache_llvm.outputs.cache-hit != 'true'
|
||||
run:
|
||||
python3 godot-mono-builds/patch_mono.py
|
||||
- name: Make
|
||||
@@ -785,9 +709,6 @@ jobs:
|
||||
with:
|
||||
name: llvm-${{ matrix.target }}-${{ matrix.os }}
|
||||
path: ~/mono-installs/llvm-${{ matrix.target }}
|
||||
- name: Clean Mono
|
||||
if: steps.cache_llvm.outputs.cache-hit != 'true'
|
||||
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
|
||||
@@ -797,43 +718,42 @@ jobs:
|
||||
|
||||
bcl:
|
||||
name: BCL
|
||||
runs-on: ubuntu-16.04
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
product: [desktop, desktop-win32, android, ios, wasm]
|
||||
steps:
|
||||
- name: Set Environment Variables
|
||||
run: |
|
||||
echo "MONO_SOURCE_ROOT=$GITHUB_WORKSPACE/mono_sources" >> $GITHUB_ENV
|
||||
echo "::set-env name=MONO_SOURCE_ROOT::$GITHUB_WORKSPACE/mono_sources"
|
||||
- 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: Cache Mono Sources
|
||||
id: cache_mono_sources
|
||||
uses: actions/cache@v2.1.5
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: ${{ env.MONO_SOURCE_ROOT }}
|
||||
key: ${{ runner.os }}-${{ env.MONO_TAG }}-mono-sources
|
||||
key: ${{ runner.os }}-${{ env.MONO_SHA }}-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 }}
|
||||
ref: ${{ env.MONO_SHA }}
|
||||
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
|
||||
uses: actions/setup-python@v1
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
- name: Patch Mono
|
||||
if: steps.cache_mono_sources.outputs.cache-hit != 'true'
|
||||
run:
|
||||
python3 godot-mono-builds/patch_mono.py
|
||||
- name: Make Desktop BCL for this Build Platform
|
||||
@@ -852,8 +772,6 @@ jobs:
|
||||
with:
|
||||
name: bcl-${{ matrix.product }}
|
||||
path: ~/mono-installs-artifacts/bcl-${{ matrix.product }}.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 config.log After Error
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v2
|
||||
@@ -862,10 +780,10 @@ jobs:
|
||||
path: ~/mono-configs/bcl/config.log
|
||||
|
||||
create-release:
|
||||
if: success() && github.event_name == 'create' && startsWith(github.ref, 'refs/heads/release/')
|
||||
if: success() && github.ref == 'refs/heads/release' && github.event_name == 'push'
|
||||
needs: [linux, windows, osx, ios, ios-cross, android, android-cross, wasm, bcl]
|
||||
name: Create Release
|
||||
runs-on: ubuntu-16.04
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
release_upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||
steps:
|
||||
@@ -879,9 +797,11 @@ jobs:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
tag_name: release-${{ steps.short-sha.outputs.sha7 }}
|
||||
release_name: Release ${{ steps.short-sha.outputs.sha7 }} with ${{ env.MONO_TAG }}
|
||||
release_name: Release ${{ steps.short-sha.outputs.sha7 }}
|
||||
body: |
|
||||
Mono Version: ${{ env.MONO_TAG }}
|
||||
Mono:
|
||||
- Branch: ${{ env.MONO_BRANCH }}
|
||||
- Commit: ${{ env.MONO_SHA }}
|
||||
|
||||
EMSDK Version: ${{ env.EMSDK_VERSION }}
|
||||
Android Platform: ${{ env.ANDROID_PLATFORM }}
|
||||
@@ -891,19 +811,20 @@ jobs:
|
||||
prerelease: false
|
||||
|
||||
upload-release-artifacts:
|
||||
if: success() && github.event_name == 'create' && startsWith(github.ref, 'refs/heads/release/')
|
||||
if: success() && github.ref == 'refs/heads/release' && github.event_name == 'push'
|
||||
needs: create-release
|
||||
name: Upload Release Artifacts
|
||||
runs-on: ubuntu-16.04
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
# bcl-desktop-win32 is disabled until build is fixed
|
||||
artifact_name: [linux-x86, linux-x86_64, windows-x86, windows-x86_64, 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,
|
||||
wasm-runtime, wasm-runtime-threads,
|
||||
bcl-desktop, bcl-desktop-win32, bcl-android, bcl-ios, bcl-wasm]
|
||||
bcl-desktop, bcl-android, bcl-ios, bcl-wasm]
|
||||
steps:
|
||||
- name: Download Artifact
|
||||
uses: actions/download-artifact@v2
|
||||
|
||||
15
.github/workflows/static_checks.yml
vendored
15
.github/workflows/static_checks.yml
vendored
@@ -1,15 +0,0 @@
|
||||
name: Continuous integration
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Lint repo
|
||||
run: |
|
||||
sudo apt-get update -qq
|
||||
sudo apt-get install -qq dos2unix recode
|
||||
bash ./format.sh
|
||||
28
README.md
28
README.md
@@ -2,16 +2,7 @@
|
||||
|
||||
[](https://github.com/godotengine/godot-mono-builds/actions)
|
||||
|
||||
This repository contains scripts for building the Mono runtime to use with Godot Engine.
|
||||
|
||||
## Supported versions
|
||||
|
||||
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.
|
||||
- Emscripten: 1.39.9.
|
||||
- Android: API level 29.
|
||||
This repository contains scripts for building the Mono runtime to use with Godot Engine
|
||||
|
||||
## Command-line options
|
||||
|
||||
@@ -19,9 +10,9 @@ While they may work with other versions, you might have issues applying patches
|
||||
|
||||
These scripts are based on the Mono [sdks](https://github.com/mono/mono/tree/master/sdks) makefiles, with some changes to work well with Godot. Some platforms or targets depend on files from the `sdks` directory in the Mono source repository. This directory may be missing from tarballs. If that's the case, cloning the git repository may be needed. [This table](https://www.mono-project.com/docs/about-mono/versioning/#mono-source-versioning) can be used to determine the branch for a specific version of Mono.
|
||||
|
||||
Some patches need to be applied to the Mono sources before building. This can be done by running `python3 ./patch_mono.py`.
|
||||
Some patches need to be applied to the Mono sources before building. This can be done by running `python ./patch_mono.py`.
|
||||
|
||||
Run `python3 SCRIPT.py --help` for the full list of command line options.
|
||||
Run `python SCRIPT.py --help` for the full list of command line options.
|
||||
|
||||
By default, the scripts will install the resulting files to `$HOME/mono-installs`.
|
||||
A custom output directory can be specified with the `--install-dir` option.
|
||||
@@ -39,19 +30,6 @@ export MONO_SOURCE_ROOT=$HOME/git/mono
|
||||
- OSXCROSS is supported expect 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
|
||||
|
||||
In order to compile mono into Godot for deskop you will need to first build for desktop (see 'Desktop' below), and then Base Class Libraries (see 'Base Class library' below).
|
||||
|
||||
Then run the 'copy-bcl' action of the same desktop script you ran configure and make on, specifying the same target platforms you used before. This will copy the bcl runtime into the runtime directories that the subsequent Godot build (using `copy_mono_root=yes`) expects to find them in.
|
||||
e.g.
|
||||
`./linux.py copy-bcl --target=x86 --target=x86_64`
|
||||
|
||||
Then you'll need to compile Godot using `copy_mono_root=yes`
|
||||
e.g.
|
||||
`scons -j6 target=release_debug tools=yes module_mono_enabled=yes copy_mono_root=yes mono_prefix="$HOME/mono-installs/desktop-linux-x86_64-release"`
|
||||
|
||||
|
||||
## Desktop
|
||||
|
||||
```bash
|
||||
|
||||
10
android.py
10
android.py
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/python
|
||||
|
||||
import os
|
||||
import os.path
|
||||
@@ -415,9 +415,9 @@ def make_standalone_toolchain(opts: AndroidOpts, target: str, api: str):
|
||||
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],
|
||||
args = ['--verbose', '--force', '--api=' + api, '--arch=' + AndroidTargetTable.archs[target],
|
||||
'--install-dir=' + install_dir]
|
||||
run_command('python3', args=args, name='make_standalone_toolchain')
|
||||
run_command(command, args=args, name='make_standalone_toolchain')
|
||||
|
||||
|
||||
def strip_libs(opts: AndroidOpts, product: str, target: str, api: str):
|
||||
@@ -522,9 +522,7 @@ def main(raw_args):
|
||||
parser.add_argument('--toolchains-prefix', default=path_join(home, 'android-toolchains'), help=default_help)
|
||||
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-api-version', default='21', help=default_help)
|
||||
parser.add_argument('--android-cmake-version', default='autodetect', help=default_help)
|
||||
|
||||
cmd_utils.add_runtime_arguments(parser, default_help)
|
||||
|
||||
43
bcl.py
43
bcl.py
@@ -1,4 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/python
|
||||
#!/usr/bin/python
|
||||
|
||||
import os
|
||||
import os.path
|
||||
@@ -26,19 +27,6 @@ test_profiles_table = {
|
||||
'wasm': ['wasm']
|
||||
}
|
||||
|
||||
def get_install_dir(opts: BaseOpts, product: str):
|
||||
return path_join(opts.install_dir, '%s-bcl' % product)
|
||||
|
||||
def get_profile_dir(profile: str, product: str):
|
||||
if product == 'desktop-win32':
|
||||
return profile + '-win32'
|
||||
else:
|
||||
return profile
|
||||
|
||||
def get_profile_install_dirs(opts: BaseOpts, product: str):
|
||||
install_dir = get_install_dir(opts, product)
|
||||
profiles = profiles_table[product]
|
||||
return [path_join(install_dir, get_profile_dir(profile, product)) for profile in profiles]
|
||||
|
||||
def configure_bcl(opts: BclOpts):
|
||||
stamp_file = path_join(opts.configure_dir, '.stamp-bcl-configure')
|
||||
@@ -104,7 +92,7 @@ def make_product(opts: BclOpts, product: str):
|
||||
profiles = profiles_table[product]
|
||||
test_profiles = test_profiles_table[product]
|
||||
|
||||
install_dir = get_install_dir(opts, product)
|
||||
install_dir = path_join(opts.install_dir, '%s-bcl' % product)
|
||||
|
||||
mkdir_p(install_dir)
|
||||
|
||||
@@ -125,7 +113,7 @@ def make_product(opts: BclOpts, product: str):
|
||||
# Copy the bcl profiles to the output directory
|
||||
from distutils.dir_util import copy_tree
|
||||
for profile in profiles:
|
||||
profile_dir = get_profile_dir(profile, product)
|
||||
profile_dir = profile + '-win32' if product == 'desktop-win32' else profile
|
||||
copy_tree('%s/mcs/class/lib/%s' % (opts.mono_source_root, profile_dir), '%s/%s' % (install_dir, profile_dir))
|
||||
|
||||
# Remove unneeded files
|
||||
@@ -139,27 +127,6 @@ def make_product(opts: BclOpts, product: str):
|
||||
file_pattern_recursive = '%s/**/%s' % (install_dir, file_pattern)
|
||||
[rm_rf(x) for x in glob.iglob(file_pattern_recursive, recursive=True)]
|
||||
|
||||
# WebAssembly.Framework.sln
|
||||
if product == 'wasm':
|
||||
wasm_fx_output_dir = '%s/sdks/wasm/framework/netstandard2.0' % opts.mono_source_root
|
||||
wasm_fx_sln_file = '%s/sdks/wasm/framework/src/WebAssembly.Framework.sln' % opts.mono_source_root
|
||||
output_dir = path_join(install_dir, 'wasm')
|
||||
|
||||
from msbuild_helper import build_solution
|
||||
build_solution(wasm_fx_sln_file, 'Release')
|
||||
|
||||
import shutil
|
||||
from glob import glob
|
||||
|
||||
fglob = glob(path_join(wasm_fx_output_dir, '*.dll'))
|
||||
|
||||
if not opts.remove_pdb:
|
||||
fglob.extend(glob(path_join(wasm_fx_output_dir, '*.pdb')))
|
||||
|
||||
for file in fglob:
|
||||
if os.path.isfile(file):
|
||||
shutil.copy(file, output_dir)
|
||||
|
||||
# godot_android_ext profile (custom 'Mono.Android.dll')
|
||||
if product == 'android':
|
||||
this_script_dir = os.path.dirname(os.path.realpath(__file__))
|
||||
@@ -182,7 +149,7 @@ def make_product(opts: BclOpts, product: str):
|
||||
def clean_product(opts: BclOpts, product: str):
|
||||
clean_bcl(opts)
|
||||
|
||||
install_dir = get_install_dir(opts, product)
|
||||
install_dir = path_join(opts.install_dir, '%s-bcl' % product)
|
||||
rm_rf(install_dir)
|
||||
|
||||
|
||||
|
||||
11
desktop.py
11
desktop.py
@@ -198,14 +198,6 @@ def make(opts: DesktopOpts, product: str, target_platform: str, target: str):
|
||||
if opts.strip_libs:
|
||||
strip_libs(opts, product, target_platform, target)
|
||||
|
||||
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'):
|
||||
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)
|
||||
|
||||
def clean(opts: DesktopOpts, product: str, target_platform: str, target: str):
|
||||
rm_rf(
|
||||
@@ -223,14 +215,13 @@ def run_main(raw_args, target_platform):
|
||||
actions = OrderedDict()
|
||||
actions['configure'] = configure
|
||||
actions['make'] = make
|
||||
actions['copy-bcl'] = copy_bcl
|
||||
actions['clean'] = clean
|
||||
|
||||
parser = cmd_utils.build_arg_parser(description='Builds the Mono runtime for the Desktop')
|
||||
|
||||
default_help = 'default: %(default)s'
|
||||
|
||||
parser.add_argument('action', choices=['configure', 'make', 'copy-bcl', 'clean'])
|
||||
parser.add_argument('action', choices=['configure', 'make', 'clean'])
|
||||
parser.add_argument('--target', choices=targets[target_platform], action='append', required=True)
|
||||
parser.add_argument('--with-llvm', action='store_true', default=False, help=default_help)
|
||||
|
||||
|
||||
@@ -6,8 +6,8 @@ index 3cb127bad59..30ff5edc307 100644
|
||||
*/
|
||||
#include <config.h>
|
||||
|
||||
-#if (defined(HOST_WATCHOS) && (__WATCH_OS_VERSION_MIN_REQUIRED >= __WATCHOS_3_0)) || defined(HOST_MACCAT)
|
||||
+#if (defined(HOST_WATCHOS) && (__WATCH_OS_VERSION_MIN_REQUIRED >= __WATCHOS_3_0)) || defined(HOST_MACCAT) \
|
||||
-#if defined(HOST_WATCHOS) && (__WATCH_OS_VERSION_MIN_REQUIRED >= __WATCHOS_3_0)
|
||||
+#if (defined(HOST_WATCHOS) && (__WATCH_OS_VERSION_MIN_REQUIRED >= __WATCHOS_3_0)) \
|
||||
+ || (defined(HOST_IOS) && (__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ >= 100000))
|
||||
/* emitted by clang:
|
||||
* > /Users/lewurm/work/mono-watch4/mono/utils/mono-log-darwin.c:35:2: error: 'asl_log' is \
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
diff --git a/mono/mini/aot-runtime-wasm.c b/mono/mini/aot-runtime-wasm.c
|
||||
index ccc5a26510c..2f7001be00b 100644
|
||||
--- a/mono/mini/aot-runtime-wasm.c
|
||||
+++ b/mono/mini/aot-runtime-wasm.c
|
||||
@@ -112,6 +112,22 @@ mono_wasm_interp_to_native_trampoline (void *target_func, InterpMethodArguments
|
||||
icall_trampoline_dispatch (cookie, target_func, margs);
|
||||
}
|
||||
|
||||
+typedef mono_bool (*GodotMonoM2nIcallTrampolineDispatch)(const char *cookie, void *target_func, InterpMethodArguments *margs);
|
||||
+
|
||||
+GodotMonoM2nIcallTrampolineDispatch m2n_icall_trampoline_dispatch_hook = NULL;
|
||||
+
|
||||
+GodotMonoM2nIcallTrampolineDispatch
|
||||
+godot_mono_get_m2n_icall_trampoline_dispatch_hook (void)
|
||||
+{
|
||||
+ return m2n_icall_trampoline_dispatch_hook;
|
||||
+}
|
||||
+
|
||||
+MONO_API void
|
||||
+godot_mono_register_m2n_icall_trampoline_dispatch_hook (GodotMonoM2nIcallTrampolineDispatch hook)
|
||||
+{
|
||||
+ m2n_icall_trampoline_dispatch_hook = hook;
|
||||
+}
|
||||
+
|
||||
#else /* TARGET_WASM */
|
||||
|
||||
MONO_EMPTY_SOURCE_FILE (aot_runtime_wasm);
|
||||
diff --git a/mono/mini/wasm_m2n_invoke.g.h b/mono/mini/wasm_m2n_invoke.g.h
|
||||
index aea7e9698ad..3bb715f9fd8 100644
|
||||
--- a/mono/mini/wasm_m2n_invoke.g.h
|
||||
+++ b/mono/mini/wasm_m2n_invoke.g.h
|
||||
@@ -1017,6 +1017,10 @@ wasm_invoke_vil (void *target_func, InterpMethodArguments *margs)
|
||||
|
||||
}
|
||||
|
||||
+typedef mono_bool (*GodotMonoM2nIcallTrampolineDispatch)(const char *cookie, void *target_func, InterpMethodArguments *margs);
|
||||
+
|
||||
+GodotMonoM2nIcallTrampolineDispatch godot_mono_get_m2n_icall_trampoline_dispatch_hook (void);
|
||||
+
|
||||
static void
|
||||
icall_trampoline_dispatch (const char *cookie, void *target_func, InterpMethodArguments *margs)
|
||||
{
|
||||
@@ -1820,5 +1824,9 @@ icall_trampoline_dispatch (const char *cookie, void *target_func, InterpMethodAr
|
||||
}
|
||||
}
|
||||
}
|
||||
+ GodotMonoM2nIcallTrampolineDispatch trampoline_dispatch_hook = godot_mono_get_m2n_icall_trampoline_dispatch_hook ();
|
||||
+ if (trampoline_dispatch_hook != NULL && trampoline_dispatch_hook (cookie, target_func, margs)) {
|
||||
+ return;
|
||||
+ }
|
||||
g_error ("CANNOT HANDLE COOKIE %s\n", cookie);
|
||||
}
|
||||
48
format.sh
48
format.sh
@@ -1,48 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -uo pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
# Loops through all text files tracked by Git.
|
||||
git grep -zIl '' |
|
||||
while IFS= read -rd '' f; do
|
||||
# Exclude csproj and hdr files, and patches.
|
||||
if [[ "$f" == *"csproj" ]]; then
|
||||
continue
|
||||
elif [[ "$f" == *"hdr" ]]; then
|
||||
continue
|
||||
elif [[ "$f" == *"diff" ]]; then
|
||||
continue
|
||||
elif [[ "$f" == *"patch" ]]; then
|
||||
continue
|
||||
fi
|
||||
# Ensures that files are UTF-8 formatted.
|
||||
recode UTF-8 "$f" 2> /dev/null
|
||||
# Ensures that files have LF line endings.
|
||||
dos2unix "$f" 2> /dev/null
|
||||
# Ensures that files do not contain a BOM.
|
||||
sed -i '1s/^\xEF\xBB\xBF//' "$f"
|
||||
# Ensures that files end with newline characters.
|
||||
tail -c1 < "$f" | read -r _ || echo >> "$f";
|
||||
# Remove trailing space characters.
|
||||
sed -z -i 's/\x20\x0A/\x0A/g' "$f"
|
||||
done
|
||||
|
||||
git diff > patch.patch
|
||||
FILESIZE="$(stat -c%s patch.patch)"
|
||||
MAXSIZE=5
|
||||
|
||||
# If no patch has been generated all is OK, clean up, and exit.
|
||||
if (( FILESIZE < MAXSIZE )); then
|
||||
printf "Files in this commit comply with the formatting rules.\n"
|
||||
rm -f patch.patch
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# A patch has been created, notify the user, clean up, and exit.
|
||||
printf "\n*** The following differences were found between the code "
|
||||
printf "and the formatting rules:\n\n"
|
||||
cat patch.patch
|
||||
printf "\n*** Aborting, please fix your commit(s) with 'git commit --amend' or 'git rebase -i <hash>'\n"
|
||||
rm -f patch.patch
|
||||
exit 1
|
||||
16
ios.py
16
ios.py
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/python
|
||||
|
||||
import os
|
||||
import os.path
|
||||
@@ -96,9 +96,6 @@ def setup_ios_device_template(env: dict, opts: iOSOpts, target: str):
|
||||
'ac_cv_func_futimens=no',
|
||||
'ac_cv_func_utimensat=no',
|
||||
'ac_cv_func_shm_open_working_with_mmap=no',
|
||||
'ac_cv_func_pthread_jit_write_protect_np=no',
|
||||
'ac_cv_func_preadv=no',
|
||||
'ac_cv_func_pwritev=no',
|
||||
'mono_cv_sizeof_sunpath=104',
|
||||
'mono_cv_uscore=yes'
|
||||
]
|
||||
@@ -124,7 +121,13 @@ def setup_ios_device_template(env: dict, opts: iOSOpts, target: str):
|
||||
'-DSMALL_CONFIG', '-D_XOPEN_SOURCE', '-DHOST_IOS', '-DHAVE_LARGE_FILE_SUPPORT=1'
|
||||
]
|
||||
|
||||
LDFLAGS = [
|
||||
LDFLAGS = []
|
||||
|
||||
# https://github.com/mono/mono/issues/19393
|
||||
if os.environ.get('DISABLE_NO_WEAK_IMPORTS', '0') != '1':
|
||||
LDFLAGS += ['-Wl,-no_weak_imports']
|
||||
|
||||
LDFLAGS += [
|
||||
'-arch %s' % arch,
|
||||
'-framework', 'CoreFoundation',
|
||||
'-lobjc', '-lc++'
|
||||
@@ -222,9 +225,6 @@ def setup_ios_simulator_template(env: dict, opts: iOSOpts, target: str):
|
||||
'ac_cv_func_futimens=no',
|
||||
'ac_cv_func_utimensat=no',
|
||||
'ac_cv_func_shm_open_working_with_mmap=no',
|
||||
'ac_cv_func_pthread_jit_write_protect_np=no',
|
||||
'ac_cv_func_preadv=no',
|
||||
'ac_cv_func_pwritev=no',
|
||||
'mono_cv_uscore=yes'
|
||||
]
|
||||
|
||||
|
||||
2
linux.py
2
linux.py
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/python
|
||||
|
||||
from desktop import run_main
|
||||
|
||||
|
||||
8
llvm.py
8
llvm.py
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/python
|
||||
|
||||
import os
|
||||
import sys
|
||||
@@ -38,8 +38,8 @@ def make(opts: BaseOpts, target: str):
|
||||
|
||||
CMAKE_ARGS += [
|
||||
'-DCMAKE_EXE_LINKER_FLAGS="-static"',
|
||||
'-DCROSS_TOOLCHAIN_FLAGS_NATIVE=-DCMAKE_TOOLCHAIN_FILE=%s/external/llvm-project/llvm/cmake/modules/NATIVE.cmake' % opts.mono_source_root,
|
||||
'-DCMAKE_TOOLCHAIN_FILE=%s/external/llvm-project/llvm/cmake/modules/%s.cmake' % (opts.mono_source_root, mxe),
|
||||
'-DCROSS_TOOLCHAIN_FLAGS_NATIVE=-DCMAKE_TOOLCHAIN_FILE=%s/external/llvm/cmake/modules/NATIVE.cmake' % opts.mono_source_root,
|
||||
'-DCMAKE_TOOLCHAIN_FILE=%s/external/llvm/cmake/modules/%s.cmake' % (opts.mono_source_root, mxe),
|
||||
'-DLLVM_ENABLE_THREADS=Off',
|
||||
'-DLLVM_BUILD_EXECUTION_ENGINE=Off'
|
||||
]
|
||||
@@ -58,7 +58,7 @@ def make(opts: BaseOpts, target: str):
|
||||
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/external/llvm-project/llvm/cmake/modules/%s.cmake' % (opts.mono_source_root, mxe)
|
||||
dst_file='%s/external/llvm/cmake/modules/%s.cmake' % (opts.mono_source_root, mxe)
|
||||
)
|
||||
|
||||
if target in ['llvm32', 'llvmwin32']:
|
||||
|
||||
@@ -1,61 +0,0 @@
|
||||
import os
|
||||
|
||||
from os_utils import *
|
||||
|
||||
|
||||
def find_dotnet_cli():
|
||||
import os.path
|
||||
|
||||
for hint_dir in os.environ["PATH"].split(os.pathsep):
|
||||
hint_dir = hint_dir.strip('"')
|
||||
hint_path = os.path.join(hint_dir, "dotnet")
|
||||
if os.path.isfile(hint_path) and os.access(hint_path, os.X_OK):
|
||||
return hint_path
|
||||
|
||||
|
||||
def find_msbuild():
|
||||
import os.path
|
||||
import sys
|
||||
|
||||
hint_dirs = []
|
||||
if sys.platform == "darwin":
|
||||
hint_dirs[:0] = [
|
||||
"/Library/Frameworks/Mono.framework/Versions/Current/bin",
|
||||
"/usr/local/var/homebrew/linked/mono/bin",
|
||||
]
|
||||
|
||||
for hint_dir in hint_dirs:
|
||||
hint_path = os.path.join(hint_dir, "msbuild")
|
||||
if os.path.isfile(hint_path):
|
||||
return hint_path
|
||||
|
||||
for hint_dir in os.environ["PATH"].split(os.pathsep):
|
||||
hint_dir = hint_dir.strip('"')
|
||||
hint_path = os.path.join(hint_dir, "msbuild")
|
||||
if os.path.isfile(hint_path) and os.access(hint_path, os.X_OK):
|
||||
return hint_path
|
||||
|
||||
return None
|
||||
|
||||
|
||||
def build_solution(solution_path, build_config, extra_msbuild_args=[]):
|
||||
msbuild_args = []
|
||||
|
||||
dotnet_cli = find_dotnet_cli()
|
||||
|
||||
if dotnet_cli:
|
||||
msbuild_path = dotnet_cli
|
||||
msbuild_args += ["msbuild"] # `dotnet msbuild` command
|
||||
else:
|
||||
msbuild_path = find_msbuild()
|
||||
if msbuild_path is None:
|
||||
raise BuildError("Cannot find MSBuild executable")
|
||||
|
||||
print("MSBuild path: " + msbuild_path)
|
||||
|
||||
# Build solution
|
||||
|
||||
msbuild_args += [solution_path, "/restore", "/t:Build", "/p:Configuration=" + build_config]
|
||||
msbuild_args += extra_msbuild_args
|
||||
|
||||
run_command(msbuild_path, msbuild_args, name="msbuild")
|
||||
2
osx.py
2
osx.py
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/python
|
||||
|
||||
from desktop import run_main
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/python
|
||||
|
||||
|
||||
def main(raw_args):
|
||||
import os
|
||||
@@ -23,6 +24,7 @@ def main(raw_args):
|
||||
|
||||
patches = [
|
||||
'%s/sdks/builds/fix-emscripten-8511.diff' % mono_source_root,
|
||||
'%s/sdks/builds/emscripten-pr-8457.diff' % mono_source_root
|
||||
]
|
||||
|
||||
from subprocess import Popen
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/python
|
||||
|
||||
|
||||
def main(raw_args):
|
||||
@@ -29,8 +29,7 @@ def main(raw_args):
|
||||
'fix-mono-android-tkill.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',
|
||||
'mono_ios_asl_log_deprecated.diff'
|
||||
]
|
||||
|
||||
if os.path.isfile(os.path.join(mono_source_root, 'mono/tools/offsets-tool/offsets-tool.py')):
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/python
|
||||
|
||||
import sys
|
||||
|
||||
|
||||
2
wasm.py
2
wasm.py
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/python
|
||||
|
||||
import os
|
||||
import os.path
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/python
|
||||
|
||||
from desktop import run_main
|
||||
|
||||
|
||||
Reference in New Issue
Block a user