diff --git a/CMakeLists.txt b/CMakeLists.txt index ace8da81907..4010ef9eb27 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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() - -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_JAVA REQUIRES BUILD_SHARED_LIBS) -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_SIMULATION_MODULES REQUIRES BUILD_SHARED_LIBS WITH_WPILIB 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_CSCORE REQUIRES WITH_NTCORE) -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_GUI 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() +wpilib_config(OPTIONS WITH_WPILIB REQUIRES WITH_NTCORE WITH_WPIMATH) -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() diff --git a/README-CMAKE.md b/README-CMAKE.md index 7742900f9e6..e52d77ec2ef 100644 --- a/README-CMAKE.md +++ b/README-CMAKE.md @@ -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) diff --git a/apriltag/CMakeLists.txt b/apriltag/CMakeLists.txt index e6b9aa6f97f..28a2751d577 100644 --- a/apriltag/CMakeLists.txt +++ b/apriltag/CMakeLists.txt @@ -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) diff --git a/cameraserver/CMakeLists.txt b/cameraserver/CMakeLists.txt index 1270c383db5..2ea645470e2 100644 --- a/cameraserver/CMakeLists.txt +++ b/cameraserver/CMakeLists.txt @@ -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) diff --git a/cmake/modules/OptionValidation.cmake b/cmake/modules/OptionValidation.cmake new file mode 100644 index 00000000000..4460ac44159 --- /dev/null +++ b/cmake/modules/OptionValidation.cmake @@ -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() diff --git a/cscore/CMakeLists.txt b/cscore/CMakeLists.txt index e4f4315acc5..24b605e9026 100644 --- a/cscore/CMakeLists.txt +++ b/cscore/CMakeLists.txt @@ -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) diff --git a/fieldImages/CMakeLists.txt b/fieldImages/CMakeLists.txt index d5607c99e18..315615b106a 100644 --- a/fieldImages/CMakeLists.txt +++ b/fieldImages/CMakeLists.txt @@ -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( diff --git a/hal/CMakeLists.txt b/hal/CMakeLists.txt index 7070859ce15..31f640cec8a 100644 --- a/hal/CMakeLists.txt +++ b/hal/CMakeLists.txt @@ -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) diff --git a/imgui/CMakeLists.txt b/imgui/CMakeLists.txt index b4810e9ce01..04a6a3aeb92 100644 --- a/imgui/CMakeLists.txt +++ b/imgui/CMakeLists.txt @@ -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( diff --git a/ntcore/CMakeLists.txt b/ntcore/CMakeLists.txt index bbf3790a7b4..101307886df 100644 --- a/ntcore/CMakeLists.txt +++ b/ntcore/CMakeLists.txt @@ -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) diff --git a/romiVendordep/CMakeLists.txt b/romiVendordep/CMakeLists.txt index 960e7d112e8..cae07076089 100644 --- a/romiVendordep/CMakeLists.txt +++ b/romiVendordep/CMakeLists.txt @@ -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(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") diff --git a/simulation/halsim_xrp/CMakeLists.txt b/simulation/halsim_xrp/CMakeLists.txt index f961f3b94d2..71f8c53ecfe 100644 --- a/simulation/halsim_xrp/CMakeLists.txt +++ b/simulation/halsim_xrp/CMakeLists.txt @@ -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::) diff --git a/wpigui/CMakeLists.txt b/wpigui/CMakeLists.txt index 221977728f4..04ffe3b2dcc 100644 --- a/wpigui/CMakeLists.txt +++ b/wpigui/CMakeLists.txt @@ -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) diff --git a/wpilibNewCommands/CMakeLists.txt b/wpilibNewCommands/CMakeLists.txt index 18495fbd99c..43292dfbe47 100644 --- a/wpilibNewCommands/CMakeLists.txt +++ b/wpilibNewCommands/CMakeLists.txt @@ -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 diff --git a/wpilibc/CMakeLists.txt b/wpilibc/CMakeLists.txt index 186c9794b14..7046509e7ae 100644 --- a/wpilibc/CMakeLists.txt +++ b/wpilibc/CMakeLists.txt @@ -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) diff --git a/wpilibj/CMakeLists.txt b/wpilibj/CMakeLists.txt index e2a8fb331a7..6124368075f 100644 --- a/wpilibj/CMakeLists.txt +++ b/wpilibj/CMakeLists.txt @@ -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) diff --git a/wpimath/CMakeLists.txt b/wpimath/CMakeLists.txt index f56558410af..80ed18d40cd 100644 --- a/wpimath/CMakeLists.txt +++ b/wpimath/CMakeLists.txt @@ -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) diff --git a/wpinet/CMakeLists.txt b/wpinet/CMakeLists.txt index 7e189a87ab9..bddb4db83a9 100644 --- a/wpinet/CMakeLists.txt +++ b/wpinet/CMakeLists.txt @@ -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 $ - $ ) if(NOT MSVC) target_sources(wpinet PRIVATE ${uv_unix_src}) @@ -185,7 +183,6 @@ target_include_directories( wpinet PUBLIC $ - $ ) install(DIRECTORY src/main/native/include/ DESTINATION "${include_dest}/wpinet") diff --git a/wpiunits/CMakeLists.txt b/wpiunits/CMakeLists.txt index 4f71da1b15e..3cba94bfd63 100644 --- a/wpiunits/CMakeLists.txt +++ b/wpiunits/CMakeLists.txt @@ -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}) diff --git a/wpiutil/CMakeLists.txt b/wpiutil/CMakeLists.txt index eb4a0a8f7c0..e20754db214 100644 --- a/wpiutil/CMakeLists.txt +++ b/wpiutil/CMakeLists.txt @@ -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 $ - $ ) else() find_package(fmt CONFIG REQUIRED) @@ -208,49 +203,36 @@ install( target_include_directories( wpiutil PUBLIC - $ $ - $ ) install(DIRECTORY src/main/native/thirdparty/memory/include/ DESTINATION "${include_dest}/wpiutil") target_include_directories( wpiutil - PUBLIC - $ - $ - $ + PUBLIC $ ) install(DIRECTORY src/main/native/thirdparty/json/include/ DESTINATION "${include_dest}/wpiutil") target_include_directories( wpiutil - PUBLIC - $ - $ + PUBLIC $ ) install(DIRECTORY src/main/native/thirdparty/llvm/include/ DESTINATION "${include_dest}/wpiutil") target_include_directories( wpiutil - PUBLIC - $ - $ + PUBLIC $ ) install(DIRECTORY src/main/native/thirdparty/mpack/include/ DESTINATION "${include_dest}/wpiutil") target_include_directories( wpiutil - PUBLIC - $ - $ + PUBLIC $ ) install(DIRECTORY src/main/native/thirdparty/sigslot/include/ DESTINATION "${include_dest}/wpiutil") target_include_directories( wpiutil - PUBLIC - $ - $ + PUBLIC $ ) install(DIRECTORY src/main/native/include/ DESTINATION "${include_dest}/wpiutil") diff --git a/xrpVendordep/CMakeLists.txt b/xrpVendordep/CMakeLists.txt index 5099beb7603..e57c703417a 100644 --- a/xrpVendordep/CMakeLists.txt +++ b/xrpVendordep/CMakeLists.txt @@ -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(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")