msx-music demo song #7824
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build furnace | |
on: | |
push: | |
branches: [master, theUltimateFix] | |
pull_request: | |
branches: master | |
defaults: | |
run: | |
shell: bash | |
env: | |
BUILD_TYPE: Debug | |
jobs: | |
build: | |
strategy: | |
matrix: | |
config: | |
- { name: 'Windows MSVC x86', os: windows-latest, compiler: msvc, arch: x86 } | |
- { name: 'Windows MSVC x86_64', os: windows-latest, compiler: msvc, arch: x86_64 } | |
#- { name: 'Windows MinGW x86', os: ubuntu-20.04, compiler: mingw, arch: x86 } | |
#- { name: 'Windows MinGW x86_64', os: ubuntu-20.04, compiler: mingw, arch: x86_64 } | |
- { name: 'macOS x86_64', os: macos-13, arch: x86_64 } | |
- { name: 'macOS ARM', os: macos-latest, arch: arm64 } | |
- { name: 'Linux x86_64', os: ubuntu-20.04, arch: x86_64 } | |
#- { name: 'Linux ARM', os: ubuntu-18.04, arch: armhf } | |
fail-fast: true | |
name: ${{ matrix.config.name }} | |
runs-on: ${{ matrix.config.os }} | |
steps: | |
- name: Checkout | |
uses: actions/[email protected] | |
with: | |
submodules: recursive | |
- name: Set Windows arch identifiers | |
id: windows-identify | |
if: ${{ matrix.config.compiler == 'msvc' || matrix.config.compiler == 'mingw' }} | |
run: | | |
vswhere_target="${{ matrix.config.arch }}" | |
msvc_target="${{ matrix.config.arch }}" | |
mingw_target="${{ matrix.config.arch }}" | |
if [ '${{ matrix.config.arch }}' == 'x86' ]; then | |
msvc_target="Win32" | |
elif [ '${{ matrix.config.arch }}' == 'x86_64' ]; then | |
vswhere_target="amd64" | |
msvc_target="x64" | |
fi | |
if [ '${{ matrix.config.compiler }}' == 'msvc' ]; then | |
echo "vswhere target: ${vswhere_target}" | |
echo "MSVC target: ${msvc_target}" | |
else | |
echo "MinGW cross target: ${mingw_target}" | |
fi | |
echo "vswhere-target=${vswhere_target}" >> $GITHUB_OUTPUT | |
echo "msvc-target=${msvc_target}" >> $GITHUB_OUTPUT | |
echo "mingw-target=${mingw_target}" >> $GITHUB_OUTPUT | |
- name: Set package identifier | |
id: package-identify | |
run: | | |
package_name="furnace-${GITHUB_SHA}" | |
package_ext="" | |
if [ '${{ runner.os }}' == 'Windows' ] || [ '${{ matrix.config.compiler }}' == 'mingw' ]; then | |
package_name="${package_name}-Windows" | |
if [ '${{ matrix.config.compiler }}' == 'mingw' ]; then | |
package_name="${package_name}-MinGW" | |
else | |
package_name="${package_name}-MSVC" | |
fi | |
package_name="${package_name}-${{ matrix.config.arch }}" | |
package_ext="" # Directory, uploading will automatically zip it | |
elif [ '${{ runner.os }}' == 'macOS' ]; then | |
package_name="${package_name}-macOS-${{ matrix.config.arch }}" | |
package_ext=".dmg" | |
else | |
package_name="${package_name}-Linux-${{ matrix.config.arch }}" | |
package_ext=".tar.gz" | |
fi | |
echo "Package identifier: ${package_name}" | |
echo "Package file: ${package_name}${package_ext}" | |
echo "id=${package_name}" >> $GITHUB_OUTPUT | |
echo "filename=${package_name}${package_ext}" >> $GITHUB_OUTPUT | |
- name: Set build cores amount | |
id: build-cores | |
run: | | |
# https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources | |
amount=2 | |
if [ '${{ runner.os }}' == 'macOS' ]; then | |
amount=3 | |
fi | |
echo "Amount of cores we can build with: ${amount}" | |
echo "amount=${amount}" >> $GITHUB_OUTPUT | |
- name: Setup Toolchain [Windows MSVC] | |
if: ${{ matrix.config.compiler == 'msvc' }} | |
uses: lunathir/gha-setup-vsdevenv@avoid-deprecation-warnings | |
with: | |
arch: ${{ steps.windows-identify.outputs.vswhere-target }} | |
- name: Setup Toolchain [Windows MinGW] | |
if: ${{ matrix.config.compiler == 'mingw' }} | |
run: | | |
sudo apt update | |
sudo apt install \ | |
mingw-w64 \ | |
mingw-w64-tools | |
- name: Install Dependencies [Linux x86_64] | |
if: ${{ runner.os == 'Linux' && matrix.config.compiler != 'mingw' && matrix.config.arch == 'x86_64' }} | |
run: | | |
sudo apt update | |
sudo apt install \ | |
libsdl2-dev \ | |
libfmt-dev \ | |
librtmidi-dev \ | |
libsndfile1-dev \ | |
zlib1g-dev \ | |
libjack-jackd2-dev \ | |
gettext | |
- name: Install Dependencies [Linux armhf] | |
if: ${{ runner.os == 'Linux' && matrix.config.compiler != 'mingw' && matrix.config.arch == 'armhf' }} | |
run: | | |
sudo sed -ri "s/^deb /deb [arch=amd64] /" /etc/apt/sources.list | |
echo "deb [arch=armhf] http://ports.ubuntu.com/ubuntu-ports/ bionic main universe" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=armhf] http://ports.ubuntu.com/ubuntu-ports/ bionic-updates main universe" | sudo tee -a /etc/apt/sources.list | |
sudo dpkg --add-architecture armhf | |
sudo apt update | |
sudo apt install \ | |
crossbuild-essential-armhf \ | |
appstream \ | |
gettext | |
sudo apt install \ | |
libsdl2-dev:armhf \ | |
libfmt-dev:armhf \ | |
librtmidi-dev:armhf \ | |
libsndfile1-dev:armhf \ | |
zlib1g-dev:armhf \ | |
libjack-jackd2-dev:armhf | |
ls /usr/arm-linux-gnueabihf/lib | |
- name: Build Language Files | |
if: ${{ runner.os == 'Linux' && matrix.config.compiler != 'mingw' }} | |
run: | | |
./scripts/build-po.sh | |
- name: Configure | |
run: | | |
export USE_WAE=ON | |
export CMAKE_EXTRA_ARGS=() | |
if [ '${{ matrix.config.compiler }}' == 'msvc' ]; then | |
CMAKE_EXTRA_ARGS+=('-DCMAKE_GENERATOR_PLATFORM=${{ steps.windows-identify.outputs.msvc-target }}') | |
# Force static linking | |
# 1. Make MSVC runtime configurable | |
CMAKE_EXTRA_ARGS+=('-DCMAKE_POLICY_DEFAULT_CMP0091=NEW') | |
# 2. Use static (debug) runtime | |
if [ '${{ env.BUILD_TYPE }}' == 'Debug' ]; then | |
CMAKE_EXTRA_ARGS+=('-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreadedDebug') | |
else | |
CMAKE_EXTRA_ARGS+=('-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded') | |
fi | |
elif [ '${{ matrix.config.compiler }}' == 'mingw' ]; then | |
CMAKE_EXTRA_ARGS+=('-DCMAKE_TOOLCHAIN_FILE=scripts/Cross-MinGW-${{ steps.windows-identify.outputs.mingw-target }}.cmake') | |
if [ '${{ matrix.config.arch }}' == 'x86' ]; then | |
CMAKE_EXTRA_ARGS+=('-DSUPPORT_XP=ON') | |
fi | |
elif [ '${{ runner.os }}' == 'macOS' ]; then | |
if [ '${{ matrix.config.arch }}' == 'arm64' ]; then | |
CMAKE_EXTRA_ARGS+=('-DCMAKE_OSX_DEPLOYMENT_TARGET="11.0"' '-DCMAKE_OSX_ARCHITECTURES=arm64' '-DMAKE_BUNDLE=ON') | |
else | |
CMAKE_EXTRA_ARGS+=('-DCMAKE_OSX_DEPLOYMENT_TARGET="10.9"' '-DCMAKE_OSX_ARCHITECTURES=x86_64' '-DMAKE_BUNDLE=ON' '-DCMAKE_C_FLAGS=-march=core2' '-DCMAKE_CXX_FLAGS=-march=core2') | |
fi | |
elif [ '${{ runner.os }}' == 'Linux' ] && [ '${{ matrix.config.arch }}' == 'armhf' ]; then | |
CMAKE_EXTRA_ARGS+=('-DCMAKE_TOOLCHAIN_FILE=scripts/Cross-Linux-armhf.cmake') | |
fi | |
cmake \ | |
-B ${PWD}/build \ | |
-DCMAKE_INSTALL_PREFIX=/usr \ | |
-DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ | |
-DWARNINGS_ARE_ERRORS=${USE_WAE} \ | |
-DWITH_DEMOS=OFF -DWITH_INSTRUMENTS=OFF -DWITH_WAVETABLES=OFF \ | |
"${CMAKE_EXTRA_ARGS[@]}" | |
- name: Build | |
run: | | |
cmake \ | |
--build ${PWD}/build \ | |
--config ${{ env.BUILD_TYPE }} \ | |
--parallel ${{ steps.build-cores.outputs.amount }} | |
- name: Package [Windows] | |
if: ${{ runner.os == 'Windows' || matrix.config.compiler == 'mingw' }} | |
run: | | |
binPath=build | |
if [ '${{ matrix.config.compiler }}' == 'msvc' ]; then | |
binPath="${binPath}/${{ env.BUILD_TYPE }}" | |
fi | |
# always strip on MinGW as it generate massive artifacts | |
#if [ '${{ matrix.config.compiler }}' == 'mingw' ]; then | |
# # arch-specific strip prefix | |
# # TODO maybe extract from cross toolchain files? | |
# toolPrefix="-w64-mingw32-" | |
# if [ '${{ matrix.config.arch }}' == 'x86_64' ]; then | |
# toolPrefix="x86_64${toolPrefix}" | |
# else | |
# toolPrefix="i686${toolPrefix}" | |
# fi | |
# ${toolPrefix}strip -s "${binPath}/furnace.exe" | |
#fi | |
mkdir ${{ steps.package-identify.outputs.filename }} | |
pushd ${{ steps.package-identify.outputs.filename }} | |
cp -v ../LICENSE LICENSE.txt | |
cp -v ../res/releaseReadme/unstable-win.txt README.txt | |
cp -vr ../po/locale locale | |
cp -vr ../papers ../${binPath}/furnace.exe ./ | |
if [ '${{ matrix.config.compiler }}' == 'msvc' ]; then | |
if [ -e ../${binPath}/furnace.pdb ]; then | |
cp -v ../${binPath}/furnace.pdb ./ | |
fi | |
fi | |
sha256sum ../${binPath}/furnace.exe > checksum.txt | |
popd | |
- name: Package [macOS] | |
if: ${{ runner.os == 'macOS' }} | |
run: | | |
pushd build | |
echo "preparing bundle" | |
mkdir -p Furnace.app/Contents/Resources | |
cp -v -r ../po/locale Furnace.app/Contents/Resources/locale | |
cp -v ../res/icon.icns Furnace.app/Contents/Resources/Furnace.icns | |
codesign --deep -f -s - Furnace.app | |
echo "making dirs" | |
mkdir new | |
echo "copying" | |
cp -v -r Furnace.app new/Furnace.app | |
ln -s /Applications new/Applications | |
echo "synchronizing" | |
sync | |
echo "copying extra stuff" | |
cp -v ../LICENSE new/LICENSE.txt | |
cp -v ../res/releaseReadme/stable-mac.txt new/README | |
cp -v -r ../demos new/demos | |
cp -v -r ../instruments new/instruments | |
cp -v -r ../wavetables new/wavetables | |
cd new | |
wget https://tildearrow.org/furnace/doc/latest/manual.pdf | |
cd .. | |
echo "creating new image" | |
retries=0 | |
while ! hdiutil create -srcfolder new -volname Furnace -format UDZO -fs HFS+ furnace.dmg; do | |
echo "TRYING AGAIN..." | |
retries=$((retries+1)) | |
if [ $retries -gt 5 ]; then | |
echo "OH NO, WE'VE FAILED..." | |
exit 1 | |
break | |
fi | |
sleep 5 | |
done | |
mv furnace.dmg ../${{ steps.package-identify.outputs.filename }} | |
popd | |
- name: Package [Linux] | |
if: ${{ runner.os == 'Linux' && matrix.config.compiler != 'mingw' }} | |
run: | | |
#if [ '${{ env.BUILD_TYPE }}' == 'Release' ]; then | |
# strip -s build/furnace | |
#fi | |
mkdir -p target/furnace | |
make -C ${PWD}/build DESTDIR=${PWD}/target/furnace install | |
pushd target/furnace | |
cp -v ../../res/logo.png .DirIcon | |
cd usr | |
mv bin/furnace .. | |
rmdir bin | |
rm -r share/applications | |
rm -r share/doc | |
rm -r share/icons | |
rm -r share/licenses | |
rm -r share/metainfo | |
rm -r share/mime | |
mv share/locale .. | |
rmdir share | |
cd .. | |
cp ../../LICENSE . | |
cp ../../res/releaseReadme/unstable-other.txt . | |
cp -r ../../papers papers | |
rmdir usr | |
popd | |
cd target | |
tar -zcv -f ../${{ steps.package-identify.outputs.filename }} furnace | |
- name: Upload artifact | |
if: ${{ github.repository == 'tildearrow/furnace' && github.ref_name == 'master' }} | |
uses: actions/[email protected] | |
with: | |
name: ${{ steps.package-identify.outputs.id }} | |
path: ${{ steps.package-identify.outputs.filename }} | |
- name: Upload 30xx artifact | |
if: ${{ github.repository == 'tildearrow/furnace' && github.ref_name == 'theUltimateFix' }} | |
uses: actions/[email protected] | |
with: | |
name: ${{ steps.package-identify.outputs.id }} | |
path: ${{ steps.package-identify.outputs.filename }} |