-
Notifications
You must be signed in to change notification settings - Fork 47
270 lines (265 loc) · 9.48 KB
/
build.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
name: NSFPlay 3 Builds
on:
push:
branches: [ "nsfplay3" ]
pull_request:
branches: [ "nsfplay3" ]
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build-msvc:
name: Windows MSVC
runs-on: windows-2019
steps:
- name: Checkout Files
uses: actions/checkout@v4
- name: Setup MSVC
uses: microsoft/setup-msbuild@v2
- name: wxWidgets Cache Key
shell: pwsh
run: echo "WXHASH=$($(git submodule status wx) -replace '\s','')" >> $env:GITHUB_ENV
- name: Cache wxWidgets
id: cache-wx
uses: actions/cache@v4
with:
path: |
wxlib/lib
wxlib/include
key: wx-msvc-${{ env.WXHASH }}
- name: Build wxWidgets
if: steps.cache-wx.outputs.cache-hit != 'true'
shell: cmd
run: |
echo on
git submodule init
git submodule update --depth 1
cd wx
git submodule init
git submodule update --depth 1
cd ..
set WXB_NODEBUG=1
set WXB_NOPAUSE=1
wxlib.bat
- name: Build 64-bit
run: msbuild nsfplay.sln -t:rebuild -property:Configuration=Release -property:Platform=x64
- name: Build 32-bit
run: msbuild nsfplay.sln -t:rebuild -property:Configuration=Release -property:Platform=x86
- name: Prepare Artifacts
shell: pwsh
run: |
mkdir artifact64
cp nsfplay.txt artifact64
cp output/x64/Release/nsfplay.exe artifact64
cp output/x64/Release/nsfplac.exe artifact64
cp output/Win32/Release/nsfplay.dll artifact64
mkdir artifact32
cp nsfplay.txt artifact32
cp output/Win32/Release/nsfplay.exe artifact32
cp output/Win32/Release/nsfplac.exe artifact32
cp output/Win32/Release/nsfplay.dll artifact32
echo "BUILD_TAG=$(git log -1 --format="%ad--%h" --date=format-local:"%Y-%m-%d-%H%M%S")" >> $env:GITHUB_ENV
- name: Upload 64-bit Artifact
uses: actions/upload-artifact@v4
with:
name: nsfplay3-win64--${{ env.BUILD_TAG }}
path: artifact64/
- name: Upload 32-bit Artifact
uses: actions/upload-artifact@v4
with:
name: nsfplay3-win32--${{ env.BUILD_TAG }}
path: artifact32/
build-msys2:
name: Windows MSYS2
runs-on: windows-latest
steps:
- name: Checkout Files
uses: actions/checkout@v4
- name: Setup MSYS2
uses: msys2/setup-msys2@v2
with:
msystem: UCRT64
install: git make mingw-w64-ucrt-x86_64-gcc mingw-w64-i686-gcc mingw-w64-ucrt-x86_64-cmake mingw-w64-i686-cmake
- name: wxWidgets Cache Key
shell: pwsh
run: echo "WXHASH=$($(git submodule status wx) -replace '\s','')" >> $env:GITHUB_ENV
- name: Cache wxWidgets
id: cache-wx
uses: actions/cache@v4
with:
path: |
wxlib/lib
wxlib/include
key: wx-msys2-${{ env.WXHASH }}
- name: Build wxWidgets
if: steps.cache-wx.outputs.cache-hit != 'true'
shell: msys2 {0}
run: |
export WXL_CMAKEDIR=make64
make wxlib
export PATH="/mingw32/bin:$PATH"
export WXL_CMAKEDIR=make32
make wxlib
- name: Make 64-bit
shell: msys2 {0}
run: |
export OUTDIR=output/make64 INTDIR=intermediate/make64
make cmd nsfplay
- name: Make 32-bit
shell: msys2 {0}
run: |
export PATH="/mingw32/bin:$PATH"
export WXL_LIBDIR=gcc_lib
export OUTDIR=output/make32 INTDIR=intermediate/make32
make cmd nsfplay winamp
- name: Prepare Artifacts
shell: pwsh
run: |
mkdir artifact64
cp nsfplay.txt artifact64
cp output/make64/nsfplay.exe artifact64
cp output/make64/nsfplac.exe artifact64
cp output/make32/nsfplay.dll artifact64
mkdir artifact32
cp nsfplay.txt artifact32
cp output/make32/nsfplay.exe artifact32
cp output/make32/nsfplac.exe artifact32
cp output/make32/nsfplay.dll artifact32
echo "BUILD_TAG=$(git log -1 --format="%ad--%h" --date=format-local:"%Y-%m-%d-%H%M%S")" >> $env:GITHUB_ENV
- name: Upload 64-bit Artifact
uses: actions/upload-artifact@v4
with:
name: nsfplay3-win64-ucrt--${{ env.BUILD_TAG }}
path: artifact64/
- name: Upload 32-bit Artifact
uses: actions/upload-artifact@v4
with:
name: nsfplay3-win32-mingw--${{ env.BUILD_TAG }}
path: artifact32/
build-ubuntu:
name: Ubuntu
runs-on: ubuntu-latest
steps:
- name: Checkout Files
uses: actions/checkout@v4
- name: Setup Ubuntu
run: |
sudo apt-get update
sudo apt-get install git make gcc cmake libgtk-3-dev
- name: wxWidgets Cache Key
run: echo "WXHASH=$(git submodule status wx | tr -d '[:blank:]')" >> $GITHUB_ENV
- name: Cache wxWidgets
id: cache-wx
uses: actions/cache@v4
with:
path: |
wxlib/make
wx/include
key: wx-ubuntu-${{ env.WXHASH }}
# Cache needs the source include because wx-config does not reference the cmake --install
# directories, only the source build for some reason?
- name: Build wxWidgets
if: steps.cache-wx.outputs.cache-hit != 'true'
run: |
make wxlib
rm -rf wxlib/make/libs
# Remove libs folder to keep cache smaller. It's just temporary build data.
- name: Make
run: make cmd nsfplay
- name: Prepare Artifacts
run: |
mkdir artifact
cp nsfplay.txt artifact
cp output/make/nsfplay artifact
cp output/make/nsfplac artifact
echo "BUILD_TAG=$(git log -1 --format="%ad--%h" --date=format-local:"%Y-%m-%d-%H%M%S")" >> $GITHUB_ENV
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: nsfplay3-ubuntu--${{ env.BUILD_TAG }}
path: artifact/
build-macos:
name: MacOS
runs-on: macos-latest
steps:
- name: Checkout Files
uses: actions/checkout@v4
- name: Setup MacOS
run: brew install imagemagick
- name: wxWidgets Cache Key
run: echo "WXHASH=$(git submodule status wx | tr -d '[:blank:]')" >> $GITHUB_ENV
- name: Cache wxWidgets
id: cache-wx
uses: actions/cache@v4
with:
path: |
wxlibArm/make
wxlibIntel/make
wx/include
key: wx-macos-${{ env.WXHASH }}
- name: Build wxWidgets
if: steps.cache-wx.outputs.cache-hit != 'true'
run: |
export CC=clang
export WXOUT=wxlibArm
export WXCONF_EXTRA="-DCMAKE_OSX_ARCHITECTURES=arm64"
make wxlib
export WXOUT=wxlibIntel
export WXCONF_EXTRA="-DCMAKE_OSX_ARCHITECTURES=x86_64"
make wxlib
#rm -rf wxlibArm/make/libs
#rm -rf wxlibIntel/make/libs
- name: Make
run: |
export CC=clang
export CXXFLAGS_EXTRA="-target arm64-apple-macos11 -Wno-c++11-extensions"
export LDFLAGS_EXTRA="-target arm64-apple-macos11"
export WXL_DIR=../wxlibArm
export OUTDIR=output/makeArm INTDIR=intermediate/makeArm
make cmd nsfplay
export CXXFLAGS_EXTRA="-target x86_64-apple-macos10.13 -Wno-c++11-extensions"
export LDFLAGS_EXTRA="-target x86_64-apple-macos10.13"
export WXL_DIR=../wxlibIntel
export OUTDIR=output/makeIntel INTDIR=intermediate/makeIntel
make cmd nsfplay
- name: Make Fat App
run: |
lipo -create -output output/makeArm/nsfplac2 output/makeArm/nsfplac output/makeIntel/nsfplay
lipo -create -output output/makeArm/nsfplay2 output/makeArm/nsfplay output/makeIntel/nsfplay
mv output/makeArm/nsfplac2 output/makeArm/nsfplac
mv output/makeArm/nsfplay2 output/makeArm/nsfplay
export WXL_DIR=../wxlibArm
export OUTDIR=output/makeArm INTDIR=intermediate/makeArm
make mac
- name: Prepare Signature
if: github.event_name != 'pull_request'
env:
CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
run: echo $CERTIFICATE | base64 --decode -o certificate.p12
- name: Sign Command Line Tool
if: github.event_name != 'pull_request'
uses: indygreg/[email protected]
with:
input_path: output/makeArm/nsfplac
p12_file: certificate.p12
p12_password: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
- name: Sign Application Bundle
if: github.event_name != 'pull_request'
uses: indygreg/[email protected]
with:
input_path: output/makeArm/nsfplay.app
p12_file: certificate.p12
p12_password: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
- name: Prepare Artifacts
run: |
mkdir artifact
cp nsfplay.txt artifact
cp output/makeArm/nsfplac artifact
cp -r output/makeArm/nsfplay.app artifact/nsfplay.app
echo "BUILD_TAG=$(git log -1 --format="%ad--%h" --date=format-local:"%Y-%m-%d-%H%M%S")" >> $GITHUB_ENV
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: nsfplay3-macos--${{ env.BUILD_TAG }}
path: artifact/