-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathcpp-build.gradle
More file actions
98 lines (82 loc) · 3.03 KB
/
Copy pathcpp-build.gradle
File metadata and controls
98 lines (82 loc) · 3.03 KB
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
repositories {
ivy {
name = "GitHub Toolchain Release"
url = "https://github.com/wiyuka0/AcceleratedRecoiling/releases/download"
patternLayout {
artifact "[revision]/[artifact].[ext]"
}
metadataSources { artifact() }
}
}
configurations {
cppToolchain
}
dependencies {
cppToolchain "com.wiyuka.env:AcceleratedRecoiling-third-party:toolchain_20260601_0@zip"
}
def cppProjectDir = file("./AcceleratedRecoiling-third-party")
def isWindows = System.getProperty("os.name").toLowerCase().contains("windows")
def registerNativeTask = { String taskName, String buildBatName, String description ->
return tasks.register(taskName, Exec) {
group = "build native"
dependsOn "extractToolchain"
onlyIf { isWindows }
workingDir = cppProjectDir
def envScript = file("${cppProjectDir}/env/add_env.bat").absolutePath
def buildScript = file("${cppProjectDir}/build/${buildBatName}").absolutePath
commandLine 'cmd', '/c', "call \"${envScript}\" && call \"${buildScript}\" < nul"
doFirst {
println "> 开始编译 ${description} (${buildBatName})"
}
}
}
tasks.register("extractToolchain", Copy) {
group = "build native"
dependsOn configurations.cppToolchain
onlyIf {
!new File(cppProjectDir, "env/add_env.bat").exists()
}
from({ zipTree(configurations.cppToolchain.singleFile) })
into cppProjectDir
doLast {
println "> 解压完成"
}
}
def compileWin = registerNativeTask("compileNativeWin", "win-x64.bat", "Windows 动态库")
def compileLinux = registerNativeTask("compileNativeLinux", "linux-x64.bat", "Linux 动态库")
def compileMac = registerNativeTask("compileNativeMac", "macos-x64.bat", "macOS 动态库")
def generatedNatives = layout.buildDirectory.dir("generated/natives")
tasks.register("copyNativesToResources", Copy) {
def addNative = { String rel, String pattern, String dest ->
def dir = file("${cppProjectDir}/out/${rel}")
if (dir.directory) {
from(dir) {
include pattern
into dest
}
}
}
addNative("win-x64", "*.dll", "natives/windows-x64")
addNative("linux-x64", "*.so", "natives/linux-x64")
addNative("macos-x64", "*.dylib", "natives/macos-x64")
addNative("macos-arm64", "*.dylib", "natives/macos-arm64")
into generatedNatives
}
sourceSets.main.resources.srcDir generatedNatives
tasks.named('copyNativesToResources').configure {
mustRunAfter 'compileNativeWin', 'compileNativeLinux', 'compileNativeMac'
}
tasks.named('processResources').configure {
dependsOn 'copyNativesToResources'
}
afterEvaluate {
['runClient', 'runServer', 'runGameTestServer'].each { taskName ->
def runTask = tasks.findByName(taskName)
if (runTask != null) {
runTask.dependsOn 'copyNativesToResources'
}
}
}
tasks.named('jar').configure {
dependsOn 'compileNativeWin', 'compileNativeLinux', 'compileNativeMac', 'copyNativesToResources'
}