blob: 7e268e842d9eccff6d8430d8ed28d6c822539728 [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
James Kuszmaulb13e13f2023-11-22 20:44:04 -080039 // TODO Remove VersionNumber
James Kuszmaulcf324122023-01-14 14:07:17 -080040 def expectedVersion = VersionNumber.parse(defaultRedistFile.text.trim())
Austin Schuh812d0d12021-11-04 20:16:48 -070041
James Kuszmaulcf324122023-01-14 14:07:17 -080042 def runtimeLocation = file("$vsDirectory\\VC\\Redist\\MSVC\\$expectedVersion")
Austin Schuh812d0d12021-11-04 20:16:48 -070043
James Kuszmaulcf324122023-01-14 14:07:17 -080044 if (runtimeLocation.exists()) {
Austin Schuh812d0d12021-11-04 20:16:48 -070045
46 def x64Folder = null
47
48 file("$runtimeLocation\\x64").eachFile {
49 if (it.name.endsWith('.CRT')) {
50 x64Folder = it
51 }
52 }
53
Austin Schuh812d0d12021-11-04 20:16:48 -070054 def x64ZipTask = tasks.create('x64RuntimeZip', Zip) {
55 destinationDirectory = outputsFolder
56 archiveBaseName = zipBaseName
James Kuszmaulb13e13f2023-11-22 20:44:04 -080057 archiveClassifier = 'x64'
Austin Schuh812d0d12021-11-04 20:16:48 -070058
59 from x64Folder
60 }
61
Austin Schuh812d0d12021-11-04 20:16:48 -070062 addTaskToCopyAllOutputs(x64ZipTask)
63
Austin Schuh812d0d12021-11-04 20:16:48 -070064 build.dependsOn x64ZipTask
65
66 publishing {
67 publications {
68
69 runtime(MavenPublication) {
Austin Schuh812d0d12021-11-04 20:16:48 -070070 artifact x64ZipTask
71
72 artifactId = "${baseArtifactId}"
73 groupId artifactGroupId
74 version wpilibVersioning.version.get()
75 }
76 }
77 }
James Kuszmaulcf324122023-01-14 14:07:17 -080078 } else if (project.hasProperty('buildServer')) {
79 throw new GradleException("Must find a runtime in CI. Expected at $runtimeLocation")
Austin Schuh812d0d12021-11-04 20:16:48 -070080 }
81}