defineNetworkTablesProperties() def ntSourceDir = "$buildDir/ntSources" model { components { wpilib_nonshared(NativeLibrarySpec) { targetPlatform 'arm' binaries.all { tasks.withType(CppCompile) { addNiLibraryLinks(linker, targetPlatform) addNetworkTablesLibraryLinks(it, linker, targetPlatform) } } sources { cpp { source { srcDirs = ["${project.shared}/src", "${project.athena}/src"] includes = ['**/*.cpp'] } exportedHeaders { srcDirs = ["${project.shared}/include", "${project.athena}/include", netTablesInclude] includes = ['**/*.h'] } lib project: ':hal', library: 'HALAthena', linkage: 'static' } } } } } task wpilibcZip(type: Zip) { description = 'Zips all of the libraries for wpilibc' group = 'WPILib' baseName = 'wpilibc' destinationDir = project.buildDir duplicatesStrategy = 'exclude' // Include the static library file and header files from this project model { binaries { withType(StaticLibraryBinarySpec) { spec -> spec.headerDirs.each { from(it) { into 'include' } } from(spec.staticLibraryFile) { into 'lib' } } } } // Include the static library file and shared library object from hal project def hal = project(':hal') hal.model{ binaries{ withType(StaticLibraryBinarySpec) { spec -> spec.headerDirs.each { from(it) { into 'include' // We don't want to include any of the .cpp files that are in some of the header directories exclude '**/*.cpp' } } from(spec.staticLibraryFile) { into 'lib' } } withType(SharedLibraryBinarySpec) { spec -> from(spec.sharedLibraryFile) { into 'lib' } } } } // Include the ntcore static and shared libraries from(netSharedLib) { into 'lib' } from(netStaticLib) { into 'lib' } // We rename the libHALAthena.so object to libHALAthena_shared.so, and the same for libntcore.so rename('(libHALAthena)(.so)', '$1_shared$2') rename('(libntcore)(.so)', '$1_shared$2') // Finally, include all of the shared library objects from the ni directory from(project.file('../ni-libraries')) { into 'lib' exclude 'genlinks' } } // Add the dependency on the wpilib_nonsharedStaticLibrary task to the wpilibc task. Because of the gradle lifecycle, // this cannot be done purely with dependsOn in the task, as the static library task doesn't exist yet. Same goes for // the networkTablesStaticLibrary task and the two HAL tasks below tasks.whenTaskAdded { task -> if (task.name == 'wpilib_nonsharedStaticLibrary') { wpilibcZip.dependsOn task } } // Add the hal static and shared libraries as a dependency project(':hal').tasks.whenTaskAdded { task -> if (task.name == 'hALAthenaStaticLibrary' || task.name == 'hALAthenaSharedLibrary') { wpilibcZip.dependsOn task } } if (checkDoxygen()) { def ntSourcesDependency = project.dependencies.create('edu.wpi.first.wpilib.networktables.cpp:NetworkTables:3.0.0-SNAPSHOT:sources@zip') def ntSourcesConfig = project.configurations.detachedConfiguration(ntSourcesDependency) ntSourcesDependency.setTransitive(false) def ntSources = ntSourcesConfig.singleFile task unzipCppNtSources(type: Copy) { description = 'Unzips the C++ networktables sources for doc creation' group = 'WPILib' from zipTree(ntSources) exclude 'META-INF/*' into ntSourceDir } doxygen { def halLocation = '../hal' source new File("${project.shared}/src") source new File("${project.shared}/include") source new File("${project.athena}/src") source new File("${project.athena}/include") source new File("$ntSourceDir/src") source new File("$ntSourceDir/include") source new File("$halLocation/shared") source new File("$halLocation/athena") source new File("$halLocation/include") // template file('cpp.doxy') exclude 'nivision.h' extension_mapping 'inc=C++' project_name 'WPILibC++' javadoc_autobrief true recursive true quiet true warnings false warn_if_doc_error false warn_no_paramdoc false warn_format false warn_logfile false warn_if_undocumented false generate_latex false html_timestamp true generate_treeview true outputDir new File("$buildDir/docs") } doxygen.dependsOn unzipCppNtSources task doxygenZip(type: Zip) { description = 'Generates doxygen zip file for publishing' group = 'WPILib' dependsOn doxygen duplicatesStrategy = 'exclude' from doxygen.outputDir } } publishing { publications { wpilibc(MavenPublication) { artifact wpilibcZip if (checkDoxygen()) { artifact (doxygenZip) { classifier = 'doxygen' } } groupId 'edu.wpi.first.wpilib.cmake' artifactId 'cpp-root' version '1.0.0' } } setupWpilibRepo(it) } clean { ntSourceDir }