forked from musescore/MuseScore
-
Notifications
You must be signed in to change notification settings - Fork 0
/
msvc_build.bat
229 lines (193 loc) · 7.88 KB
/
msvc_build.bat
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
@echo off
REM Default build is 64-bit
REM 32-bit compilation is available using "32" as a second parameter when you run msvc_build.bat
REM How to use:
REM BUILD 64-bit:
REM "msvc_build.bat debug" builds 64-bit Debug version of MuseScore without optimizations
REM "msvc_build.bat relwithdebinfo" builds optimized 64-bit version of MuseScore with almost all debug symbols
REM "msvc_build.bat release" builds fully optimized 64-bit version of MuseScore without command line output
REM
REM BUILD 32-bit:
REM "msvc_build.bat debug 32" builds 32-bit Debug version of MuseScore
REM "msvc_build.bat relwithdebinfo 32" builds 32-bit RelWithDebInfo version of MuseScore
REM "msvc_build.bat release 32" builds 32-bit Release version of MuseScore
REM
REM INSTALL 64-bit:
REM "msvc_build.bat install" put all required files of 64-bit Release build to install folder (msvc.install_x64)
REM "msvc_build.bat installdebug" put all required files of 64-bit Debug build to install folder (msvc.install_x64)
REM "msvc_build.bat installrelwithdebinfo" put all required files of 64-bit RelWithDebInfo build to install folder (msvc.install_x64)
REM
REM INSTALL 32-bit:
REM "msvc_build.bat install 32" put all required files of 32-bit Release build to install folder (msvc.install_x86)
REM "msvc_build.bat installdebug 32" put all required files of 32-bit Debug build to install folder (msvc.install_x86)
REM "msvc_build.bat installrelwithdebinfo 32" put all required files of 32-bit RelWithDebInfo build to install folder (msvc.install_x86)
REM
REM PACKAGE:
REM "msvc_build.bat package" pack the installer for already built and installed 64-bit Release build (msvc.build_x64/MuseScore-*.msi)
REM "msvc_build.bat package 32" pack the installer for already built and installed 32-bit Release build (msvc.build_x86/MuseScore-*.msi)
REM
REM CLEAN:
REM "msvc_build.bat clean" remove all files in msvc.* folders and the folders itself
REM
REM Windows Portable build is triggered by defining BUILD_WIN_PORTABLE environment variable to "ON" before launching this script, e.g.
REM SET BUILD_WIN_PORTABLE=ON
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
IF "%GENERATOR_NAME%"=="" (
CALL :FIND_GENERATOR
)
IF "%GENERATOR_NAME%"=="" (
ECHO "No supported version of Microsoft Visual Studio (2017, 2019 or 2022) found."
GOTO :END
)
REM BUILD_64 used in CMakeLists.txt
SET "BUILD_FOLDER=msvc.build"
SET "INSTALL_FOLDER=msvc.install"
IF "%2"=="32" (
SET PLATFORM_NAME=Win32
SET "ARCH=x86"
SET BUILD_64=OFF
) ELSE (
IF NOT "%2"=="" (
IF NOT "%2"=="64" (
echo Invalid second argument
GOTO :END
) ELSE (
SET PLATFORM_NAME=x64
SET "ARCH=x64"
SET BUILD_64=ON
)
) ELSE (
SET PLATFORM_NAME=x64
SET "ARCH=x64"
SET BUILD_64=ON
)
)
IF NOT "%3"=="" (
SET BUILD_NUMBER="%3"
SET BUILD_AUTOUPDATE="ON"
)
ECHO "BUILD_WIN_PORTABLE: %BUILD_WIN_PORTABLE%"
IF "%BUILD_WIN_PORTABLE%"=="ON" (
SET "INSTALL_FOLDER=MuseScorePortable\App\MuseScore"
SET "BUILD_AUTOUPDATE=OFF"
SET "WIN_PORTABLE_OPT=-DMUSESCORE_BUILD_CONFIGURATION="app-portable"
)
ECHO "INSTALL_FOLDER: %INSTALL_FOLDER%"
ECHO "WIN_PORTABLE_OPT: %WIN_PORTABLE_OPT%"
IF /I "%1"=="release" (
SET CONFIGURATION_STR="release"
GOTO :BUILD
)
IF /I "%1"=="debug" (
SET CONFIGURATION_STR="debug"
GOTO :BUILD
)
IF /I "%1"=="relwithdebinfo" (
SET CONFIGURATION_STR="relwithdebinfo"
GOTO :BUILD
)
IF /I "%1"=="install" (
SET "BUILD_FOLDER=%BUILD_FOLDER%_%ARCH%"
SET CONFIGURATION_STR="release"
GOTO :INSTALL
)
IF /I "%1"=="installdebug" (
SET "BUILD_FOLDER=%BUILD_FOLDER%_%ARCH%"
SET CONFIGURATION_STR="debug"
GOTO :INSTALL
)
IF /I "%1"=="installrelwithdebinfo" (
SET "BUILD_FOLDER=%BUILD_FOLDER%_%ARCH%"
SET CONFIGURATION_STR="relwithdebinfo"
GOTO :INSTALL
)
IF /I "%1"=="package" (
cd "%BUILD_FOLDER%_%ARCH%"
cmake --build . --config RelWithDebInfo --target package
GOTO :END
)
IF /I "%1"=="revision" (
echo revisionStep
git rev-parse --short=7 HEAD > local_build_revision.env
GOTO :END
)
IF /I "%1"=="clean" (
for /d %%G in ("msvc.*") do rd /s /q "%%~G"
for /d %%G in ("MuseScorePortable") do rd /s /q "%%~G"
GOTO :END
) ELSE (
echo No valid parameters are set
GOTO :END
)
:FIND_GENERATOR
REM Usage: CALL :FIND_GENERATOR
REM Detects the highest supported VS version installed and sets GENERATOR_NAME to the appropriate CMake generator name.
REM vswhere.exe is a helper utility that is automatically installed with VS2017 and later (and always at a fixed location).
SET VSWHERE="%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe"
IF NOT EXIST %VSWHERE% EXIT /B !ERRORLEVEL!
REM Try Visual Studio 2022 first.
CALL :FIND_GENERATOR_VERSION %VSWHERE% 17 2022
REM Fall back to Visual Studio 2019.
IF "%GENERATOR_NAME%"=="" CALL :FIND_GENERATOR_VERSION %VSWHERE% 16 2019
EXIT /B !ERRORLEVEL!
:FIND_GENERATOR_VERSION
REM Usage: CALL :FIND_GENERATOR_VERSION "[path\]vswhere.exe" major_version_number year
REM Checks if the specified VS version is installed, and if so, sets GENERATOR_NAME to the appropriate CMake generator name.
FOR /F "usebackq delims=. tokens=1" %%I IN (`%1 -version [%2^,^) -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationVersion -format value`) DO (
IF "%%I"=="%2" SET GENERATOR_NAME=Visual Studio %2 %3
)
EXIT /B !ERRORLEVEL!
:BUILD
echo Generator is: %GENERATOR_NAME%
echo Platform is: %PLATFORM_NAME%
SET "BUILD_FOLDER=%BUILD_FOLDER%_%ARCH%"
echo Build folder is: %BUILD_FOLDER%
IF NOT "%BUILD_WIN_PORTABLE%"=="ON" (
SET "INSTALL_FOLDER=%INSTALL_FOLDER%_%ARCH%"
)
echo Install folder is: %INSTALL_FOLDER%
if not exist "%BUILD_FOLDER%\" mkdir "%BUILD_FOLDER%"
if not exist "%INSTALL_FOLDER%\" mkdir "%INSTALL_FOLDER%"
IF NOT "%MSCORE_STABLE_BUILD%" == "" (
IF NOT "%CRASH_LOG_SERVER_URL%" == "" (
SET CRASH_REPORT_URL_OPT=-DMUE_CRASH_REPORT_URL=%CRASH_LOG_SERVER_URL% -DBUILD_CRASH_REPORTER=ON
)
IF NOT "%YOUTUBE_API_KEY%" == "" (
SET YOUTUBE_API_KEY_OPT=-DMUE_LEARN_YOUTUBE_API_KEY=%YOUTUBE_API_KEY%
)
)
IF "%MUSESCORE_BUILD_MODE%" == "" (
SET MUSESCORE_BUILD_MODE="dev"
)
IF NOT "%BUILD_VST%" == "" (
SET BUILD_VST_OPT=-DBUILD_VST_MODULE=%BUILD_VST%
SET VST3_SDK_PATH_OPT=-DVST3_SDK_PATH=%VST3_SDK_PATH%
)
SET "INSTALL_FOLDER=%INSTALL_FOLDER:\=/%"
REM -DCMAKE_BUILD_NUMBER=%BUILD_NUMBER% -DCMAKE_BUILD_AUTOUPDATE=%BUILD_AUTOUPDATE% %CRASH_REPORT_URL_OPT% are used for CI only
cd "%BUILD_FOLDER%"
IF EXIST "CMakeCache.txt" (
echo Using existing CMake configuration to save time.
echo To force reconfiguration, delete CMakeCache.txt or run "msvc_build.bat clean".
echo You only need to do this if you want to use different build options to before.
REM Note: If a CMakeLists.txt file was edited then the build system will detect it
REM and run CMake again automatically with the same options as before.
) ELSE (
echo Building CMake configuration...
cmake -G "%GENERATOR_NAME%" -A "%PLATFORM_NAME%" -DCMAKE_INSTALL_PREFIX=../%INSTALL_FOLDER% -DCMAKE_BUILD_TYPE=%CONFIGURATION_STR% -DMUSESCORE_BUILD_MODE=%MUSESCORE_BUILD_MODE% -DMUSESCORE_REVISION=%MUSESCORE_REVISION% -DMUE_COMPILE_BUILD_64=%BUILD_64% -DCMAKE_BUILD_NUMBER=%BUILD_NUMBER% -DBUILD_AUTOUPDATE=%BUILD_AUTOUPDATE% %BUILD_VST_OPT% %VST3_SDK_PATH_OPT% %CRASH_REPORT_URL_OPT% %YOUTUBE_API_KEY_OPT% %WIN_PORTABLE_OPT% ..
IF !ERRORLEVEL! NEQ 0 (
set OLD_ERRORLEVEL=!ERRORLEVEL!
del /f "CMakeCache.txt"
exit /b !OLD_ERRORLEVEL!
)
)
echo Building MuseScore...
cmake --build . --config %CONFIGURATION_STR% --target mscore
GOTO :END
:INSTALL
cd "%BUILD_FOLDER%"
echo Installing MuseScore files...
cmake --build . --config %CONFIGURATION_STR% --target install
GOTO :END
:END
exit /b !ERRORLEVEL!