@@ -3,18 +3,33 @@ $WEBRTC_DIR="$WORK_DIR/libcs/dep/_google-webrtc"
33$MSQUIC_DIR = " $WORK_DIR /libcs/dep/_msquic"
44$WEBRTC_OUT_DIR = " $WEBRTC_DIR /src/out/release/obj"
55$MSQUIC_OUT_DIR = " $MSQUIC_DIR /build/windows/x64_schannel/obj/Release"
6- $MSVC_BUILD_DIR = " $WORK_DIR /libcs/msvc-build "
6+ $WEB_FRONT = " $WORK_DIR /libcs/web/front "
77
88$env: CC = " clang"
99$env: CXX = " clang++"
10- $env: CXXFLAGS = " -I$WEBRTC_DIR /src -I$WEBRTC_DIR /src/third_party/abseil-cpp -I$MSQUIC_DIR /src/inc -std=c++17 -DWEBRTC_WIN -DQUIC_API_ENABLE_PREVIEW_FEATURES -DNOMINMAX"
10+ $env: CGO_CXXFLAGS = " -I$WEBRTC_DIR /src -I$WEBRTC_DIR /src/third_party/abseil-cpp -I$MSQUIC_DIR /src/inc -std=c++17 -DWEBRTC_WIN -DQUIC_API_ENABLE_PREVIEW_FEATURES -DNOMINMAX"
1111$env: CGO_LDFLAGS = " -L$MSQUIC_DIR /build/windows/x64_schannel/obj/Release -L$WEBRTC_DIR /src/out/release/obj -lmsquic.lib -lwebrtc.lib"
1212$env: CARGO_CFG_TARGET_OS = " windows"
13+ $env: RUSTFLAGS = " -L $MSQUIC_OUT_DIR -l msquic -L $WEBRTC_OUT_DIR -l webrtc"
1314
1415$env: DEPOT_TOOLS_WIN_TOOLCHAIN = " 0"
1516$env: GYP_GENERATORS = " msvs-ninja,ninja"
1617$env: GYP_MSVS_OVERRIDE_PATH = " C:\Program Files\Microsoft Visual Studio\2022\Community"
1718$env: GYP_MSVS_VERSION = " 2022"
19+ $env: PATH += " ;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja"
20+ # 检查 Pscx 模块是否已安装
21+ if (-not (Get-Module - Name Pscx - ListAvailable)) {
22+ Write-Host " 安装Pscx PowerShell插件"
23+ Install-Module - Name Pscx - AllowPrerelease - Force
24+ }
25+
26+ # 检查 VSSetup 模块是否已安装
27+ if (-not (Get-Module - Name VSSetup - ListAvailable)) {
28+ Write-Host " 安装VSSetup PowerShell插件"
29+ Install-Module - Name VSSetup - AllowPrerelease - Force
30+ }
31+
32+ Import-VisualStudioVars 2022 amd64
1833
1934Set-Location $WORK_DIR
2035function complie_webrtc {
@@ -34,8 +49,25 @@ function complie_webrtc{
3449 }
3550}
3651
52+ function CheckAdministrator {
53+ $currentUser = [Security.Principal.WindowsIdentity ]::GetCurrent()
54+ $principal = New-Object Security.Principal.WindowsPrincipal($currentUser )
55+ return $principal.IsInRole ([Security.Principal.WindowsBuiltInRole ]::Administrator)
56+ }
57+
3758function complie_msquic {
3859 Set-Location $MSQUIC_DIR
60+ if (! (Test-Path - Path " $MSQUIC_DIR /artifacts" )){
61+ Write-Host " msquic未初始化依赖项,正在初始化"
62+ if (CheckAdministrator) {
63+ & ./ scripts/ prepare- machine.ps1
64+ } else {
65+ Write-Output " 当前未以管理员权限运行"
66+ Set-Location $WORK_DIR
67+ exit
68+ }
69+
70+ }
3971 Write-Host " msquic开始编译"
4072 & ./ scripts/ build.ps1 - Config Release - Clean - Static - DisableTest - DisableTools - StaticCRT
4173 if (Test-Path - Path " $MSQUIC_OUT_DIR /msquic.lib" )
@@ -50,39 +82,51 @@ function complie_msquic{
5082 }
5183}
5284
85+ function release_front {
86+ Set-Location $WEB_FRONT
87+ $npmCommand = Get-Command npm - ErrorAction SilentlyContinue
5388
54- function release_gt_dylib {
55- Set-Location " $WORK_DIR /libcs"
56- Write-Host " 开始编译gt server/client"
57- go build - tags release - trimpath - ldflags " -s -w" - buildmode= c- archive - o release/ gt.lib ./ lib/ export
58- if (Test-Path - Path " ./release/gt.lib" )
59- {
60- Write-Host " gt server/client编译完成"
89+ if ($null -ne $npmCommand ) {
90+ Write-Output " npm 命令可用,进行下一步"
91+ } else {
92+ Write-Output " npm 命令不可用,正在安装node.js"
93+ winget install -- id= OpenJS.NodeJS - e
6194 }
62- else
95+
96+ if (Test-Path - Path " $WORK_DIR /libcs/client/web/dist" ){
97+ Remove-Item - Path " $WORK_DIR /libcs/client/web/dist" - Recurse - Force
98+ }
99+ if (Test-Path - Path " $WORK_DIR /libcs/server/web/dist" ){
100+ Remove-Item - Path " $WORK_DIR /libcs/server/web/dist" - Recurse - Force
101+ }
102+ if (Test-Path - Path " $WEB_FRONT /dist" )
63103 {
64- Write-Host " gt server/client编译失败"
65- Set-Location $WORK_DIR
66- exit
104+ Remove-Item - Path " $WEB_FRONT /dist" - Recurse - Force
67105 }
68- Set-Location ./ msvc- build
106+ npm install
107+ npm run " build:pro"
69108
70- $directory = " $WORK_DIR /libcs/msvc-build/target"
71- if (-not (Test-Path - Path $directory - PathType Container)) {
72- New-Item - Path $directory - ItemType Directory - Force
73- Write-Host " 目录已创建:$directory "
74- } else {
75- Write-Host " 目录已存在:$directory "
109+ if (Test-Path - Path " $WEB_FRONT /dist" )
110+ {
111+ Copy-Item - Path " $WEB_FRONT /dist" - Destination " $WORK_DIR /libcs/client/web/dist" - Recurse
112+ Copy-Item - Path " $WEB_FRONT /dist" - Destination " $WORK_DIR /libcs/server/web/dist" - Recurse
113+ Write-Host " web front编译完成"
76114 }
77- Write-Host " 开始编译发布gt server/client动态库"
78- cl / LD / MT / Fe:$MSVC_BUILD_DIR / gt.dll gt.cpp / link / DEF:gt.def " ../release/gt.lib" " $MSQUIC_OUT_DIR /msquic.lib" " $WEBRTC_OUT_DIR /webrtc.lib" ntdll.lib
79- if (Test-Path - Path " $MSVC_BUILD_DIR /gt.dll" )
115+ }
116+
117+ function release_gt_lib {
118+ release_front
119+
120+ Set-Location " $WORK_DIR /libcs"
121+ Write-Host " 开始编译gt server/client"
122+ go build - tags release - trimpath - ldflags " -s -w" - buildmode= c- archive - o release/ windows/ gt.lib ./ lib/ export
123+ if (Test-Path - Path " ./release/windows/gt.lib" )
80124 {
81- Write-Host " 动态库编译完成 "
125+ Write-Host " gt server/client编译完成 "
82126 }
83127 else
84128 {
85- Write-Host " 动态库编译失败 "
129+ Write-Host " gt server/client编译失败 "
86130 Set-Location $WORK_DIR
87131 exit
88132 }
@@ -102,5 +146,8 @@ if (!(Test-Path -Path "$WEBRTC_OUT_DIR/webrtc.lib")){
102146if (! (Test-Path - Path " $MSQUIC_OUT_DIR /msquic.lib" )){
103147 complie_msquic
104148}
105- release_gt_dylib
106- release_gt_exe
149+ release_gt_lib
150+ release_gt_exe
151+
152+ New-Item - ItemType Directory - Force - Path " $WORK_DIR /release"
153+ Copy-Item - Path " $WORK_DIR /target/x86_64-pc-windows-msvc/release/gt.exe" - Destination " $WORK_DIR /release/gt-win-x86_64.exe"
0 commit comments