blob: 2bbcd1382c6aad02b242f10e00c865090d36ad83 [file] [log] [blame]
Austin Schuh812d0d12021-11-04 20:16:48 -07001import org.gradle.nativeplatform.toolchain.internal.msvcpp.VisualStudioLocator
2import org.gradle.internal.os.OperatingSystem
3import org.gradle.util.VersionNumber
4
5plugins {
6 id 'cpp'
7 id 'maven-publish'
8}
9
10if (OperatingSystem.current().isWindows()) {
11 def outputsFolder = file("$buildDir/outputs")
12
13 def baseArtifactId = 'runtime'
14 def artifactGroupId = "edu.wpi.first.msvc"
15 def zipBaseName = "_GROUP_edu_wpi_first_msvc_ID_runtime_CLS"
16
17 def vsLocator = gradle.services.get(VisualStudioLocator)
18
James Kuszmaulcf324122023-01-14 14:07:17 -080019 def vsLocationResult = vsLocator.locateComponent(null)
20
21 if (!vsLocationResult.available) {
22 return
23 }
24
25 def vsLocation = vsLocationResult.component
Austin Schuh812d0d12021-11-04 20:16:48 -070026
27 def visualCppVersion = vsLocation.visualCpp.version
28
29 def vsDirectory = vsLocation.visualStudioDir
30
James Kuszmaulcf324122023-01-14 14:07:17 -080031 def defaultRedistFile = file("$vsDirectory\\VC\\Auxiliary\\Build\\Microsoft.VCRedistVersion.default.txt")
Austin Schuh812d0d12021-11-04 20:16:48 -070032
James Kuszmaulcf324122023-01-14 14:07:17 -080033 if (!defaultRedistFile.exists()) {
34 logger.warn("Version file for VS Compiler not found")
35 logger.warn("Expected at $defaultRedistFile")
36 return
Austin Schuh812d0d12021-11-04 20:16:48 -070037 }
38
Maxwell Henderson80bec322024-01-09 15:48:44 -080039 def expectedVersion = defaultRedistFile.text.trim()
Austin Schuh812d0d12021-11-04 20:16:48 -070040
James Kuszmaulcf324122023-01-14 14:07:17 -080041 def runtimeLocation = file("$vsDirectory\\VC\\Redist\\MSVC\\$expectedVersion")
Austin Schuh812d0d12021-11-04 20:16:48 -070042
James Kuszmaulcf324122023-01-14 14:07:17 -080043 if (runtimeLocation.exists()) {
Austin Schuh812d0d12021-11-04 20:16:48 -070044
45 def x64Folder = null
46
47 file("$runtimeLocation\\x64").eachFile {
48 if (it.name.endsWith('.CRT')) {
49 x64Folder = it
50 }
51 }
52
Austin Schuh812d0d12021-11-04 20:16:48 -070053 def x64ZipTask = tasks.create('x64RuntimeZip', Zip) {
54 destinationDirectory = outputsFolder
55 archiveBaseName = zipBaseName
James Kuszmaulb13e13f2023-11-22 20:44:04 -080056 archiveClassifier = 'x64'
Austin Schuh812d0d12021-11-04 20:16:48 -070057
58 from x64Folder
59 }
60
Austin Schuh812d0d12021-11-04 20:16:48 -070061 addTaskToCopyAllOutputs(x64ZipTask)
62
Austin Schuh812d0d12021-11-04 20:16:48 -070063 build.dependsOn x64ZipTask
64
65 publishing {
66 publications {
67
68 runtime(MavenPublication) {
Austin Schuh812d0d12021-11-04 20:16:48 -070069 artifact x64ZipTask
70
71 artifactId = "${baseArtifactId}"
72 groupId artifactGroupId
73 version wpilibVersioning.version.get()
74 }
75 }
76 }
James Kuszmaulcf324122023-01-14 14:07:17 -080077 } else if (project.hasProperty('buildServer')) {
78 throw new GradleException("Must find a runtime in CI. Expected at $runtimeLocation")
Austin Schuh812d0d12021-11-04 20:16:48 -070079 }
80}