for "build" config, import corlib common sources at unix instead (#11989)
[mono-project.git] / sdks / README.md
blob70a0cc37d991662cd5469a8f7b43dc54c440fc3a
1 This project provides build scripts and sample apps for Mono targeting its supported platforms. Supported are Android, iOS and WebAssembly.
3 # Build instructions
5 ## Dependencies
7  - automake 1.16.1
9    if you have already built before using a previous version of automake you may need to clean the repo.
11    ```
12       git clean -xffd
13    ```
15    The previous should be sufficient but if that does not work then try hard resetting
17    ```
18    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
19    ```
21 - [ninja build system](https://ninja-build.org)
23   - Getting Ninja
25     You can [download the Ninja binary](https://github.com/ninja-build/ninja/releases) or [find
26 it in your system's package manager](https://github.com/ninja-build/ninja/wiki/Pre-built-Ninja-packages)
29 ## Setup
31 Copy `Make.config.sample` to `Make.config` and edit the new file to disable building the target you're not interested in.
32 Unless you have a very particular need, the BCL build should be left enabled as it's needed by all test runners.
34 ## Targets
36 To build Mono for Android, iOS or WebAssembly, the build scripts can be found in `sdks/builds/`. There are 5 predefined targets that can be invoked:
38  - toolchain: setup the toolchain so we can cross-compile the runtime for the appropriate platform
39  - configure: configure the build of Mono
40  - build: build Mono
41  - package: provide a package of the built Mono, the result can be found in `sdks/builds/out/`
42  - clean: clean the Mono build directory
44 The `make` targets are as follow:
46 ```
47 # Android
48 make -C builds {toolchain,configure,build,package,clean}-android-{armeabi,armeabi-v7a,arm64-v8a,x86,x86_64}
50 # iOS
51 make -C builds {toolchain,configure,build,package,clean}-ios-{target{32,64},sim{32,64},cross{32,64}}
53 # WebAssembly
54 make -C builds {toolchain,configure,build,package,clean}-wasm-runtime
55 ```
57 # Testing instructions
59 ## WebAssembly
61 First, ensure the bcl and wasm-runtime have been built and packaged in the `builds` directory:
63 ```
64 make build-wasm-runtime package-wasm-runtime
65 make build-bcl package-bcl
66 ````
68 Go to the `wasm` directory for building and testing WebAssembly. Right now the following targets are available:
70 - do-runtime: Encompasses all the previous steps
71 - build: Build the test runner and test suites
72 - run-all-mini: Run mini test suite
73 - run-all-corlib: Run corlib test suite
74 - run-all-system: Run System test suite
75 - run-all-system-core: Run System.Core test suite
76 - run-all-binding: Run bindings test suite
78 For bcl or runtime changes, you must manually run the corresponding build/package steps in `builds`.
79 For test suite changes, it's enough to just rerun the local target.
81 # Dependencies
83 | Project     | Dependencies        |
84 | ----------- | ------------------- |
85 | Android     | Android SDK and NDK |
86 | iOS         | Xcode               |
87 | WebAssembly |                     |
89 See `sdks/versions.mk` for specific version numbers, and `sdks/paths.mk` for where they should be installed. These dependencies will not be installed as part of the build process, and will be expected to be present; an error will be triggered if it's not the case. If you need an additional version, please do contact us or submit a pull-request against [mono/mono](https://github.com/mono/mono).