Expand CI coverage and move actions into scripts
This change makes a couple changes to the CI workflow: - Adds more compiler coverage: - gcc to MacOS (see note below) - 32 and 64bit gcc and clang to Windows - With more builds, this separates them into per-OS workflow YAMLs (laying the foundation for more build environments: BSD? DOS? ... ) - Moves all functional commands from GitHub-syntax-YAML into scripts, which (besides eliminating repeated code), now serve a dual-purpose of being runnable outside of GitHub. - One script takes care of listing dependent packages for the given runtime environment - Another script takes care of configuring and building These scripts can be leveraged by a nightly build & asset generator in the future. Note: adding GCC to MacOS is now "correct" from a build perspective, however to keep this PR focussed on the CI workflow I have not included the coreMIDI / AppleBlocks code-fixes here (so for now, the gcc macOS builds will fail; we will merge the coreMIDI / AppleBlocks later depending on how upstream wants to handle it).
This commit is contained in:
parent
b87966cd11
commit
86aabad5da
9 changed files with 1176 additions and 144 deletions
110
scripts/build.md
Normal file
110
scripts/build.md
Normal file
|
@ -0,0 +1,110 @@
|
|||
# DOSBox build script
|
||||
|
||||
A helper-script that builds DOSBox with varying compilers, release types, and versions
|
||||
on MacOS, Linux, and Windows.
|
||||
|
||||
A second script, **list-build-dependencies.sh** prints a list of package and library
|
||||
dependencies used to build and link DOSBox, customized for your hardware, operating system,
|
||||
and selected compiler and its version. You can use this script's output to install
|
||||
those necessary packages.
|
||||
|
||||
## Requirements
|
||||
|
||||
- **Windows newer than XP**
|
||||
- **NTFS-based C:**, because msys2 doesn't work on FAT filesystems
|
||||
- **Chocolately**, to install msys2
|
||||
|
||||
- **MacOS** 10.x
|
||||
- **brew**, as the package manager
|
||||
|
||||
- **Ubuntu** 16.04 or newer
|
||||
- **apt**, as the package manager
|
||||
- **sudo**, to permit installation of depedencies (optional)
|
||||
|
||||
- **Build dependencies (all operating systems)**
|
||||
- Per those listed by the accompanying list-build-dependencies.sh script
|
||||
|
||||
## Windows Installation and Usage
|
||||
|
||||
1. Download and install Chocolatey: https://chocolatey.org/install
|
||||
1. Open a console and run Cholocatey's command line interface (CLI) to install msys2:
|
||||
`choco install msys2 git --no-progress`
|
||||
|
||||
```
|
||||
Chocolatey v0.10.15
|
||||
Installing the following packages:
|
||||
msys2 git
|
||||
By installing you accept licenses for the packages.
|
||||
|
||||
msys2 v20180531.0.0 [Approved]
|
||||
msys2 package files install completed. Performing other installation steps.
|
||||
Installing to: C:\tools\msys64
|
||||
Extracting 64-bit C:\ProgramData\chocolatey\lib\msys2\tools\msys2-base-x86_64-20180531.tar.xz to C:\tools\msys64...
|
||||
C:\tools\msys64
|
||||
Extracting C:\tools\msys64\msys2-base-x86_64-20180531.tar to C:\tools\msys64...
|
||||
C:\tools\msys64
|
||||
Starting initialization via msys2_shell.cmd
|
||||
PATH environment variable does not have C:\tools\msys64 in it. Adding...
|
||||
```
|
||||
|
||||
1. Open a new console and clone the DOSBox staging repository:
|
||||
`git clone https://github.com/dreamer/dosbox-staging.git`
|
||||
|
||||
1. [optional] Install the build tools and package dependencies, if not yet done so:
|
||||
``` shell
|
||||
cd dosbox-staging
|
||||
SET CWD=%cd%
|
||||
bash -lc "pacman -S --noconfirm $($CWD/scripts/list-build-dependencies.sh)"
|
||||
```
|
||||
|
||||
1. Launch the build script with default settings:
|
||||
``` shell
|
||||
cd dosbox-staging
|
||||
SET CWD=%cd%
|
||||
bash -lc "$CWD/scripts/build.sh --bin-path /mingw64/bin --src-path $CWD"
|
||||
```
|
||||
|
||||
## MacOS Installation and Usage
|
||||
|
||||
1. Download and install brew: https://brew.sh
|
||||
1. Install git: `brew install git`
|
||||
1. Clone the repository: `git clone https://github.com/dreamer/dosbox-staging.git`
|
||||
1. Change directories into the repo: `cd dosbox-staging`
|
||||
1. [optional] Install the build tools and package dependencies, if not yet done so:
|
||||
``` shell
|
||||
brew update
|
||||
brew install $(./scripts/list-build-dependencies.sh)
|
||||
```
|
||||
1. Build DOSBox: `./scripts/build.sh`
|
||||
|
||||
## Linux (Ubuntu/Debian-based) Installation and Usage
|
||||
|
||||
1. Install git: `sudo apt install -y git`
|
||||
1. Clone the repository: `git clone https://github.com/dreamer/dosbox-staging.git`
|
||||
1. Change directories into the repo: `cd dosbox-staging`
|
||||
1. [optional] Install the build tools and package dependencies, if not yet done so:
|
||||
``` shell
|
||||
sudo apt update -y
|
||||
sudo apt install -y $(./scripts/list-build-dependencies.sh)
|
||||
```
|
||||
1. Build DOSBox: `./scripts/build.sh`
|
||||
|
||||
## Additional Tips
|
||||
|
||||
The compiler, version, and bit-depth can be selected by passing the following common
|
||||
options to the **list-build-dependencies.sh** and **build.sh** scripts:
|
||||
* `--compiler clang`, to use CLang instead of GCC
|
||||
* `--compiler-version 8`, to use a specific version of compiler (if available in your package manager)
|
||||
* `--bit-depth 32`, to build a 32-bit binary instead of 64-bit
|
||||
|
||||
After building, your binary will reside inside the src/ directory.
|
||||
|
||||
Build flags you might be interested in:
|
||||
* `--release debug`, to build a binary containing debug symbols (instead of **fast** or **small**)
|
||||
* `--lto`, perform optimizations across the entire object space instead of per-file (Only available on Mac and Linux)
|
||||
|
||||
The above flags are othogonal and thus can be mixed-and-matched as desired.
|
||||
|
||||
If you want to run multiple back-to-back builds from the same directory with different settings then
|
||||
add the `--clean` flag to ensure previous objects and binaries are removed.
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue