-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmake_windows.bat
164 lines (146 loc) · 4.92 KB
/
make_windows.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
call setup_env.bat %*
if %ERRORLEVEL% NEQ 0 (
@echo error on setup_env, check it.
@exit /b 2
)
:: 导入参数
set IMPORT_VAR_FILE=%TEMP%\env_variables.tmp
for /f "tokens=1* delims==" %%i in (%IMPORT_VAR_FILE%) do (
set "%%i=%%j"
)
set MY_TAG=make_windows
PUSHD %~DP0 &TITLE %MY_TAG% &color 0A & setlocal enabledelayedexpansion
set ERR_CODE=0
@echo [%MY_TAG%] your BUILD_ABI: %BUILD_ABI%
@echo [%MY_TAG%] your BUILD_TYPE: %BUILD_TYPE%
@echo [%MY_TAG%] your CMAKE_EXTEND_ARGS: %CMAKE_EXTEND_ARGS%
::
:: :lable_check_thread_mode
:: REM set WIN_PTHREAD_MODE=%3
:: set WIN_PTHREAD_MODE=1
:: if "%WIN_PTHREAD_MODE%" EQU "" (
:: @echo now you should choose windows pthread_mode.
:: goto label_choose_win_pthread
:: ) else (
:: @echo your windows pthread_mode is %WIN_PTHREAD_MODE%
:: goto label_select_vs
:: )
::
:: :label_choose_win_pthread
:: @echo "LCU support 3 type win pthread mode:"
:: @echo " 0: use windows native implemention."
:: @echo " 1: use pthreads-win32 lib."
:: @echo " 2: use pthreads-win32 dll."
:: @echo .
:: set /p WIN_PTHREAD_MODE="please choose LCU pthread mode:"
:label_select_vs
set VS_VER=%3
set _TMP_VS_VER=%~3
if "!_TMP_VS_VER:~0,14!" == "Visual Studio " (
@echo "ok, the No.3 VS_VER = !VS_VER!"
) else (
::@echo "oops, No.3 param is not visual studio! use No.4 param!"
set _TMP_VS_VER=%~4
set VS_VER=%4
if "!_TMP_VS_VER:~0,14!" == "Visual Studio " (
@echo "ok, the No.4 VS_VER = !VS_VER!"
) else (
set VS_VER=
)
)
@echo VS_VER=!VS_VER!
if "!VS_VER!" EQU "" (
@echo now auto detect vs version for you...
) else (
@echo use your vs_version=!VS_VER!
goto label_check_params
)
::============= VS version check start =========================
@echo =============== auto detect VS version ===============
reg query "HKEY_CLASSES_ROOT\VisualStudio.DTE" >> nul 2>&1
if %ERRORLEVEL% NEQ 0 (
@echo VS not installed. you should install it first before compile.
set ERR_CODE=2
goto label_exit_make
)
@echo VS has installed, now detect newest version.
reg query "HKEY_CLASSES_ROOT\VisualStudio.DTE.17.0" >> nul 2>&1
if %ERRORLEVEL% NEQ 0 (
@echo VS 2022 not installed.
) else (
@echo VS 2022 installed.
set VS_VER="Visual Studio 17 2022"
goto label_check_params
)
reg query "HKEY_CLASSES_ROOT\VisualStudio.DTE.16.0" >> nul 2>&1
if %ERRORLEVEL% NEQ 0 (
@echo VS 2019 not installed.
) else (
@echo VS 2019 installed.
set VS_VER="Visual Studio 16 2019"
goto label_check_params
)
reg query "HKEY_CLASSES_ROOT\VisualStudio.DTE.15.0" >> nul 2>&1
if %ERRORLEVEL% NEQ 0 (
@echo VS 2017 not installed.
) else (
@echo VS 2017 installed.
set VS_VER="Visual Studio 15 2017"
goto label_check_params
)
reg query "HKEY_CLASSES_ROOT\VisualStudio.DTE.14.0" >> nul 2>&1
if %ERRORLEVEL% NEQ 0 (
@echo VS 2015 not installed.
) else (
@echo VS 2015 installed.
set VS_VER="Visual Studio 14 2015"
goto label_check_params
)
@echo error: not support your vs version! maybe it too old!
set ERR_CODE=2
goto label_exit_make
::============= VS version check complete =========================
:label_check_params
@echo =============== detect VS version succeed ===============
if "%BUILD_ABI%" EQU "Win32" set NEW_VS_ARCH=" -A Win32" & goto label_main
if "%BUILD_ABI%" EQU "Win64" set NEW_VS_ARCH="" & goto label_main
@echo params check failed: unknown BUILD_ABI=%BUILD_ABI%
set ERR_CODE=2
goto label_exit_make
:label_main
@echo Your BUILD_ABI=%BUILD_ABI%, NEW_VS_ARCH=%NEW_VS_ARCH:"=%
title=%BUILD_ABI%
set BUILD_DIR=.\tool\build\build_%BUILD_ABI%
@echo Your BUILD_DIR=%BUILD_DIR%
@echo Your BUILD_TYPE=%BUILD_TYPE%
@echo Your VS_VER=%VS_VER%
::set output_dir=.\\output\\android\\armeabi-v7a
rmdir /S /Q %BUILD_DIR:"=% 2>nul
mkdir %BUILD_DIR:"=%
::set CMAKE_EXTEND_ARGS= -DCMAKE_BUILD_TYPE=%BUILD_TYPE% -DPRJ_WIN_PTHREAD_MODE=%WIN_PTHREAD_MODE% -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=ON -DBUILD_DEMO=ON
::set CMAKE_EXTEND_ARGS= -DCMAKE_BUILD_TYPE=%BUILD_TYPE% -DBUILD_SHARED_LIBS=OFF -DPRJ_BUILD_ALL_IN_ONE=ON -DPRJ_BUILD_TESTS=ON
:: VS2019 添加 arch 方式与其他版本不同,默认不加 -A 选项就是Win64(而且不能显式的添加Win64)
:: 小提示:%VAR% 最后面加的 %VAR:"=% 是为了去除变量两边的双引号的,如果要保留就不要加
%CMAKE_BIN% -G !VS_VER! %NEW_VS_ARCH:"=% -H.\ -B%BUILD_DIR:"=% %CMAKE_EXTEND_ARGS%
::%CMAKE_BIN% -G "Visual Studio 16 2019" -A Win32 -H.\ -B%BUILD_DIR:"=% %CMAKE_EXTEND_ARGS%
set ERR_CODE=%ERRORLEVEL%
IF !ERR_CODE! NEQ 0 (
@echo.
@echo "! Error on generate project: %ERR_CODE% !"
goto label_exit_make
)
@echo.
@echo "generate project succeed, now compile it ..."
%CMAKE_BIN% --build %BUILD_DIR:"=% --config %BUILD_TYPE:"=%
set ERR_CODE=%ERRORLEVEL%
IF !ERR_CODE! NEQ 0 (
@echo "! Error on build project: %ERR_CODE% !"
goto label_exit_make
)
@echo.
@echo "compile %PLATFORM% %BUILD_ABI% %BUILD_TYPE% finished(!ERR_CODE!). bye bye..."
:label_exit_make
::@pause>nul
::color 0F
del /Q %IMPORT_VAR_FILE% 2>nul
@exit /b !ERR_CODE!