diff --git a/FasterBuilds.md b/FasterBuilds.md new file mode 100644 index 0000000000..896344221b --- /dev/null +++ b/FasterBuilds.md @@ -0,0 +1,15 @@ +# Faster Builds for Developers + +When you run `./gradlew build`, it builds EVERYTHING. This means debug and release builds for desktop and all installed cross compilers. For many developers, this is way too much, and causes much developer pain. + +To help with some of these things, common tasks have shortcuts to only build necessary things for common development and testing tasks. + +## Development (Desktop) + +For projects `wpiutil`, `ntcore`, `cscore`, `hal` `wpilibOldCommands`, `wpilibNewCommands` and `cameraserver`, a `testDesktopJava` and a `testDesktopCpp` task exists. These can be ran with `./gradlew :projectName:task`, and will only build the minimum things required to run those tests. + +For `wpilibc`, a `testDesktopCpp` task exists. For `wpilibj`, a `testDesktopJava` task exists. + +For `wpilibcExamples`, a `buildDesktopCpp` task exists (These can't be ran, but they can compile). + +For `wpilibjExamples`, a `buildDesktopJava` task exists. diff --git a/shared/cppDesktopTestTask.gradle b/shared/cppDesktopTestTask.gradle new file mode 100644 index 0000000000..04b7224df4 --- /dev/null +++ b/shared/cppDesktopTestTask.gradle @@ -0,0 +1,21 @@ +model { + tasks { + def ts = $.testSuites + project.tasks.register('testDesktopCpp') { testTask-> + def systemArch = getCurrentArch() + def found = false + ts.each { + if (it in GoogleTestTestSuiteSpec && it.name == "${nativeName}Test") { + it.binaries.each { + if (found) return + def arch = it.targetPlatform.name + if (arch == systemArch && it.buildType.name == 'debug') { + testTask.dependsOn it.tasks.run + found = true + } + } + } + } + } + } +} diff --git a/shared/javaDesktopTestTask.gradle b/shared/javaDesktopTestTask.gradle new file mode 100644 index 0000000000..766fa50bb8 --- /dev/null +++ b/shared/javaDesktopTestTask.gradle @@ -0,0 +1,3 @@ +tasks.register('testDesktopJava') { + dependsOn test +} diff --git a/shared/javacpp/setupBuild.gradle b/shared/javacpp/setupBuild.gradle index 4e6dba77f4..04086ad4e5 100644 --- a/shared/javacpp/setupBuild.gradle +++ b/shared/javacpp/setupBuild.gradle @@ -141,6 +141,9 @@ model { } } +apply from: "${rootDir}/shared/cppDesktopTestTask.gradle" +apply from: "${rootDir}/shared/javaDesktopTestTask.gradle" + tasks.withType(RunTestExecutable) { args "--gtest_output=xml:test_detail.xml" outputs.dir outputDir diff --git a/shared/jni/setupBuild.gradle b/shared/jni/setupBuild.gradle index 7622d0eef8..6c6148cfe4 100644 --- a/shared/jni/setupBuild.gradle +++ b/shared/jni/setupBuild.gradle @@ -275,6 +275,9 @@ model { } } +apply from: "${rootDir}/shared/cppDesktopTestTask.gradle" +apply from: "${rootDir}/shared/javaDesktopTestTask.gradle" + ext.getJniSpecClass = { return JniNativeLibrarySpec } diff --git a/wpilibc/build.gradle b/wpilibc/build.gradle index 8730824523..4ee57667d6 100644 --- a/wpilibc/build.gradle +++ b/wpilibc/build.gradle @@ -231,6 +231,8 @@ model { } } +apply from: "${rootDir}/shared/cppDesktopTestTask.gradle" + tasks.withType(RunTestExecutable) { args "--gtest_output=xml:test_detail.xml" outputs.dir outputDir diff --git a/wpilibcExamples/build.gradle b/wpilibcExamples/build.gradle index 12279df38f..c6c1dfff3c 100644 --- a/wpilibcExamples/build.gradle +++ b/wpilibcExamples/build.gradle @@ -6,6 +6,8 @@ apply plugin: 'visual-studio' apply plugin: 'edu.wpi.first.NativeUtils' apply plugin: ExtraTasks +evaluationDependsOn(':hal') + apply from: '../shared/config.gradle' ext.examplesMap = [:] @@ -222,6 +224,25 @@ model { } apply from: 'publish.gradle' +model { + tasks { + def c = $.components + project.tasks.register('buildDesktopCpp') { compileTask-> + def systemArch = getCurrentArch() + c.each { + if (it in NativeExecutableSpec && it.name) { + it.binaries.each { + def arch = it.targetPlatform.name + if (arch == systemArch && it.buildType.name == 'debug') { + compileTask.dependsOn it.tasks.link + } + } + } + } + } + } +} + ext { templateDirectory = new File("$projectDir/src/main/cpp/templates/") templateFile = new File("$projectDir/src/main/cpp/templates/templates.json") diff --git a/wpilibj/build.gradle b/wpilibj/build.gradle index cf6c4e5855..b2e22fb39d 100644 --- a/wpilibj/build.gradle +++ b/wpilibj/build.gradle @@ -170,3 +170,5 @@ test { showStandardStreams = true } } + +apply from: "${rootDir}/shared/javaDesktopTestTask.gradle" diff --git a/wpilibjExamples/build.gradle b/wpilibjExamples/build.gradle index 651d8e5d24..2016632531 100644 --- a/wpilibjExamples/build.gradle +++ b/wpilibjExamples/build.gradle @@ -39,6 +39,10 @@ gradle.projectsEvaluated { } } +tasks.register('buildDesktopJava') { + it.dependsOn tasks.withType(JavaCompile) +} + apply from: 'publish.gradle' ext {