From 83376bc231994e82e1aa282aafbf50d4cc2d75a8 Mon Sep 17 00:00:00 2001 From: Thad House Date: Sat, 29 Aug 2020 20:27:20 -0700 Subject: [PATCH] [build] Add sourcelink support for windows pdbs (#2592) SourceLink embeds the git repo and hash into the pdbs, which allows VS to get the source files exactly matching a pdb directly from github. Only VS and WinDbg are supported currently, but there are issues in the vscode tools repo to enable it there. --- build.gradle | 2 +- buildSrc/build.gradle | 2 +- .../src/main/groovy/SingleNativeBuild.groovy | 21 +++++++++++++++++++ gradle/wrapper/gradle-wrapper.properties | 3 +-- shared/config.gradle | 12 ++++++++++- 5 files changed, 35 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index fd88f3b042..53d4800394 100644 --- a/build.gradle +++ b/build.gradle @@ -110,5 +110,5 @@ ext.getCurrentArch = { } wrapper { - gradleVersion = '6.0' + gradleVersion = '6.0.1' } diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index c070c4be22..41461e386f 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -5,5 +5,5 @@ repositories { } } dependencies { - implementation "edu.wpi.first:native-utils:2020.8.0" + implementation "edu.wpi.first:native-utils:2020.10.0" } diff --git a/buildSrc/src/main/groovy/SingleNativeBuild.groovy b/buildSrc/src/main/groovy/SingleNativeBuild.groovy index 3dc6fb7bb7..d43afff803 100644 --- a/buildSrc/src/main/groovy/SingleNativeBuild.groovy +++ b/buildSrc/src/main/groovy/SingleNativeBuild.groovy @@ -10,6 +10,8 @@ import org.gradle.api.GradleException; import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.Task; +import org.gradle.api.tasks.Copy; +import org.gradle.api.file.CopySpec; import org.gradle.api.file.FileTree; import org.gradle.api.tasks.compile.JavaCompile; import org.gradle.language.base.internal.ProjectLayout; @@ -32,6 +34,8 @@ import org.gradle.nativeplatform.toolchain.internal.ToolType; import org.gradle.nativeplatform.toolchain.internal.gcc.AbstractGccCompatibleToolChain; import org.gradle.nativeplatform.toolchain.internal.msvcpp.VisualCppToolChain; import org.gradle.nativeplatform.toolchain.internal.tools.ToolRegistry; +import org.gradle.nativeplatform.tasks.CreateStaticLibrary; +import org.gradle.nativeplatform.tasks.AbstractLinkTask; import org.gradle.platform.base.BinarySpec; import org.gradle.platform.base.ComponentSpec; import org.gradle.platform.base.ComponentSpecContainer; @@ -100,6 +104,23 @@ class SingleNativeBuild implements Plugin { baseBin = tmpBaseBin } } + + if (binary instanceof StaticLibraryBinarySpec) { + File intoDir = ((CreateStaticLibrary)((StaticLibraryBinarySpec)binary).tasks.createStaticLib).outputFile.get().asFile.parentFile + File fromDir = ((CreateStaticLibrary)((StaticLibraryBinarySpec)baseBin).tasks.createStaticLib).outputFile.get().asFile.parentFile + + def copyBasePdbName = "copyBasePdbFor" + binary.buildTask.name + def copyTask = project.tasks.register(copyBasePdbName, Copy) { Copy t -> + t.from (fromDir) + t.include '*.pdb' + t.into intoDir + + t.dependsOn (((StaticLibraryBinarySpec)baseBin).tasks.createStaticLib) + } + ((CreateStaticLibrary)((StaticLibraryBinarySpec)binary).tasks.createStaticLib).dependsOn(copyTask) + + } + baseBin.tasks.withType(AbstractNativeSourceCompileTask) { oCompileTask -> def compileTask = (AbstractNativeSourceCompileTask) oCompileTask if (binary instanceof SharedLibraryBinarySpec) { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 711be8e718..94920145f3 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.0-bin.zip -distributionSha256Sum=5a3578b9f0bb162f5e08cf119f447dfb8fa950cedebb4d2a977e912a11a74b91 +distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/shared/config.gradle b/shared/config.gradle index 93002c2af9..a975f342ed 100644 --- a/shared/config.gradle +++ b/shared/config.gradle @@ -10,8 +10,9 @@ nativeUtils { wpiVersion = "-1" niLibVersion = "2020.10.1" opencvVersion = "3.4.7-3" - googleTestVersion = "1.9.0-4-437e100-1" + googleTestVersion = "1.9.0-5-437e100-1" imguiVersion = "1.76-6" + wpimathVersion = "-1" } } } @@ -21,6 +22,7 @@ nativeUtils.wpi.addWarningsAsErrors() nativeUtils.wpi.addReleaseSymbolGeneration() nativeUtils.setSinglePrintPerPlatform() +nativeUtils.enableSourceLink() nativeUtils.platformConfigs.each { if (it.name.contains('windows')) return @@ -147,6 +149,14 @@ ext.includeStandardZipFormat = { task, value -> task.from(binary.staticLibraryFile) { into nativeUtils.getPlatformPath(binary) + '/static' } + def pdbDir = binary.staticLibraryFile.parentFile + task.from(pdbDir) { + include '*.pdb' + into nativeUtils.getPlatformPath(binary) + '/static' + } + task.from(new File(pdbDir, "SourceLink.json")) { + into nativeUtils.getPlatformPath(binary) + '/static' + } } } }