wpilibsuite / GradleRIO

The official gradle plugin for the FIRST Robotics Competition
MIT License
258 stars 69 forks source link

DefaultHeaderDependenciesCollector issue with wpilib/opencv headers #657

Closed dstalter4 closed 1 year ago

dstalter4 commented 1 year ago

Dependency detection does not work correctly resulting in excessively long build times, as the build process assumes all translation units need to be rebuilt. When robot programs have a higher numbers of translation units, this can result in minutes worth of building when most object files may be up to date already. Old/slow build PC hardware can exacerbate the problem.

The issue stems from headers inside wpilib/opencv using sequences like the following:

ifdef EIGEN_FUNCTORS_PLUGIN

include EIGEN_FUNCTORS_PLUGIN

endif

In the case where the macros aren't defined, the expansion is empty, leading to gradle not knowing how to handle the #include line. Here are a few of examples:

https://github.com/wpilibsuite/allwpilib/blob/9b1bf5c7f1f624dd7ebd0f9cce1f0f178a95ce8c/wpimath/src/main/native/thirdparty/eigen/include/Eigen/src/Core/functors/StlFunctors.h#L158 https://github.com/wpilibsuite/allwpilib/blob/9b1bf5c7f1f624dd7ebd0f9cce1f0f178a95ce8c/wpimath/src/main/native/thirdparty/eigen/include/Eigen/src/Core/DenseBase.h#L660 https://github.com/wpilibsuite/allwpilib/blob/9b1bf5c7f1f624dd7ebd0f9cce1f0f178a95ce8c/wpimath/src/main/native/thirdparty/eigen/include/Eigen/src/Core/Matrix.h#L441

The opencv headers have the same problem with macros OPENCV_INCLUDE_PORT_FILE and OPENCV_STDINT_HEADER.

Sample output from .\gradlew build --debug

2023-04-15T21:51:40.862-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.IncrementalCompileFilesFactory] Cannot locate header file for '#include EIGEN_FUNCTORS_PLUGIN' in source file 'StlFunctors.h'. Assuming changed. 2023-04-15T21:51:40.862-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.IncrementalCompileFilesFactory] Cannot locate header file for '#include EIGEN_DENSEBASE_PLUGIN' in source file 'DenseBase.h'. Assuming changed. 2023-04-15T21:51:40.862-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.IncrementalCompileFilesFactory] Cannot locate header file for '#include EIGEN_MATRIXBASE_PLUGIN' in source file 'MatrixBase.h'. Assuming changed. 2023-04-15T21:51:40.862-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.IncrementalCompileFilesFactory] Cannot locate header file for '#include EIGEN_ARRAYBASE_PLUGIN' in source file 'ArrayBase.h'. Assuming changed. 2023-04-15T21:51:40.863-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.IncrementalCompileFilesFactory] Cannot locate header file for '#include EIGEN_PLAINOBJECTBASE_PLUGIN' in source file 'PlainObjectBase.h'. Assuming changed. 2023-04-15T21:51:40.863-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.IncrementalCompileFilesFactory] Cannot locate header file for '#include EIGEN_MATRIX_PLUGIN' in source file 'Matrix.h'. Assuming changed. 2023-04-15T21:51:40.863-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.IncrementalCompileFilesFactory] Cannot locate header file for '#include EIGEN_ARRAY_PLUGIN' in source file 'Array.h'. Assuming changed. 2023-04-15T21:51:40.863-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.IncrementalCompileFilesFactory] Cannot locate header file for '#include EIGEN_MAPBASE_PLUGIN' in source file 'MapBase.h'. Assuming changed. 2023-04-15T21:51:40.863-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.IncrementalCompileFilesFactory] Cannot locate header file for '#include EIGEN_VECTORWISEOP_PLUGIN' in source file 'VectorwiseOp.h'. Assuming changed. 2023-04-15T21:51:40.865-0400 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Build operation 'Processing source files' completed 2023-04-15T21:51:40.865-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.DefaultHeaderDependenciesCollector] After parsing the source files, Gradle cannot calculate the exact set of include files for ':compileFrcUserProgramDebugExecutableFrcUserProgramCpp'. Every file in the include search path will be considered a header dependency. 2023-04-15T21:51:40.865-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.DefaultHeaderDependenciesCollector] adding files in C:\Repos\FRC120\YtaRobot\src\main\include to header dependencies for :compileFrcUserProgramDebugExecutableFrcUserProgramCpp 2023-04-15T21:51:40.865-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.DefaultHeaderDependenciesCollector] adding files in C:\Users\FRC.gradle\caches\transforms-3\9c6bb2103a3d82450f87644c2c782003\transformed\wpilibNewCommands-cpp-2023.4.3-headers to header dependencies for :compileFrcUserProgramDebugExecutableFrcUserProgramCpp 2023-04-15T21:51:40.868-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.DefaultHeaderDependenciesCollector] adding files in C:\Users\FRC.gradle\caches\transforms-3\ae965e1859d74c01db2b3fd8527e3c6f\transformed\REVLib-cpp-2023.1.3-headers to header dependencies for :compileFrcUserProgramDebugExecutableFrcUserProgramCpp 2023-04-15T21:51:40.868-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.DefaultHeaderDependenciesCollector] adding files in C:\Users\FRC.gradle\caches\transforms-3\16c2e4ca63c776cbdd6f665d62feede4\transformed\REVLib-driver-2023.1.3-headers to header dependencies for :compileFrcUserProgramDebugExecutableFrcUserProgramCpp 2023-04-15T21:51:40.868-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.DefaultHeaderDependenciesCollector] adding files in C:\Users\FRC.gradle\caches\transforms-3\9bb6607890a98171a5d27614d7869828\transformed\wpiapi-cpp-5.30.4-headers to header dependencies for :compileFrcUserProgramDebugExecutableFrcUserProgramCpp 2023-04-15T21:51:40.870-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.DefaultHeaderDependenciesCollector] adding files in C:\Users\FRC.gradle\caches\transforms-3\a275bec10651059ff2d203c4c1a9eab9\transformed\api-cpp-5.30.4-headers to header dependencies for :compileFrcUserProgramDebugExecutableFrcUserProgramCpp 2023-04-15T21:51:40.872-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.DefaultHeaderDependenciesCollector] adding files in C:\Users\FRC.gradle\caches\transforms-3\c79a9f0154dbfa65398a6698d022290d\transformed\cci-5.30.4-headers to header dependencies for :compileFrcUserProgramDebugExecutableFrcUserProgramCpp 2023-04-15T21:51:40.875-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.DefaultHeaderDependenciesCollector] adding files in C:\Users\FRC.gradle\caches\transforms-3\e06242a3798af35219d5658561f632ac\transformed\tools-23.0.10-headers to header dependencies for :compileFrcUserProgramDebugExecutableFrcUserProgramCpp 2023-04-15T21:51:40.879-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.DefaultHeaderDependenciesCollector] adding files in C:\Users\FRC.gradle\caches\transforms-3\d36a5063d14d66f4cf78f633d073966e\transformed\wpilibc-cpp-2023.4.3-headers to header dependencies for :compileFrcUserProgramDebugExecutableFrcUserProgramCpp 2023-04-15T21:51:40.883-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.DefaultHeaderDependenciesCollector] adding files in C:\Users\FRC.gradle\caches\transforms-3\6de908f44183828b88b1804786e77788\transformed\ntcore-cpp-2023.4.3-headers to header dependencies for :compileFrcUserProgramDebugExecutableFrcUserProgramCpp 2023-04-15T21:51:40.884-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.DefaultHeaderDependenciesCollector] adding files in C:\Users\FRC.gradle\caches\transforms-3\cbbaac75b20bb565dca5e8089c410db2\transformed\hal-cpp-2023.4.3-headers to header dependencies for :compileFrcUserProgramDebugExecutableFrcUserProgramCpp 2023-04-15T21:51:40.885-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.DefaultHeaderDependenciesCollector] adding files in C:\Users\FRC.gradle\caches\transforms-3\062826165847ba6b02017b06274bdccb\transformed\wpimath-cpp-2023.4.3-headers to header dependencies for :compileFrcUserProgramDebugExecutableFrcUserProgramCpp 2023-04-15T21:51:40.898-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.DefaultHeaderDependenciesCollector] adding files in C:\Users\FRC.gradle\caches\transforms-3\f4c52b32b5e3a607487b45280649e26c\transformed\wpinet-cpp-2023.4.3-headers to header dependencies for :compileFrcUserProgramDebugExecutableFrcUserProgramCpp 2023-04-15T21:51:40.899-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.DefaultHeaderDependenciesCollector] adding files in C:\Users\FRC.gradle\caches\transforms-3\24fe1b9370cf9a13928bc07594c864b0\transformed\wpiutil-cpp-2023.4.3-headers to header dependencies for :compileFrcUserProgramDebugExecutableFrcUserProgramCpp 2023-04-15T21:51:40.901-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.DefaultHeaderDependenciesCollector] adding files in C:\Users\FRC.gradle\caches\transforms-3\355e8e3b3d3893789cfdc671987ca2ff\transformed\netcomm-2023.3.0-headers to header dependencies for :compileFrcUserProgramDebugExecutableFrcUserProgramCpp 2023-04-15T21:51:40.902-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.DefaultHeaderDependenciesCollector] adding files in C:\Users\FRC.gradle\caches\transforms-3\b64b4185a5c2ec4ab51c31afaec4d6a8\transformed\chipobject-2023.3.0-headers to header dependencies for :compileFrcUserProgramDebugExecutableFrcUserProgramCpp 2023-04-15T21:51:40.903-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.DefaultHeaderDependenciesCollector] adding files in C:\Users\FRC.gradle\caches\transforms-3\c94b174a8ff525c97be46d6f5269ca89\transformed\visa-2023.3.0-headers to header dependencies for :compileFrcUserProgramDebugExecutableFrcUserProgramCpp 2023-04-15T21:51:40.903-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.DefaultHeaderDependenciesCollector] adding files in C:\Users\FRC.gradle\caches\transforms-3\68d3ea9ad50b4d0a9ccb3ec09637559e\transformed\cameraserver-cpp-2023.4.3-headers to header dependencies for :compileFrcUserProgramDebugExecutableFrcUserProgramCpp 2023-04-15T21:51:40.904-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.DefaultHeaderDependenciesCollector] adding files in C:\Users\FRC.gradle\caches\transforms-3\d3b3db4768ab7e084aaf48eaf459a071\transformed\cscore-cpp-2023.4.3-headers to header dependencies for :compileFrcUserProgramDebugExecutableFrcUserProgramCpp 2023-04-15T21:51:40.904-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.DefaultHeaderDependenciesCollector] adding files in C:\Users\FRC.gradle\caches\transforms-3\b7d147c4eaae16901bb4cf8c6a5a001c\transformed\apriltag-cpp-2023.4.3-headers to header dependencies for :compileFrcUserProgramDebugExecutableFrcUserProgramCpp 2023-04-15T21:51:40.904-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.DefaultHeaderDependenciesCollector] adding files in C:\Users\FRC.gradle\caches\transforms-3\8ad7f433c3220a938f5e739b547fd881\transformed\opencv-cpp-4.6.0-4-headers to header dependencies for :compileFrcUserProgramDebugExecutableFrcUserProgramCpp 2023-04-15T21:51:40.919-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.DefaultHeaderDependenciesCollector] adding files in C:\Users\Public\wpilib\2023\roborio\arm-nilrt-linux-gnueabi\sysroot\usr\lib\gcc\arm-nilrt-linux-gnueabi\12\include to header dependencies for :compileFrcUserProgramDebugExecutableFrcUserProgramCpp 2023-04-15T21:51:40.920-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.DefaultHeaderDependenciesCollector] adding files in C:\Users\Public\wpilib\2023\roborio\arm-nilrt-linux-gnueabi\sysroot\usr\lib\gcc\arm-nilrt-linux-gnueabi\12\include-fixed to header dependencies for :compileFrcUserProgramDebugExecutableFrcUserProgramCpp 2023-04-15T21:51:40.920-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.DefaultHeaderDependenciesCollector] adding files in C:\Users\Public\wpilib\2023\roborio\arm-nilrt-linux-gnueabi\sysroot\usr\include\c++\12 to header dependencies for :compileFrcUserProgramDebugExecutableFrcUserProgramCpp 2023-04-15T21:51:40.929-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.DefaultHeaderDependenciesCollector] adding files in C:\Users\Public\wpilib\2023\roborio\arm-nilrt-linux-gnueabi\sysroot\usr\include\c++\12\arm-nilrt-linux-gnueabi to header dependencies for :compileFrcUserProgramDebugExecutableFrcUserProgramCpp 2023-04-15T21:51:40.930-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.DefaultHeaderDependenciesCollector] adding files in C:\Users\Public\wpilib\2023\roborio\arm-nilrt-linux-gnueabi\sysroot\usr\include\c++\12\backward to header dependencies for :compileFrcUserProgramDebugExecutableFrcUserProgramCpp 2023-04-15T21:51:40.930-0400 [INFO] [org.gradle.language.nativeplatform.internal.incremental.DefaultHeaderDependenciesCollector] adding files in C:\Users\Public\wpilib\2023\roborio\arm-nilrt-linux-gnueabi\sysroot\usr\include to header dependencies for :compileFrcUserProgramDebugExecutableFrcUserProgramCpp 2023-04-15T21:51:41.047-0400 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Build operation 'Snapshot inputs and outputs before executing task ':compileFrcUserProgramDebugExecutableFrcUserProgramCpp'' completed

ThadHouse commented 1 year ago

I had thought we had the workaround for this for robot projects, but it looks like its only actually in place for the allwpilib build.

You can work around this now by adding the following code to settings.gradle

Properties props = System.getProperties();
props.setProperty("org.gradle.internal.native.headers.unresolved.dependencies.ignore", "true");
dstalter4 commented 1 year ago

Thanks, @ThadHouse. I tried your suggestion and can confirm it does fix the issue when placed into the robot project's settings.gradle.