[build] Clean up CMake files (#6802)

Explicitly list required components when using FindJava and FindJNI
Consolidate find_package calls for Java, JNI, and OpenCV into the root CMakeLists.txt file
Remove references to main_lib_dest
Install missing generated headers
Flatten some if statements
Use LinkMacOSGUI macro instead of hand rolling it
Stop installing OpenCV libraries and an extra ntcorejni library; OpenCV JAR will still be installed to make it easy to use
Only print platform version on Windows
Prevent GUI modules from being built when wpimath is off, which would otherwise cause a build failure
Simplify build configuration checks
Clean up fieldImages JAR creation
Place built JARs in the same subdir as installed JARs
Remove unnecessary JAR includes
Remove extra directories in target_include_directories
Improve CMake docs
This commit is contained in:
Gold856
2024-07-11 18:01:05 -04:00
committed by GitHub
parent 27a2e02b52
commit bf75c03218
21 changed files with 132 additions and 253 deletions

View File

@@ -12,6 +12,7 @@ endif()
if("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Windows")
set(CMAKE_SYSTEM_VERSION 10.0.18362.0 CACHE STRING INTERNAL FORCE)
set(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION 10.0.18362.0 CACHE STRING INTERNAL FORCE)
message(STATUS "Platform version: ${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}")
endif()
cmake_minimum_required(VERSION 3.11)
@@ -23,11 +24,10 @@ if(POLICY CMP0135)
cmake_policy(SET CMP0135 NEW)
endif()
message(STATUS "Platform version: ${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}")
set(WPILIB_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
include(CPack)
include(OptionValidation)
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
@@ -35,7 +35,6 @@ set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${WPILIB_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${WPILIB_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${WPILIB_BINARY_DIR}/bin)
set(CMAKE_JAVA_TARGET_OUTPUT_DIR ${WPILIB_BINARY_DIR}/jar)
# use, i.e. don't skip the full RPATH for the build tree
set(CMAKE_SKIP_BUILD_RPATH FALSE)
@@ -87,28 +86,6 @@ if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "" FORCE)
endif()
if(WITH_JAVA AND NOT BUILD_SHARED_LIBS)
message(
FATAL_ERROR
"
FATAL: Cannot build static libs with Java enabled.
Static libs requires both BUILD_SHARED_LIBS=OFF and
WITH_JAVA=OFF
"
)
endif()
if(WITH_SIMULATION_MODULES AND NOT BUILD_SHARED_LIBS)
message(
FATAL_ERROR
"
FATAL: Cannot build static libs with simulation modules enabled.
Static libs requires both BUILD_SHARED_LIBS=OFF and
WITH_SIMULATION_MODULES=OFF
"
)
endif()
if(NOT WITH_JAVA OR NOT WITH_CSCORE)
if(NOT "${OPENCV_JAVA_INSTALL_DIR}" STREQUAL "")
message(
@@ -121,81 +98,24 @@ It will be ignored.
endif()
endif()
if(NOT WITH_WPILIB AND WITH_SIMULATION_MODULES)
message(
FATAL_ERROR
"
FATAL: Cannot build simulation modules with wpilib disabled.
Enable wpilib by setting WITH_WPILIB=ON
"
)
endif()
wpilib_config(OPTIONS WITH_JAVA REQUIRES BUILD_SHARED_LIBS)
if(NOT WITH_NTCORE AND WITH_CSCORE)
message(
FATAL_ERROR
"
FATAL: Cannot build cameraserver without ntcore.
Enable ntcore by setting WITH_NTCORE=ON
"
)
endif()
wpilib_config(OPTIONS WITH_SIMULATION_MODULES REQUIRES BUILD_SHARED_LIBS WITH_WPILIB WITH_NTCORE)
if(NOT WITH_NTCORE AND WITH_GUI)
message(
FATAL_ERROR
"
FATAL: Cannot build GUI modules without ntcore.
Enable ntcore by setting WITH_NTCORE=ON
"
)
endif()
wpilib_config(OPTIONS WITH_CSCORE REQUIRES WITH_NTCORE)
if(NOT WITH_NTCORE AND WITH_SIMULATION_MODULES)
message(
FATAL_ERROR
"
FATAL: Cannot build simulation modules without ntcore.
Enable ntcore by setting WITH_NTCORE=ON
"
)
endif()
wpilib_config(OPTIONS WITH_GUI REQUIRES WITH_NTCORE WITH_WPIMATH)
if(NOT WITH_NTCORE AND WITH_WPILIB)
message(
FATAL_ERROR
"
FATAL: Cannot build wpilib without ntcore.
Enable ntcore by setting WITH_NTCORE=ON
"
)
endif()
wpilib_config(OPTIONS WITH_WPILIB REQUIRES WITH_NTCORE WITH_WPIMATH)
if(NOT WITH_WPIMATH AND WITH_WPILIB)
message(
FATAL_ERROR
"
FATAL: Cannot build wpilib without wpimath.
Enable wpimath by setting WITH_WPIMATH=ON
"
)
endif()
if(NOT WITH_WPIUNITS AND WITH_WPIMATH AND WITH_JAVA)
message(
FATAL_ERROR
"
FATAL: Cannot build Java wpimath without wpiunits.
Enable wpiunits by setting WITH_WPIUNITS=ON or disable the Java build by setting WITH_JAVA=OFF
"
)
endif()
wpilib_config(OPTIONS WITH_WPIMATH WITH_JAVA REQUIRES WITH_WPIUNITS)
set(include_dest include)
set(java_lib_dest java)
set(jni_lib_dest jni)
if(WITH_JAVA)
if(WITH_JAVA OR WITH_JAVA_SOURCE)
set(CMAKE_JAVA_COMPILE_FLAGS "-encoding" "UTF8" "-Xlint:unchecked")
find_package(Java REQUIRED COMPONENTS Development)
find_package(JNI REQUIRED COMPONENTS JVM)
endif()
find_package(LIBSSH 0.7.1)
@@ -382,6 +302,7 @@ endif()
if(WITH_CSCORE)
set(CAMERASERVER_DEP_REPLACE "find_dependency(cameraserver)")
set(CSCORE_DEP_REPLACE "find_dependency(cscore)")
find_package(OpenCV REQUIRED)
add_subdirectory(cscore)
add_subdirectory(cameraserver)
endif()

View File

@@ -108,6 +108,12 @@ After build, the easiest way to use the libraries is to install them. Run the fo
sudo cmake --build . --target install
```
## Preparing to use the installed libraries
On Windows, make sure the directories for the libraries you built are on PATH. For wpilib, the default install location is `C:\Program Files (x86)\allwpilib`. If you built other libraries like OpenCV and protobuf from source, install them, and add the install directories to PATH. This ensures CMake can locate the libraries.
You will also want to add the directories where the DLLs are located (usually the `bin` subdirectory of the install directory) to PATH so they can be loaded by your program. If you are using OpenCV and Java, the `opencv_java` DLL is located in either the `lib` subdirectory if you built but didn't install OpenCV, or the `java` subdirectory if you did install OpenCV.
## Using the installed libraries for C++.
Using the libraries from C++ is the easiest way to use the built libraries.
@@ -134,12 +140,11 @@ cmake /path/to/folder/containing/CMakeLists
After that, run `cmake --build .`. That will create your executable. Then you should be able to run `./my_vision_app` to run your application.
## Using the installed libraries for Java
Using the built JARs is move involved than using the C++ libraries, but mostly consists of adding the correct directories to PATH.
Using the built JARs is more involved than using the C++ libraries, but the additional work involves providing the paths to various libraries and JARs when needed.
Add the directory where the JARs are located (e.g, `/usr/local/java`) to PATH. If you are on Windows, you also need to add the `lib`, `bin`, and `share` directories to PATH. Then, create a new folder to contain your project. Add the following code below to a `CMakeLists.txt` file in that directory.
Create a new folder to contain your project. Add the following code below to a `CMakeLists.txt` file in that directory.
```cmake
cmake_minimum_required(VERSION 3.11)

View File

@@ -27,8 +27,6 @@ set(APRILTAGLIB_SRCS
file(GLOB apriltag_jni_src src/main/native/cpp/jni/AprilTagJNI.cpp)
if(WITH_JAVA)
find_package(Java REQUIRED)
find_package(JNI REQUIRED)
include(UseJava)
set(CMAKE_JNI_TARGET true)
@@ -47,8 +45,6 @@ if(WITH_JAVA)
NO_DEFAULT_PATH
)
set(CMAKE_JAVA_INCLUDE_PATH apriltag.jar ${EJML_JARS} ${JACKSON_JARS})
file(GLOB_RECURSE JAVA_SOURCES src/main/java/*.java)
file(
GLOB_RECURSE JAVA_RESOURCES
@@ -60,8 +56,15 @@ if(WITH_JAVA)
SOURCES ${JAVA_SOURCES}
RESOURCES
NAMESPACE "edu/wpi/first/apriltag" ${JAVA_RESOURCES}
INCLUDE_JARS wpimath_jar wpiunits_jar ${EJML_JARS} wpiutil_jar ${OPENCV_JAR_FILE}
INCLUDE_JARS
wpimath_jar
wpiunits_jar
wpiutil_jar
${EJML_JARS}
${OPENCV_JAR_FILE}
${JACKSON_JARS}
OUTPUT_NAME apriltag
OUTPUT_DIR ${WPILIB_BINARY_DIR}/${java_lib_dest}
GENERATE_NATIVE_HEADERS apriltag_jni_headers
)
set_property(TARGET apriltag_jar PROPERTY FOLDER "java")
@@ -83,7 +86,6 @@ if(WITH_JAVA)
endif()
if(WITH_JAVA_SOURCE)
find_package(Java REQUIRED)
include(UseJava)
file(GLOB APRILTAG_SOURCES src/main/java/edu/wpi/first/apriltag/*.java)
add_jar(
@@ -94,6 +96,7 @@ if(WITH_JAVA_SOURCE)
"edu/wpi/first/apriltag/jni"
src/main/java/edu/wpi/first/apriltag/jni/AprilTagJNI.java
OUTPUT_NAME apriltag-sources
OUTPUT_DIR ${WPILIB_BINARY_DIR}/${java_lib_dest}
)
get_property(APRILTAG_SRC_JAR_FILE TARGET apriltag_src_jar PROPERTY JAR_FILE)

View File

@@ -3,15 +3,11 @@ project(cameraserver)
include(CompileWarnings)
include(AddTest)
find_package(OpenCV REQUIRED)
# Java bindings
if(WITH_JAVA)
find_package(Java REQUIRED)
include(UseJava)
#find java files, copy them locally
#find JAR file, copy it locally
set(OPENCV_JAVA_INSTALL_DIR ${OpenCV_INSTALL_PATH}/share/java/opencv4)
find_file(
@@ -32,6 +28,7 @@ if(WITH_JAVA)
${JAVA_SOURCES}
INCLUDE_JARS wpiutil_jar cscore_jar ntcore_jar ${OPENCV_JAR_FILE}
OUTPUT_NAME cameraserver
OUTPUT_DIR ${WPILIB_BINARY_DIR}/${java_lib_dest}
)
set_property(TARGET cameraserver_jar PROPERTY FOLDER "java")
@@ -44,7 +41,6 @@ if(WITH_JAVA)
endif()
if(WITH_JAVA_SOURCE)
find_package(Java REQUIRED)
include(UseJava)
file(GLOB CAMERASERVER_SOURCES src/main/java/edu/wpi/first/cameraserver/*.java)
file(GLOB VISION_SOURCES src/main/java/edu/wpi/first/vision/*.java)
@@ -54,6 +50,7 @@ if(WITH_JAVA_SOURCE)
NAMESPACE "edu/wpi/first/cameraserver" ${CAMERASERVER_SOURCES}
NAMESPACE "edu/wpi/first/vision" ${VISION_SOURCES}
OUTPUT_NAME cameraserver-sources
OUTPUT_DIR ${WPILIB_BINARY_DIR}/${java_lib_dest}
)
get_property(CAMERASERVER_SRC_JAR_FILE TARGET cameraserver_src_jar PROPERTY JAR_FILE)

View File

@@ -0,0 +1,29 @@
function(wpilib_config)
cmake_parse_arguments(config "" "" "OPTIONS;REQUIRES" ${ARGN})
foreach(opt ${config_OPTIONS})
if(NOT ${opt})
return()
endif()
endforeach()
foreach(required_opt ${config_REQUIRES})
if(NOT ${required_opt})
list(JOIN config_OPTIONS " and " options_list)
list(LENGTH config_OPTIONS option_len)
if(option_len GREATER 1)
set(requires require)
set(option_msg "one of the listed options")
else()
set(requires requires)
set(option_msg ${options_list})
endif()
message(
FATAL_ERROR
"
FATAL: ${options_list} ${requires} ${required_opt}.
Either enable ${required_opt} or disable ${option_msg}.
"
)
endif()
endforeach()
endfunction()

View File

@@ -5,8 +5,6 @@ include(CompileWarnings)
include(AddTest)
include(LinkMacOSGUI)
find_package(OpenCV REQUIRED)
file(GLOB cscore_native_src src/main/native/cpp/*.cpp)
file(GLOB cscore_linux_src src/main/native/linux/*.cpp)
file(GLOB cscore_osx_src src/main/native/osx/*.cpp)
@@ -16,23 +14,21 @@ file(GLOB cscore_windows_src src/main/native/windows/*.cpp)
add_library(cscore ${cscore_native_src})
set_target_properties(cscore PROPERTIES DEBUG_POSTFIX "d")
if(NOT MSVC)
if(APPLE)
target_sources(cscore PRIVATE ${cscore_osx_src} ${cscore_osx_objc_src})
target_compile_options(cscore PRIVATE "-fobjc-arc")
set_target_properties(
cscore
PROPERTIES
LINK_FLAGS
"-framework CoreFoundation -framework AVFoundation -framework Foundation -framework CoreMedia -framework CoreVideo"
)
else()
target_sources(cscore PRIVATE ${cscore_linux_src})
endif()
else()
if(APPLE)
target_sources(cscore PRIVATE ${cscore_osx_src} ${cscore_osx_objc_src})
target_compile_options(cscore PRIVATE "-fobjc-arc")
set_target_properties(
cscore
PROPERTIES
LINK_FLAGS
"-framework CoreFoundation -framework AVFoundation -framework Foundation -framework CoreMedia -framework CoreVideo"
)
elseif(MSVC)
target_sources(cscore PRIVATE ${cscore_windows_src})
target_compile_definitions(cscore PUBLIC -DNOMINMAX)
target_compile_definitions(cscore PRIVATE -D_CRT_SECURE_NO_WARNINGS)
else()
target_sources(cscore PRIVATE ${cscore_linux_src})
endif()
target_include_directories(
@@ -81,12 +77,9 @@ endforeach()
# Java bindings
if(WITH_JAVA)
find_package(Java REQUIRED)
find_package(JNI REQUIRED)
include(UseJava)
#find java files, copy them locally
#find JAR file, copy it locally
if("${OPENCV_JAVA_INSTALL_DIR}" STREQUAL "")
set(OPENCV_JAVA_INSTALL_DIR ${OpenCV_INSTALL_PATH}/share/java/opencv4)
endif()
@@ -101,24 +94,6 @@ if(WITH_JAVA)
${OpenCV_INSTALL_PATH}/share/OpenCV/java
NO_DEFAULT_PATH
)
find_file(
OPENCV_JNI_FILE
NAMES
libopencv_java${OpenCV_VERSION_MAJOR}${OpenCV_VERSION_MINOR}${OpenCV_VERSION_PATCH}.so
libopencv_java${OpenCV_VERSION_MAJOR}${OpenCV_VERSION_MINOR}${OpenCV_VERSION_PATCH}.dylib
opencv_java${OpenCV_VERSION_MAJOR}${OpenCV_VERSION_MINOR}${OpenCV_VERSION_PATCH}.dll
PATHS
${OPENCV_JAVA_INSTALL_DIR}
${OpenCV_INSTALL_PATH}/bin
${OpenCV_INSTALL_PATH}/bin/Release
${OpenCV_INSTALL_PATH}/bin/Debug
${OpenCV_INSTALL_PATH}/lib
${OpenCV_INSTALL_PATH}/lib/Release
${OpenCV_INSTALL_PATH}/lib/Debug
${OpenCV_INSTALL_PATH}/lib/jni
${OpenCV_INSTALL_PATH}/share/java/opencv4
NO_DEFAULT_PATH
)
file(GLOB cscore_jni_src src/main/native/cpp/jni/CameraServerJNI.cpp)
@@ -130,6 +105,7 @@ if(WITH_JAVA)
${JAVA_SOURCES}
INCLUDE_JARS wpiutil_jar ${OPENCV_JAR_FILE}
OUTPUT_NAME cscore
OUTPUT_DIR ${WPILIB_BINARY_DIR}/${java_lib_dest}
GENERATE_NATIVE_HEADERS cscore_jni_headers
)
set_property(TARGET cscore_jar PROPERTY FOLDER "java")
@@ -138,27 +114,6 @@ if(WITH_JAVA)
install_jar_exports(TARGETS cscore_jar FILE cscore_jar.cmake DESTINATION share/cscore)
install(FILES ${OPENCV_JAR_FILE} DESTINATION "${java_lib_dest}")
if(MSVC)
install(FILES ${OPENCV_JNI_FILE} DESTINATION "${jni_lib_dest}")
foreach(cvFile ${OpenCV_LIBS})
find_file(
${cvFile}Loc
NAMES
${cvFile}${OpenCV_VERSION_MAJOR}${OpenCV_VERSION_MINOR}${OpenCV_VERSION_PATCH}.dll
${cvFile}${OpenCV_VERSION_MAJOR}${OpenCV_VERSION_MINOR}${OpenCV_VERSION_PATCH}d.dll
PATHS
${OPENCV_JAVA_INSTALL_DIR}
${OpenCV_INSTALL_PATH}/bin
${OpenCV_INSTALL_PATH}/bin/Release
${OpenCV_INSTALL_PATH}/bin/Debug
${OpenCV_INSTALL_PATH}/lib
NO_DEFAULT_PATH
)
install(FILES ${${cvFile}Loc} DESTINATION "${jni_lib_dest}")
endforeach()
endif()
add_library(cscorejni ${cscore_jni_src})
wpilib_target_warnings(cscorejni)
target_link_libraries(cscorejni PUBLIC cscore wpiutil ${OpenCV_LIBS})
@@ -173,7 +128,6 @@ if(WITH_JAVA)
endif()
if(WITH_JAVA_SOURCE)
find_package(Java REQUIRED)
include(UseJava)
file(GLOB CSCORE_SOURCES src/main/java/edu/wpi/first/cscore/*.java)
file(GLOB CSCORE_RAW_SOURCES src/main/java/edu/wpi/first/cscore/raw/*.java)
@@ -183,6 +137,7 @@ if(WITH_JAVA_SOURCE)
NAMESPACE "edu/wpi/first/cscore" ${CSCORE_SOURCES}
NAMESPACE "edu/wpi/first/cscore/raw" ${CSCORE_RAW_SOURCES}
OUTPUT_NAME cscore-sources
OUTPUT_DIR ${WPILIB_BINARY_DIR}/${java_lib_dest}
)
get_property(CSCORE_SRC_JAR_FILE TARGET cscore_src_jar PROPERTY JAR_FILE)

View File

@@ -4,11 +4,9 @@ include(CompileWarnings)
include(GenResources)
if(WITH_JAVA)
find_package(Java REQUIRED)
include(UseJava)
file(GLOB JACKSON_JARS "${WPILIB_BINARY_DIR}/wpiutil/thirdparty/jackson/*.jar")
set(CMAKE_JAVA_INCLUDE_PATH fieldImages.jar ${JACKSON_JARS})
file(GLOB_RECURSE JAVA_SOURCES src/main/java/*.java)
file(
@@ -23,13 +21,12 @@ if(WITH_JAVA)
SOURCES ${JAVA_SOURCES}
RESOURCES
NAMESPACE "edu/wpi/first/fields" ${JAVA_RESOURCES}
INCLUDE_JARS ${JACKSON_JARS}
OUTPUT_DIR ${WPILIB_BINARY_DIR}/${java_lib_dest}
OUTPUT_NAME fieldImages
)
get_property(FIELD_IMAGES_JAR_FILE TARGET field_images_jar PROPERTY JAR_FILE)
install(FILES ${FIELD_IMAGES_JAR_FILE} DESTINATION "${java_lib_dest}")
set_property(TARGET field_images_jar PROPERTY FOLDER "java")
install_jar(field_images_jar DESTINATION ${java_lib_dest})
endif()
generate_resources(

View File

@@ -43,8 +43,6 @@ install(EXPORT hal DESTINATION share/hal)
# Java bindings
if(WITH_JAVA)
find_package(Java REQUIRED)
find_package(JNI REQUIRED)
include(UseJava)
file(GLOB_RECURSE hal_shared_jni_src src/main/native/cpp/jni/*.cpp)
@@ -57,6 +55,7 @@ if(WITH_JAVA)
${JAVA_SOURCES}
INCLUDE_JARS wpiutil_jar
OUTPUT_NAME wpiHal
OUTPUT_DIR ${WPILIB_BINARY_DIR}/${java_lib_dest}
GENERATE_NATIVE_HEADERS hal_jni_headers
)
set_property(TARGET hal_jar PROPERTY FOLDER "java")
@@ -80,7 +79,6 @@ if(WITH_JAVA)
endif()
if(WITH_JAVA_SOURCE)
find_package(Java REQUIRED)
include(UseJava)
file(GLOB HAL_SOURCES src/main/java/edu/wpi/first/hal/*.java src/generated/main/java/*.java)
file(GLOB HAL_CAN_SOURCES src/main/java/edu/wpi/first/hal/can/*.java)
@@ -97,6 +95,7 @@ if(WITH_JAVA_SOURCE)
NAMESPACE "edu/wpi/first/hal/simulation" ${HAL_SIMULATION_SOURCES}
NAMESPACE "edu/wpi/first/hal/util" ${HAL_UTIL_SOURCES}
OUTPUT_NAME wpiHal-sources
OUTPUT_DIR ${WPILIB_BINARY_DIR}/${java_lib_dest}
)
get_property(HAL_SRC_JAR_FILE TARGET hal_src_jar PROPERTY JAR_FILE)

View File

@@ -1,4 +1,5 @@
include(FetchContent)
include(LinkMacOSGUI)
fetchcontent_declare(
glfw3
@@ -82,14 +83,12 @@ endif()
target_compile_definitions(imgui PUBLIC IMGUI_IMPL_OPENGL_LOADER_GL3W)
if(MSVC)
target_sources(imgui PRIVATE ${imgui_SOURCE_DIR}/backends/imgui_impl_dx11.cpp)
elseif(APPLE)
target_compile_options(imgui PRIVATE -fobjc-arc)
wpilib_link_macos_gui(imgui)
target_sources(imgui PRIVATE ${imgui_SOURCE_DIR}/backends/imgui_impl_metal.mm)
else()
if(APPLE)
target_compile_options(imgui PRIVATE -fobjc-arc)
set_target_properties(imgui PROPERTIES LINK_FLAGS "-framework Metal -framework QuartzCore")
target_sources(imgui PRIVATE ${imgui_SOURCE_DIR}/backends/imgui_impl_metal.mm)
else()
#target_sources(imgui PRIVATE ${imgui_SOURCE_DIR}/backends/imgui_impl_opengl3.cpp)
endif()
#target_sources(imgui PRIVATE ${imgui_SOURCE_DIR}/backends/imgui_impl_opengl3.cpp)
endif()
target_link_libraries(imgui PUBLIC glfw)
target_include_directories(

View File

@@ -39,14 +39,10 @@ install(EXPORT ntcore DESTINATION share/ntcore)
# Java bindings
if(WITH_JAVA)
find_package(Java REQUIRED)
find_package(JNI REQUIRED)
include(UseJava)
file(GLOB QUICKBUF_JAR ${WPILIB_BINARY_DIR}/wpiutil/thirdparty/quickbuf/*.jar)
set(CMAKE_JAVA_INCLUDE_PATH wpimath.jar ${QUICKBUF_JAR})
file(GLOB ntcore_jni_src src/main/native/cpp/jni/*.cpp src/generated/main/native/cpp/jni/*.cpp)
file(GLOB_RECURSE JAVA_SOURCES src/main/java/*.java src/generated/main/java/*.java)
@@ -55,8 +51,9 @@ if(WITH_JAVA)
add_jar(
ntcore_jar
${JAVA_SOURCES}
INCLUDE_JARS wpiutil_jar
INCLUDE_JARS wpiutil_jar ${QUICKBUF_JAR}
OUTPUT_NAME ntcore
OUTPUT_DIR ${WPILIB_BINARY_DIR}/${java_lib_dest}
GENERATE_NATIVE_HEADERS ntcore_jni_headers
)
set_property(TARGET ntcore_jar PROPERTY FOLDER "java")
@@ -70,10 +67,6 @@ if(WITH_JAVA)
set_property(TARGET ntcorejni PROPERTY FOLDER "libraries")
if(MSVC)
install(TARGETS ntcorejni RUNTIME DESTINATION "${jni_lib_dest}" COMPONENT Runtime)
endif()
target_link_libraries(ntcorejni PRIVATE ntcore_jni_headers)
add_dependencies(ntcorejni ntcore_jar)
@@ -82,7 +75,6 @@ if(WITH_JAVA)
endif()
if(WITH_JAVA_SOURCE)
find_package(Java REQUIRED)
include(UseJava)
file(
GLOB NTCORE_SOURCES
@@ -94,6 +86,7 @@ if(WITH_JAVA_SOURCE)
RESOURCES
NAMESPACE "edu/wpi/first/networktables" ${NTCORE_SOURCES}
OUTPUT_NAME ntcore-sources
OUTPUT_DIR ${WPILIB_BINARY_DIR}/${java_lib_dest}
)
get_property(NTCORE_SRC_JAR_FILE TARGET ntcore_src_jar PROPERTY JAR_FILE)

View File

@@ -5,7 +5,6 @@ include(CompileWarnings)
include(AddTest)
if(WITH_JAVA)
find_package(Java REQUIRED)
include(UseJava)
file(GLOB_RECURSE JAVA_SOURCES src/main/java/*.java)
@@ -22,6 +21,7 @@ if(WITH_JAVA)
wpiutil_jar
wpilibj_jar
OUTPUT_NAME romiVendordep
OUTPUT_DIR ${WPILIB_BINARY_DIR}/${java_lib_dest}
)
set_property(TARGET romiVendordep_jar PROPERTY FOLDER "java")
@@ -34,7 +34,6 @@ if(WITH_JAVA)
endif()
if(WITH_JAVA_SOURCE)
find_package(Java REQUIRED)
include(UseJava)
file(GLOB_RECURSE ROMIVENDORDEP_SOURCES src/main/java/*.java)
add_jar(
@@ -42,6 +41,7 @@ if(WITH_JAVA_SOURCE)
RESOURCES
NAMESPACE "edu/wpi/first/wpilibj/romi" ${ROMIVENDORDEP_SOURCES}
OUTPUT_NAME romiVendordep-sources
OUTPUT_DIR ${WPILIB_BINARY_DIR}/${java_lib_dest}
)
get_property(ROMIVENDORDEP_SRC_JAR_FILE TARGET romiVendordep_src_jar PROPERTY JAR_FILE)
@@ -66,7 +66,7 @@ target_include_directories(
$<INSTALL_INTERFACE:${include_dest}/romiVendordep>
)
install(TARGETS romiVendordep EXPORT romivendordep DESTINATION "${main_lib_dest}")
install(TARGETS romiVendordep EXPORT romivendordep)
export(TARGETS romiVendordep FILE romivendordep.cmake NAMESPACE romivendordep::)
install(DIRECTORY src/main/native/include/ DESTINATION "${include_dest}/romiVendordep")

View File

@@ -13,5 +13,5 @@ target_include_directories(halsim_xrp PRIVATE src/main/native/include)
set_property(TARGET halsim_xrp PROPERTY FOLDER "libraries")
install(TARGETS halsim_xrp EXPORT halsim_xrp DESTINATION "${main_lib_dest}")
install(TARGETS halsim_xrp EXPORT halsim_xrp)
export(TARGETS halsim_xrp FILE halsim_xrp.cmake NAMESPACE halsim_xrp::)

View File

@@ -30,14 +30,12 @@ target_include_directories(
if(MSVC)
target_sources(wpigui PRIVATE ${wpigui_windows_src})
elseif(APPLE)
target_compile_options(wpigui PRIVATE -fobjc-arc)
wpilib_link_macos_gui(wpigui)
target_sources(wpigui PRIVATE ${wpigui_mac_src})
else()
if(APPLE)
target_compile_options(wpigui PRIVATE -fobjc-arc)
set_target_properties(wpigui PROPERTIES LINK_FLAGS "-framework Metal -framework QuartzCore")
target_sources(wpigui PRIVATE ${wpigui_mac_src})
else()
target_sources(wpigui PRIVATE ${wpigui_unix_src})
endif()
target_sources(wpigui PRIVATE ${wpigui_unix_src})
endif()
add_executable(wpiguidev src/dev/native/cpp/main.cpp)

View File

@@ -5,7 +5,6 @@ include(CompileWarnings)
include(AddTest)
if(WITH_JAVA)
find_package(Java REQUIRED)
include(UseJava)
file(GLOB_RECURSE JAVA_SOURCES src/main/java/*.java src/generated/main/java/*.java)
@@ -24,6 +23,7 @@ if(WITH_JAVA)
wpiutil_jar
wpilibj_jar
OUTPUT_NAME wpilibNewCommands
OUTPUT_DIR ${WPILIB_BINARY_DIR}/${java_lib_dest}
)
set_property(TARGET wpilibNewCommands_jar PROPERTY FOLDER "java")
@@ -36,7 +36,6 @@ if(WITH_JAVA)
endif()
if(WITH_JAVA_SOURCE)
find_package(Java REQUIRED)
include(UseJava)
file(GLOB WPILIBNEWCOMMANDS_SOURCES src/main/java/edu/wpi/first/wpilibj2/command/*.java)
file(
@@ -50,6 +49,7 @@ if(WITH_JAVA_SOURCE)
NAMESPACE "edu/wpi/first/wpilibj2/command" ${WPILIBNEWCOMMANDS_SOURCES}
NAMESPACE "edu/wpi/first/wpilibj2/command/button" ${WPILIBNEWCOMMANDS_BUTTON_SOURCES}
OUTPUT_NAME wpilibNewCommands-sources
OUTPUT_DIR ${WPILIB_BINARY_DIR}/${java_lib_dest}
)
get_property(WPILIBNEWCOMMANDS_SRC_JAR_FILE TARGET wpilibNewCommands_src_jar PROPERTY JAR_FILE)
@@ -82,6 +82,10 @@ target_include_directories(
install(TARGETS wpilibNewCommands EXPORT wpilibnewcommands)
export(TARGETS wpilibNewCommands FILE wpilibnewcommands.cmake NAMESPACE wpilibnewcommands::)
install(DIRECTORY src/main/native/include/ DESTINATION "${include_dest}/wpilibNewCommands")
install(
DIRECTORY src/generated/main/native/include/
DESTINATION "${include_dest}/wpilibNewCommands"
)
configure_file(
wpilibnewcommands-config.cmake.in

View File

@@ -25,7 +25,6 @@ target_include_directories(
wpilib_target_warnings(wpilibc)
if(WITH_CSCORE)
find_package(OpenCV)
target_link_libraries(wpilibc PUBLIC cameraserver cscore ${OpenCV_LIBS})
else()
target_compile_definitions(wpilibc PRIVATE DYNAMIC_CAMERA_SERVER)
@@ -43,6 +42,7 @@ set_property(TARGET wpilibc PROPERTY FOLDER "libraries")
install(TARGETS wpilibc EXPORT wpilibc)
export(TARGETS wpilibc FILE wpilibc.cmake NAMESPACE wpilibc::)
install(DIRECTORY src/main/native/include/ DESTINATION "${include_dest}/wpilibc")
install(DIRECTORY src/generated/main/native/include/ DESTINATION "${include_dest}/wpilibc")
configure_file(wpilibc-config.cmake.in ${WPILIB_BINARY_DIR}/wpilibc-config.cmake)
install(FILES ${WPILIB_BINARY_DIR}/wpilibc-config.cmake DESTINATION share/wpilibc)

View File

@@ -2,8 +2,6 @@ project(wpilibj)
# Java bindings
if(WITH_JAVA)
find_package(OpenCV REQUIRED)
find_package(Java REQUIRED)
include(UseJava)
set(OPENCV_JAVA_INSTALL_DIR ${OpenCV_INSTALL_PATH}/share/java/opencv4)
@@ -41,6 +39,7 @@ if(WITH_JAVA)
wpiunits_jar
wpiutil_jar
OUTPUT_NAME wpilibj
OUTPUT_DIR ${WPILIB_BINARY_DIR}/${java_lib_dest}
)
set_property(TARGET wpilibj_jar PROPERTY FOLDER "java")
@@ -51,7 +50,6 @@ if(WITH_JAVA)
endif()
if(WITH_JAVA_SOURCE)
find_package(Java REQUIRED)
include(UseJava)
file(
GLOB WPILIBJ_SOURCES
@@ -95,6 +93,7 @@ if(WITH_JAVA_SOURCE)
NAMESPACE "edu/wpi/first/wpilibj/smartdashboard" ${WPILIBJ_SMARTDASHBOARD_SOURCES}
NAMESPACE "edu/wpi/first/wpilibj/util" ${WPILIBJ_UTIL_SOURCES}
OUTPUT_NAME wpilibj-sources
OUTPUT_DIR ${WPILIB_BINARY_DIR}/${java_lib_dest}
)
get_property(WPILIBJ_SRC_JAR_FILE TARGET wpilibj_src_jar PROPERTY JAR_FILE)

View File

@@ -31,8 +31,6 @@ file(
# Java bindings
if(WITH_JAVA)
find_package(Java REQUIRED)
find_package(JNI REQUIRED)
include(UseJava)
if(NOT EXISTS "${WPILIB_BINARY_DIR}/wpimath/thirdparty/ejml/ejml-simple-0.43.1.jar")
@@ -77,8 +75,6 @@ if(WITH_JAVA)
file(GLOB JACKSON_JARS "${WPILIB_BINARY_DIR}/wpiutil/thirdparty/jackson/*.jar")
file(GLOB QUICKBUF_JAR ${WPILIB_BINARY_DIR}/wpiutil/thirdparty/quickbuf/*.jar)
set(CMAKE_JAVA_INCLUDE_PATH wpimath.jar ${EJML_JARS} ${JACKSON_JARS} ${QUICKBUF_JAR})
set(CMAKE_JNI_TARGET true)
file(GLOB_RECURSE JAVA_SOURCES src/main/java/*.java src/generated/main/java/*.java)
@@ -86,8 +82,9 @@ if(WITH_JAVA)
add_jar(
wpimath_jar
${JAVA_SOURCES}
INCLUDE_JARS ${EJML_JARS} wpiutil_jar wpiunits_jar
INCLUDE_JARS wpiutil_jar wpiunits_jar ${EJML_JARS} ${JACKSON_JARS} ${QUICKBUF_JAR}
OUTPUT_NAME wpimath
OUTPUT_DIR ${WPILIB_BINARY_DIR}/${java_lib_dest}
GENERATE_NATIVE_HEADERS wpimath_jni_headers
)
set_property(TARGET wpimath_jar PROPERTY FOLDER "java")
@@ -109,7 +106,6 @@ if(WITH_JAVA)
endif()
if(WITH_JAVA_SOURCE)
find_package(Java REQUIRED)
include(UseJava)
file(
GLOB WPIMATH_SOURCES
@@ -150,6 +146,7 @@ if(WITH_JAVA_SOURCE)
${WPIMATH_TRAJECTORY_CONSTRAINT_SOURCES}
NAMESPACE "edu/wpi/first/math/util" src/main/java/edu/wpi/first/math/util/Units.java
OUTPUT_NAME wpimath-sources
OUTPUT_DIR ${WPILIB_BINARY_DIR}/${java_lib_dest}
)
get_property(WPIMATH_SRC_JAR_FILE TARGET wpimath_src_jar PROPERTY JAR_FILE)

View File

@@ -9,8 +9,6 @@ file(GLOB wpinet_jni_src src/main/native/cpp/jni/WPINetJNI.cpp)
# Java bindings
if(WITH_JAVA)
find_package(Java REQUIRED)
find_package(JNI REQUIRED)
include(UseJava)
set(CMAKE_JNI_TARGET true)
@@ -22,6 +20,7 @@ if(WITH_JAVA)
${JAVA_SOURCES}
INCLUDE_JARS wpiutil_jar
OUTPUT_NAME wpinet
OUTPUT_DIR ${WPILIB_BINARY_DIR}/${java_lib_dest}
GENERATE_NATIVE_HEADERS wpinet_jni_headers
)
set_property(TARGET wpinet_jar PROPERTY FOLDER "java")
@@ -43,7 +42,6 @@ if(WITH_JAVA)
endif()
if(WITH_JAVA_SOURCE)
find_package(Java REQUIRED)
include(UseJava)
file(GLOB WPINET_SOURCES src/main/java/edu/wpi/first/net/*.java)
add_jar(
@@ -51,6 +49,7 @@ if(WITH_JAVA_SOURCE)
RESOURCES
NAMESPACE "edu/wpi/first/net" ${WPINET_SOURCES}
OUTPUT_NAME wpinet-sources
OUTPUT_DIR ${WPILIB_BINARY_DIR}/${java_lib_dest}
)
get_property(WPINET_SRC_JAR_FILE TARGET wpinet_src_jar PROPERTY JAR_FILE)
@@ -145,7 +144,6 @@ if(NOT USE_SYSTEM_LIBUV)
wpinet
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/main/native/thirdparty/libuv/include>
$<INSTALL_INTERFACE:${include_dest}/wpinet>
)
if(NOT MSVC)
target_sources(wpinet PRIVATE ${uv_unix_src})
@@ -185,7 +183,6 @@ target_include_directories(
wpinet
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/main/native/thirdparty/tcpsockets/include>
$<INSTALL_INTERFACE:${include_dest}/wpinet>
)
install(DIRECTORY src/main/native/include/ DESTINATION "${include_dest}/wpinet")

View File

@@ -2,12 +2,16 @@ project(wpiunits)
# Java bindings
if(WITH_JAVA)
find_package(Java REQUIRED)
include(UseJava)
file(GLOB_RECURSE JAVA_SOURCES src/main/java/*.java)
add_jar(wpiunits_jar ${JAVA_SOURCES} OUTPUT_NAME wpiunits)
add_jar(
wpiunits_jar
${JAVA_SOURCES}
OUTPUT_NAME wpiunits
OUTPUT_DIR ${WPILIB_BINARY_DIR}/${java_lib_dest}
)
set_property(TARGET wpiunits_jar PROPERTY FOLDER "java")
install_jar(wpiunits_jar DESTINATION ${java_lib_dest})

View File

@@ -14,8 +14,6 @@ file(
# Java bindings
if(WITH_JAVA)
find_package(Java REQUIRED)
find_package(JNI REQUIRED)
include(UseJava)
if(NOT EXISTS "${WPILIB_BINARY_DIR}/wpiutil/thirdparty/jackson/jackson-core-2.15.2.jar")
@@ -47,10 +45,9 @@ if(WITH_JAVA)
set(JAR_ROOT "${WPILIB_BINARY_DIR}/wpiutil/thirdparty/quickbuf")
message(STATUS "Downloading Quickbuf jarfile...")
file(
DOWNLOAD
"${BASE_URL}us/hebi/quickbuf/quickbuf-runtime/1.3.3/quickbuf-runtime-1.3.3.jar"
"${JAR_ROOT}/quickbuf-runtime-1.3.3.jar"
download_and_check(
"${BASE_URL}us/hebi/quickbuf/quickbuf-runtime/1.3.3/quickbuf-runtime-1.3.3.jar"
"${JAR_ROOT}/quickbuf-runtime-1.3.3.jar"
)
message(STATUS "Downloaded.")
@@ -58,8 +55,6 @@ if(WITH_JAVA)
file(GLOB QUICKBUF_JAR ${WPILIB_BINARY_DIR}/wpiutil/thirdparty/quickbuf/*.jar)
set(CMAKE_JAVA_INCLUDE_PATH wpiutil.jar ${JACKSON_JARS} ${QUICKBUF_JAR})
set(CMAKE_JNI_TARGET true)
file(GLOB_RECURSE JAVA_SOURCES src/main/java/*.java)
@@ -69,6 +64,7 @@ if(WITH_JAVA)
${JAVA_SOURCES}
INCLUDE_JARS ${JACKSON_JARS} ${QUICKBUF_JAR}
OUTPUT_NAME wpiutil
OUTPUT_DIR ${WPILIB_BINARY_DIR}/${java_lib_dest}
GENERATE_NATIVE_HEADERS wpiutil_jni_headers
)
set_property(TARGET wpiutil_jar PROPERTY FOLDER "java")
@@ -90,7 +86,6 @@ if(WITH_JAVA)
endif()
if(WITH_JAVA_SOURCE)
find_package(Java REQUIRED)
include(UseJava)
file(GLOB WPIUTIL_SOURCES src/main/java/edu/wpi/first/util/*.java)
file(GLOB WPIUTIL_CLEANUP_SOURCES src/main/java/edu/wpi/first/util/cleanup/*.java)
@@ -108,6 +103,7 @@ if(WITH_JAVA_SOURCE)
NAMESPACE "edu/wpi/first/util/function" ${WPIUTIL_FUNCTION_SOURCES}
NAMESPACE "edu/wpi/first/util/sendable" ${WPIUTIL_SENDABLE_SOURCES}
OUTPUT_NAME wpiutil-sources
OUTPUT_DIR ${WPILIB_BINARY_DIR}/${java_lib_dest}
)
get_property(WPIUTIL_SRC_JAR_FILE TARGET wpiutil_src_jar PROPERTY JAR_FILE)
@@ -176,7 +172,6 @@ if(NOT USE_SYSTEM_FMTLIB)
wpiutil
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/main/native/thirdparty/fmtlib/include>
$<INSTALL_INTERFACE:${include_dest}/wpiutil>
)
else()
find_package(fmt CONFIG REQUIRED)
@@ -208,49 +203,36 @@ install(
target_include_directories(
wpiutil
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/main/native/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/main/native/thirdparty/expected/include>
$<INSTALL_INTERFACE:${include_dest}/wpiutil>
)
install(DIRECTORY src/main/native/thirdparty/memory/include/ DESTINATION "${include_dest}/wpiutil")
target_include_directories(
wpiutil
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/main/native/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/main/native/thirdparty/memory/include>
$<INSTALL_INTERFACE:${include_dest}/wpiutil>
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/main/native/thirdparty/memory/include>
)
install(DIRECTORY src/main/native/thirdparty/json/include/ DESTINATION "${include_dest}/wpiutil")
target_include_directories(
wpiutil
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/main/native/thirdparty/json/include>
$<INSTALL_INTERFACE:${include_dest}/wpiutil>
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/main/native/thirdparty/json/include>
)
install(DIRECTORY src/main/native/thirdparty/llvm/include/ DESTINATION "${include_dest}/wpiutil")
target_include_directories(
wpiutil
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/main/native/thirdparty/llvm/include>
$<INSTALL_INTERFACE:${include_dest}/wpiutil>
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/main/native/thirdparty/llvm/include>
)
install(DIRECTORY src/main/native/thirdparty/mpack/include/ DESTINATION "${include_dest}/wpiutil")
target_include_directories(
wpiutil
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/main/native/thirdparty/mpack/include>
$<INSTALL_INTERFACE:${include_dest}/wpiutil>
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/main/native/thirdparty/mpack/include>
)
install(DIRECTORY src/main/native/thirdparty/sigslot/include/ DESTINATION "${include_dest}/wpiutil")
target_include_directories(
wpiutil
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/main/native/thirdparty/sigslot/include>
$<INSTALL_INTERFACE:${include_dest}/wpiutil>
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/main/native/thirdparty/sigslot/include>
)
install(DIRECTORY src/main/native/include/ DESTINATION "${include_dest}/wpiutil")

View File

@@ -5,7 +5,6 @@ include(CompileWarnings)
include(AddTest)
if(WITH_JAVA)
find_package(Java REQUIRED)
include(UseJava)
file(GLOB_RECURSE JAVA_SOURCES src/main/java/*.java)
@@ -22,6 +21,7 @@ if(WITH_JAVA)
wpiutil_jar
wpilibj_jar
OUTPUT_NAME xrpVendordep
OUTPUT_DIR ${WPILIB_BINARY_DIR}/${java_lib_dest}
)
set_property(TARGET xrpVendordep_jar PROPERTY FOLDER "java")
@@ -34,7 +34,6 @@ if(WITH_JAVA)
endif()
if(WITH_JAVA_SOURCE)
find_package(Java REQUIRED)
include(UseJava)
file(GLOB XRPVENDORDEP_SOURCES src/main/java/edu/wpi/first/wpilibj/xrp/*.java)
add_jar(
@@ -42,6 +41,7 @@ if(WITH_JAVA_SOURCE)
RESOURCES
NAMESPACE "edu/wpi/first/wpilibj/xrp" ${XRPVENDORDEP_SOURCES}
OUTPUT_NAME xrpVendordep-sources
OUTPUT_DIR ${WPILIB_BINARY_DIR}/${java_lib_dest}
)
get_property(xrpVendordep_src_JAR_FILE TARGET xrpVendordep_src_jar PROPERTY JAR_FILE)
@@ -66,7 +66,7 @@ target_include_directories(
$<INSTALL_INTERFACE:${include_dest}/xrpVendordep>
)
install(TARGETS xrpVendordep EXPORT xrpvendordep DESTINATION "${main_lib_dest}")
install(TARGETS xrpVendordep EXPORT xrpvendordep)
export(TARGETS xrpVendordep FILE xrpvendordep.cmake NAMESPACE xrpvendordep::)
install(DIRECTORY src/main/native/include/ DESTINATION "${include_dest}/xrpVendordep")