blob: 7a544920096fca798b985c8b3be820b34b48a07a [file] [log] [blame]
Brian Silverman41cdd3e2019-01-19 19:48:58 -08001# Disable in-source builds to prevent source tree corruption.
2if(" ${CMAKE_SOURCE_DIR}" STREQUAL " ${CMAKE_BINARY_DIR}")
3 message(FATAL_ERROR "
4FATAL: In-source builds are not allowed.
5 You should create a separate directory for build files.
6")
7endif()
8
9
10project(allwpilib)
11cmake_minimum_required(VERSION 3.3.0)
12set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules")
13
14INCLUDE(CPack)
15
16set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
17set_property(GLOBAL PROPERTY USE_FOLDERS ON)
18
19if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND MSVC)
20 set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Default install dir on windows" FORCE)
21endif()
22
23set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
24set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
25set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
26set(CMAKE_JAVA_TARGET_OUTPUT_DIR ${CMAKE_BINARY_DIR}/jar)
27
28# use, i.e. don't skip the full RPATH for the build tree
29SET(CMAKE_SKIP_BUILD_RPATH FALSE)
30
31# when building, don't use the install RPATH already
32# (but later on when installing)
33SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
34
35SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/wpilib/lib")
36
37# add the automatically determined parts of the RPATH
38# which point to directories outside the build tree to the install RPATH
39SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
40
41# the RPATH to be used when installing, but only if it's not a system directory
42LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/wpilib/lib" isSystemDir)
43IF("${isSystemDir}" STREQUAL "-1")
44 SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/wpilib/lib")
45ENDIF("${isSystemDir}" STREQUAL "-1")
46
47option(WITHOUT_JAVA "don't include java and JNI in the build" OFF)
48option(BUILD_SHARED_LIBS "build with shared libs (needed for JNI)" ON)
49option(WITHOUT_CSCORE "Don't build cscore (removes OpenCV requirement)" OFF)
50option(WITHOUT_ALLWPILIB "Don't build allwpilib (removes OpenCV requirement)" ON)
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080051option(WITH_TESTS "build unit tests (requires internet connection)" OFF)
Brian Silverman41cdd3e2019-01-19 19:48:58 -080052option(USE_EXTERNAL_HAL "Use a separately built HAL" OFF)
53set(EXTERNAL_HAL_FILE "" CACHE FILEPATH "Location to look for an external HAL CMake File")
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080054option(USE_VCPKG_LIBUV "Use vcpkg libuv" OFF)
55option(USE_VCPKG_EIGEN "Use vcpkg eigen" OFF)
56option(FLAT_INSTALL_WPILIB "Use a flat install directory" OFF)
57option(WITH_SIMULATION_MODULES "build simulation modules" OFF)
Brian Silverman41cdd3e2019-01-19 19:48:58 -080058
59if (NOT WITHOUT_JAVA AND NOT BUILD_SHARED_LIBS)
60 message(FATAL_ERROR "
61FATAL: Cannot build static libs with Java enabled.
62 Static libs requires both BUILD_SHARED_LIBS=OFF and
63 WITHOUT_JAVA=ON
64")
65endif()
66
67set( wpilib_dest wpilib)
68set( include_dest wpilib/include )
69set( main_lib_dest wpilib/lib )
70set( java_lib_dest wpilib/java )
71set( jni_lib_dest wpilib/jni )
72
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080073if (MSVC OR FLAT_INSTALL_WPILIB)
Brian Silverman41cdd3e2019-01-19 19:48:58 -080074 set (wpilib_config_dir ${wpilib_dest})
75else()
76 set (wpilib_config_dir share/wpilib)
77endif()
78
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080079if (USE_VCPKG_LIBUV)
80set (LIBUV_VCPKG_REPLACE "find_package(unofficial-libuv CONFIG)")
81endif()
82
83if (USE_VCPKG_EIGEN)
84set (EIGEN_VCPKG_REPLACE "find_package(Eigen3 CONFIG)")
85endif()
86
87if (MSVC OR FLAT_INSTALL_WPILIB)
88set(WPIUTIL_DEP_REPLACE "include($\{SELF_DIR\}/wpiutil-config.cmake)")
89set(NTCORE_DEP_REPLACE "include($\{SELF_DIR\}/ntcore-config.cmake)")
90set(CSCORE_DEP_REPLACE_IMPL "include(\${SELF_DIR}/cscore-config.cmake)")
91set(CAMERASERVER_DEP_REPLACE_IMPL "include(\${SELF_DIR}/cameraserver-config.cmake)")
92set(HAL_DEP_REPLACE_IMPL "include(\${SELF_DIR}/hal-config.cmake)")
93set(WPILIBC_DEP_REPLACE_IMPL "include(\${SELF_DIR}/wpilibc-config.cmake)")
94else()
95set(WPIUTIL_DEP_REPLACE "find_dependency(wpiutil)")
96set(NTCORE_DEP_REPLACE "find_dependency(ntcore)")
97set(CSCORE_DEP_REPLACE_IMPL "find_dependency(cscore)")
98set(CAMERASERVER_DEP_REPLACE_IMPL "find_dependency(cameraserver)")
99set(HAL_DEP_REPLACE_IMPL "find_dependency(hal)")
100set(WPILIBC_DEP_REPLACE_IMPL "find_dependency(wpilibc)")
101endif()
102
103set(FILENAME_DEP_REPLACE "get_filename_component(SELF_DIR \"$\{CMAKE_CURRENT_LIST_FILE\}\" PATH)")
104set(SELF_DIR "$\{SELF_DIR\}")
105
106if (WITH_TESTS)
107 enable_testing()
108 add_subdirectory(googletest)
109 include(GoogleTest)
110endif()
111
Brian Silverman41cdd3e2019-01-19 19:48:58 -0800112add_subdirectory(wpiutil)
113add_subdirectory(ntcore)
114
115if (NOT WITHOUT_CSCORE)
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -0800116 set(CSCORE_DEP_REPLACE ${CSCORE_DEP_REPLACE_IMPL})
117 set(CAMERASERVER_DEP_REPLACE ${CAMERASERVER_DEP_REPLACE_IMPL})
Brian Silverman41cdd3e2019-01-19 19:48:58 -0800118 add_subdirectory(cscore)
119 add_subdirectory(cameraserver)
Brian Silverman41cdd3e2019-01-19 19:48:58 -0800120 if (NOT WITHOUT_ALLWPILIB)
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -0800121 set(HAL_DEP_REPLACE ${HAL_DEP_REPLACE_IMPL})
122 set(WPILIBC_DEP_REPLACE ${WPILIBC_DEP_REPLACE_IMPL})
Brian Silverman41cdd3e2019-01-19 19:48:58 -0800123 add_subdirectory(hal)
124 add_subdirectory(wpilibj)
125 add_subdirectory(wpilibc)
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -0800126 add_subdirectory(myRobot)
Brian Silverman41cdd3e2019-01-19 19:48:58 -0800127 endif()
128endif()
129
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -0800130if (WITH_SIMULATION_MODULES AND NOT USE_EXTERNAL_HAL)
131 add_subdirectory(imgui)
132 add_subdirectory(simulation)
133endif()
134
Brian Silverman41cdd3e2019-01-19 19:48:58 -0800135configure_file(wpilib-config.cmake.in ${CMAKE_BINARY_DIR}/wpilib-config.cmake )
136install(FILES ${CMAKE_BINARY_DIR}/wpilib-config.cmake DESTINATION ${wpilib_config_dir})