mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-10 08:00:05 +00:00
This works on all OSes, making it far simpler for any developer to jump in. Just install vcpkg, run "vcpkg install" in our root, and you have all the dependencies.
200 lines
6.2 KiB
YAML
200 lines
6.2 KiB
YAML
name: Release (Linux)
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
survey_key:
|
|
required: false
|
|
type: string
|
|
default: ""
|
|
|
|
jobs:
|
|
linux:
|
|
name: Linux (Generic)
|
|
|
|
runs-on: ubuntu-latest
|
|
container:
|
|
# manylinux2014 is based on CentOS 7, but already has a lot of things
|
|
# installed and preconfigured. It makes it easier to build OpenTTD.
|
|
image: quay.io/pypa/manylinux2014_x86_64
|
|
|
|
steps:
|
|
- name: Download source
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: internal-source
|
|
|
|
- name: Unpack source
|
|
run: |
|
|
tar -xf source.tar.gz --strip-components=1
|
|
|
|
# curl is too old for most of the tools to work properly. For example,
|
|
# rust-toolchain doesn't work properly, neither vcpkg caching.
|
|
# The easier solution here is to upgrade curl.
|
|
- name: Update curl
|
|
run: |
|
|
yum install -y \
|
|
openssl-devel \
|
|
# EOF
|
|
|
|
mkdir /curl
|
|
cd /curl
|
|
curl -o curl-7.81.0.zip https://curl.se/download/curl-7.81.0.zip
|
|
unzip curl-7.81.0.zip
|
|
cd curl-7.81.0
|
|
./configure --with-ssl --with-zlib --prefix=/usr --libdir=/usr/lib64
|
|
make -j $(nproc)
|
|
make install
|
|
|
|
- name: Install Rust toolchain
|
|
uses: dtolnay/rust-toolchain@stable
|
|
|
|
- name: Enable Rust cache
|
|
uses: Swatinem/rust-cache@v2
|
|
|
|
- name: Setup vcpkg caching
|
|
uses: actions/github-script@v6
|
|
with:
|
|
script: |
|
|
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
|
|
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
|
|
core.exportVariable('VCPKG_BINARY_SOURCES', 'clear;x-gha,readwrite')
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
echo "::group::Install system dependencies"
|
|
# perl-IPC-Cmd, wget, and zip are needed to run vcpkg.
|
|
# autoconf-archive is needed to build ICU.
|
|
yum install -y \
|
|
autoconf-archive \
|
|
perl-IPC-Cmd \
|
|
wget \
|
|
zip \
|
|
# EOF
|
|
|
|
# aclocal looks first in /usr/local/share/aclocal, and if that doesn't
|
|
# exist only looks in /usr/share/aclocal. We have files in both that
|
|
# are important. So copy the latter to the first, and we are good to
|
|
# go.
|
|
cp /usr/share/aclocal/* /usr/local/share/aclocal/
|
|
echo "::endgroup::"
|
|
|
|
# The yum variant of fluidsynth depends on all possible audio drivers,
|
|
# like jack, ALSA, pulseaudio, etc. This is not really useful for us,
|
|
# as we route the output of fluidsynth back via our sound driver, and
|
|
# as such do not use these audio driver outputs at all.
|
|
# The vcpkg variant of fluidsynth depends on ALSA. Similar issue here.
|
|
# So instead, we compile fluidsynth ourselves, with as few
|
|
# dependencies as possible. We do it before anything else is installed,
|
|
# to make sure it doesn't pick up on any of the drivers.
|
|
echo "::group::Install fluidsynth"
|
|
wget https://github.com/FluidSynth/fluidsynth/archive/v2.3.3.tar.gz
|
|
tar xf v2.3.3.tar.gz
|
|
(
|
|
cd fluidsynth-2.3.3
|
|
mkdir build
|
|
cd build
|
|
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=/usr
|
|
cmake --build . -j $(nproc)
|
|
cmake --install .
|
|
)
|
|
|
|
# The container we use is old enough, that it doesn't know SHF_COMPRESSED.
|
|
# But, breakpad needs this symbol to exist. So we patch it in our system
|
|
# libraries.
|
|
(
|
|
cd /
|
|
patch -p1 < ${GITHUB_WORKSPACE}/os/linux/shf-compressed.patch
|
|
)
|
|
echo "::endgroup::"
|
|
|
|
echo "::group::Install audio drivers"
|
|
# These audio libs are to make sure the SDL version of vcpkg adds
|
|
# sound-support; these libraries are not added to the resulting
|
|
# binary, but the headers are used to enable them in SDL.
|
|
yum install -y \
|
|
alsa-lib-devel \
|
|
jack-audio-connection-kit-devel \
|
|
pulseaudio-libs-devel \
|
|
# EOF
|
|
echo "::endgroup::"
|
|
|
|
# We use vcpkg for our dependencies, to get more up-to-date version.
|
|
echo "::group::Install vcpkg and dependencies"
|
|
|
|
git clone https://github.com/microsoft/vcpkg /vcpkg
|
|
|
|
(
|
|
cd /vcpkg
|
|
./bootstrap-vcpkg.sh -disableMetrics
|
|
)
|
|
|
|
# Make Python3 available for other packages. This needs to be done
|
|
# first, as otherwise dependencies fail to build because Python3 is
|
|
# not available.
|
|
(
|
|
cd /
|
|
|
|
/vcpkg/vcpkg install python3
|
|
ln -sf /vcpkg/installed/x64-linux/tools/python3/python3.[0-9][0-9] /usr/bin/python3
|
|
)
|
|
echo "::endgroup::"
|
|
|
|
echo "::group::Install breakpad dependencies"
|
|
cargo install dump_syms
|
|
echo "::endgroup::"
|
|
|
|
- name: Install GCC problem matcher
|
|
uses: ammaraskar/gcc-problem-matcher@master
|
|
|
|
- name: Build
|
|
run: |
|
|
mkdir -p build
|
|
cd build
|
|
|
|
echo "::group::CMake"
|
|
cmake ${GITHUB_WORKSPACE} \
|
|
-DCMAKE_TOOLCHAIN_FILE=/vcpkg/scripts/buildsystems/vcpkg.cmake \
|
|
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
|
-DOPTION_SURVEY_KEY=${{ inputs.survey_key }} \
|
|
-DOPTION_PACKAGE_DEPENDENCIES=ON \
|
|
# EOF
|
|
echo "::endgroup::"
|
|
|
|
echo "::group::Build"
|
|
echo "Running on $(nproc) cores"
|
|
cmake --build . -j $(nproc) --target openttd
|
|
echo "::endgroup::"
|
|
|
|
- name: Create breakpad symbols
|
|
run: |
|
|
cd build
|
|
dump_syms ./openttd --inlines --store symbols
|
|
|
|
- name: Create bundles
|
|
run: |
|
|
cd ${GITHUB_WORKSPACE}/build
|
|
echo "::group::Run CPack"
|
|
cpack
|
|
echo "::endgroup::"
|
|
|
|
echo "::group::Cleanup"
|
|
# Remove the sha256 files CPack generates; we will do this ourself at
|
|
# the end of this workflow.
|
|
rm -f bundles/*.sha256
|
|
echo "::endgroup::"
|
|
|
|
- name: Store bundles
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: openttd-linux-generic
|
|
path: build/bundles
|
|
retention-days: 5
|
|
|
|
- name: Store symbols
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: symbols-linux-generic
|
|
path: build/symbols
|
|
retention-days: 5
|