diff --git a/.clangd.in b/.clangd.in index 12902db3f67..16cb4c9b331 100644 --- a/.clangd.in +++ b/.clangd.in @@ -1,2 +1,2 @@ CompileFlags: - CompilationDatabase: "@CMAKE_CURRENT_BINARY_DIR@" + CompilationDatabase: "@CMAKE_BINARY_DIR@" diff --git a/.gitignore b/.gitignore index 25fa898a664..533cefe1c79 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,6 @@ __pycache__/ Build/ -Install/ Doxygen/ Dist/ Temp/ @@ -15,3 +14,4 @@ CMakeSettings.json .clangd Help.md +targets.txt \ No newline at end of file diff --git a/CMake/Common.cmake b/CMake/Common.cmake index 580158aca84..cb578613b12 100644 --- a/CMake/Common.cmake +++ b/CMake/Common.cmake @@ -1,91 +1,3 @@ -# ================================ -# Common -# ================================ - -set (CMAKE_CXX_STANDARD 20) -set (CMAKE_CXX_STANDARD_REQUIRED ON) - -set (CMAKE_C_STANDARD 11) -set (CMAKE_C_STANDARD_REQUIRED ON) - -set (CMAKE_POSITION_INDEPENDENT_CODE ON) - -if (CMAKE_BUILD_TYPE STREQUAL "Debug") - carla_warning ( - "CARLA is set to be built in Debug mode. This may cause issues when building CarlaUnrealEditor." - ) -endif () - -if (LINUX) - check_linker_flag (CXX -lpthread HAS_PTHREAD) - if (HAS_PTHREAD) - add_link_options (-lpthread) - endif () -endif () - -if (WIN32) - if (CMAKE_BUILD_TYPE STREQUAL "Debug") - set (CARLA_DEBUG_AFFIX d) - set (CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDebugDLL") - else () - set (CARLA_DEBUG_AFFIX ) - set (CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDLL") - endif () -endif () - -if (CMAKE_TOOLCHAIN_FILE) - cmake_path ( - ABSOLUTE_PATH - CMAKE_TOOLCHAIN_FILE - BASE_DIRECTORY - ${CARLA_WORKSPACE_PATH} - NORMALIZE - OUTPUT_VARIABLE - TOOLCHAIN_FILE - ) - set (CMAKE_TOOLCHAIN_FILE ${TOOLCHAIN_FILE}) -endif () - -# ================================ -# Common Definitions -# ================================ - -if (WIN32) - add_compile_definitions (_CRT_SECURE_NO_WARNINGS) - check_cxx_compiler_flag (/utf-8 HAS_MSVC_UTF8) - if (HAS_MSVC_UTF8) - # @TODO This causes warnings with MASM. A better approach should be looked into. - add_compile_options ($<$:/utf-8>) - endif () -endif () - -set (CARLA_COMMON_DEFINITIONS) - -foreach (FORMAT ${LIBCARLA_IMAGE_SUPPORTED_FORMATS}) - carla_message_verbose ("Enabling CARLA image support for \"${FORMAT}\".") - string (TOUPPER "${FORMAT}" FORMAT_UPPERCASE) - list (APPEND CARLA_COMMON_DEFINITIONS LIBCARLA_IMAGE_SUPPORT_${FORMAT_UPPERCASE}=1) -endforeach () - -if (WIN32) - # Documentation: https://learn.microsoft.com/en-us/cpp/porting/modifying-winver-and-win32-winnt?view=msvc-170 - list (APPEND CARLA_COMMON_DEFINITIONS _WIN32_WINNT=0x0601) # <- Windows 10 - list (APPEND CARLA_COMMON_DEFINITIONS HAVE_SNPRINTF) - list (APPEND CARLA_COMMON_DEFINITIONS _USE_MATH_DEFINES) -endif () - -if (WIN32) - set (EXE_EXT .exe) - set (UE_SYSTEM_NAME Win64) -elseif (LINUX) - set (EXE_EXT) - set (UE_SYSTEM_NAME Linux) -elseif (APPLE) - set (EXE_EXT) - set (UE_SYSTEM_NAME Mac) -else () - carla_error ("Unknown target system.") -endif () # ================================ # Exception Definitions @@ -106,14 +18,13 @@ else () endif () endif () -carla_message ("Checking for ${EXCEPTIONS_FLAG} support") +message (STATUS "Checking for ${EXCEPTIONS_FLAG} support") check_cxx_compiler_flag (${EXCEPTIONS_FLAG} HAS_EXCEPTIONS_FLAG) if (HAS_EXCEPTIONS_FLAG) add_compile_options ($<$:${EXCEPTIONS_FLAG}>) endif () set (CARLA_EXCEPTION_DEFINITIONS) - if (ENABLE_EXCEPTIONS) # Nothing else () @@ -143,7 +54,7 @@ else () endif () endif () -carla_message ("Checking for ${RTTI_FLAG} support") +message (STATUS "Checking for ${RTTI_FLAG} support") check_cxx_compiler_flag (${RTTI_FLAG} HAS_RTTI_FLAG) if (HAS_RTTI_FLAG) add_compile_options ($<$:${RTTI_FLAG}>) @@ -175,8 +86,8 @@ if (ENABLE_ALL_WARNINGS) endif () check_cxx_compiler_flag(/Wall HAS_WALL_MSVC) if (HAS_WALL_MSVC) - set (CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} /Wall") - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Wall") + set (CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} /W4") + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") endif () endif () diff --git a/CMake/Dependencies.cmake b/CMake/Dependencies.cmake index edcf9a58b19..c6a6c5e3505 100644 --- a/CMake/Dependencies.cmake +++ b/CMake/Dependencies.cmake @@ -13,7 +13,7 @@ include (FetchContent) set (CARLA_DEPENDENCIES_PENDING) macro (carla_git_dependency_add NAME TAG ARCHIVE_URL GIT_URL) - carla_message ("Cloning ${NAME}...") + message (STATUS "Cloning ${NAME}...") FetchContent_Declare ( ${NAME} GIT_REPOSITORY ${GIT_URL} @@ -28,7 +28,7 @@ macro (carla_git_dependency_add NAME TAG ARCHIVE_URL GIT_URL) endmacro () macro (carla_download_dependency_add NAME TAG ARCHIVE_URL GIT_URL) - carla_message ("Downloading ${NAME}...") + message (STATUS "Downloading ${NAME}...") FetchContent_Declare ( ${NAME} URL ${ARCHIVE_URL} @@ -52,23 +52,17 @@ macro (carla_dependencies_make_available) set (CARLA_DEPENDENCIES_PENDING) endmacro () -macro (carla_dependency_option NAME VALUE) - set (${NAME} ${VALUE} CACHE INTERNAL "") -endmacro () - - - # ==== SQLITE3 ==== - +#[[ set (THREADS_PREFER_PTHREAD_FLAG ON) find_package (Threads REQUIRED) -string (REPLACE "." "" CARLA_SQLITE_TAG ${CARLA_SQLITE_VERSION}) +string (REPLACE "." "" CARLA_SQLITE_TAG ${SQLITE_VERSION}) -carla_message ("Downloading sqlite3...") +message (STATUS "Downloading sqlite3...") FetchContent_Declare ( sqlite3 - URL https://www.sqlite.org/${CARLA_SQLITE_RELEASE_YEAR}/sqlite-amalgamation-${CARLA_SQLITE_TAG}.zip + URL https://www.sqlite.org/${SQLITE_RELEASE_YEAR}/sqlite-amalgamation-${CARLA_SQLITE_TAG}.zip SYSTEM OVERRIDE_FIND_PACKAGE EXCLUDE_FROM_ALL ) FetchContent_MakeAvailable (sqlite3) @@ -95,15 +89,16 @@ target_link_libraries ( sqlite3 PRIVATE libsqlite3 ) - +]] # ==== ZLIB ==== +#[[ carla_dependency_option (ZLIB_BUILD_EXAMPLES OFF) carla_dependency_add ( zlib - ${CARLA_ZLIB_TAG} - https://github.com/madler/zlib/archive/refs/tags/${CARLA_ZLIB_TAG}.zip + ${ZLIB_TAG} + https://github.com/madler/zlib/archive/refs/tags/${ZLIB_TAG}.zip https://github.com/madler/zlib.git ) carla_dependencies_make_available () @@ -119,10 +114,11 @@ else () endif () carla_dependency_option (ZLIB_INCLUDE_DIRS ${zlib_SOURCE_DIR} ${zlib_BINARY_DIR}) carla_dependency_option (ZLIB_LIBRARIES ${ZLIB_LIBRARY}) - +]] # ==== LIBPNG ==== +#[[ carla_dependency_option (PNG_SHARED OFF) carla_dependency_option (PNG_STATIC ON) if (APPLE) @@ -134,8 +130,8 @@ carla_dependency_option (PNG_DEBUG OFF) carla_dependency_option (PNG_HARDWARE_OPTIMIZATIONS ON) carla_dependency_add ( libpng - ${CARLA_LIBPNG_TAG} - https://github.com/pnggroup/libpng/archive/refs/tags/${CARLA_LIBPNG_TAG}.zip + ${PNG_TAG} + https://github.com/pnggroup/libpng/archive/refs/tags/${PNG_TAG}.zip https://github.com/pnggroup/libpng.git ) carla_dependencies_make_available () @@ -143,10 +139,11 @@ include_directories ( ${libpng_SOURCE_DIR} ${libpng_BINARY_DIR} ) # @TODO HACK - +]] # ==== BOOST ==== +#[[ set ( BOOST_INCLUDED_PROJECTS asio @@ -164,7 +161,7 @@ set ( ) carla_dependency_option (BOOST_INCLUDE_LIBRARIES "${BOOST_INCLUDED_PROJECTS}") carla_dependency_option (BOOST_EXCLUDE_LIBRARIES "${BOOST_EXCLUDED_PROJECTS}") -carla_dependency_option (BOOST_ENABLE_PYTHON ${BUILD_PYTHON_API}) +carla_dependency_option (BOOST_ENABLE_PYTHON ON) carla_dependency_option (BOOST_ENABLE_MPI OFF) carla_dependency_option (BOOST_LOCALE_WITH_ICU OFF) carla_dependency_option (BOOST_LOCALE_WITH_ICONV OFF) @@ -172,27 +169,32 @@ carla_dependency_option (BOOST_GIL_BUILD_EXAMPLES OFF) carla_dependency_option (BOOST_GIL_BUILD_HEADER_TESTS OFF) carla_dependency_add( boost - ${CARLA_BOOST_TAG} - https://github.com/boostorg/boost/releases/download/${CARLA_BOOST_TAG}/${CARLA_BOOST_TAG}.zip + ${BOOST_TAG} + https://github.com/boostorg/boost/releases/download/${BOOST_TAG}/${BOOST_TAG}.zip https://github.com/boostorg/boost.git ) +]] # ==== EIGEN ==== +#[[ carla_dependency_option (EIGEN_BUILD_PKGCONFIG OFF) carla_dependency_option (BUILD_TESTING OFF) carla_dependency_option (EIGEN_BUILD_DOC OFF) +carla_dependency_option (CMAKE_Fortran_COMPILER "") carla_dependency_add ( eigen ${CARLA_EIGEN_TAG} https://gitlab.com/libeigen/eigen/-/archive/${CARLA_EIGEN_TAG}/eigen-${CARLA_EIGEN_TAG}.tar.gz https://gitlab.com/libeigen/eigen.git ) +]] # ==== RPCLIB ==== +#[[ carla_dependency_option (RPCLIB_BUILD_TESTS OFF) carla_dependency_option (RPCLIB_GENERATE_COMPDB OFF) carla_dependency_option (RPCLIB_BUILD_EXAMPLES OFF) @@ -200,21 +202,24 @@ carla_dependency_option (RPCLIB_ENABLE_LOGGING OFF) carla_dependency_option (RPCLIB_ENABLE_COVERAGE OFF) carla_dependency_add ( rpclib - ${CARLA_RPCLIB_TAG} - https://github.com/carla-simulator/rpclib/archive/refs/heads/${CARLA_RPCLIB_TAG}.zip + ${RPC_TAG} + https://github.com/carla-simulator/rpclib/archive/refs/heads/${RPC_TAG}.zip https://github.com/carla-simulator/rpclib.git ) + ]] # ==== RECAST ==== +#[[ carla_dependency_option (RECASTNAVIGATION_BUILDER ON) carla_dependency_add ( recastnavigation - ${CARLA_RECAST_TAG} - https://github.com/carla-simulator/recastnavigation/archive/refs/heads/${CARLA_RECAST_TAG}.zip + ${RECAST_TAG} + https://github.com/carla-simulator/recastnavigation/archive/refs/heads/${RECAST_TAG}.zip https://github.com/carla-simulator/recastnavigation.git ) +]] @@ -272,7 +277,7 @@ if (BUILD_CARLA_UNREAL AND ENABLE_STREETMAP) ${CARLA_STREETMAP_TAG} https://github.com/carla-simulator/StreetMap/archive/refs/heads/${CARLA_STREETMAP_TAG}.zip https://github.com/carla-simulator/StreetMap.git - SOURCE_DIR ${CARLA_WORKSPACE_PATH}/Unreal/CarlaUnreal/Plugins/StreetMap + SOURCE_DIR ${CARLA_ROOT}/Unreal/CarlaUnreal/Plugins/StreetMap ) endif () diff --git a/CMake/Options.cmake b/CMake/Options.cmake deleted file mode 100644 index fc0eeea0613..00000000000 --- a/CMake/Options.cmake +++ /dev/null @@ -1,479 +0,0 @@ -#[[ - - Copyright (c) 2026 Computer Vision Center (CVC) at the Universitat Autonoma - de Barcelona (UAB). - - This work is licensed under the terms of the MIT license. - For a copy, see . - -]] - - - -# ================================ -# Common Options -# ================================ - -carla_option ( - BUILD_CARLA_CLIENT - "Build the CARLA client." - ON -) - -carla_option ( - BUILD_CARLA_SERVER - "Build the CARLA server." - ON -) - -carla_option ( - BUILD_EXAMPLES - "Build CARLA examples." - ON -) - -carla_option ( - BUILD_LIBCARLA_TESTS - "Build LibCarla tests." - ON -) - -carla_option ( - ENABLE_PYTORCH - "Enable PyTorch for CARLA." - OFF -) - -carla_option ( - BUILD_PYTHON_API - "Build the CARLA Python API." - ON -) - -carla_option ( - ENABLE_ROS2 - "Enable ROS2." - OFF -) - -carla_option ( - ENABLE_ROS2_DEMO - "Enable ROS2 demo." - OFF -) - -carla_option ( - ENABLE_OSM2ODR - "Enable OSM2ODR." - OFF -) - -carla_option ( - ENABLE_RSS - "Enable RSS components (ad-rss-lib)" - OFF -) - -carla_option ( - INSTALL_LIBCARLA - "Install LibCarla and all of its dependencies." - ON -) - -carla_option ( - BUILD_OSM_WORLD_RENDERER - "Build OSM World Renderer." - OFF -) - -carla_option ( - ENABLE_RTTI - "Enable C++ RTTI." - ON -) - -carla_option ( - ENABLE_EXCEPTIONS - "Enable C++ Exceptions." - ON -) - -carla_option ( - PREFER_CLONE - "Whether to clone dependencies instead of directly downloading a compressed archive." - OFF -) - -carla_option ( - ENABLE_PEP517 - "Whether to use PEP 517." - ON -) - -carla_option ( - ENABLE_ALL_WARNINGS - "Whether to emit extra build warnings." - ON -) - -carla_option ( - ENABLE_WARNINGS_TO_ERRORS - "Whether to convert build warnings to errors." - OFF -) - -carla_string_option ( - LIBCARLA_IMAGE_SUPPORTED_FORMATS - "Semicolon-separated list of supported image formats by LibCarla. Available formats: png, jpeg, tiff." - "png" -) - -carla_option ( - VERBOSE_CONFIGURE - "Whether to emit extra messages during CMake configure." - OFF -) - -carla_option ( - ENABLE_STREETMAP - "Whether to download the Streetmap UE plugin." - ON -) - - - -# ================================ -# Unreal Engine-related Options -# ================================ - -carla_option ( - CARLA_UNREAL_CONTENT_PREFER_CLONE - "Whether to perform a git clone instead of a direct archive download of the CARLA Unreal assets (EXTREMELY DISCOURAGED)." - OFF -) - -cmake_path ( - CONVERT - "$ENV{CARLA_UNREAL_ENGINE_PATH}" - TO_CMAKE_PATH_LIST - CARLA_UNREAL_ENGINE_PATH_INFERRED - NORMALIZE -) - -carla_string_option ( - CARLA_UNREAL_ENGINE_PATH - "Path to the CARLA fork of Unreal Engine." - "${CARLA_UNREAL_ENGINE_PATH_INFERRED}" -) - -carla_message ("Using ${CARLA_UNREAL_ENGINE_PATH} as Unreal Engine root path.") - -if (EXISTS ${CARLA_UNREAL_ENGINE_PATH}) - set (CARLA_HAS_UNREAL_ENGINE_PATH ON) -else () - set (CARLA_HAS_UNREAL_ENGINE_PATH OFF) -endif () - -carla_option ( - BUILD_CARLA_UNREAL - "Build the Carla Unreal Engine project." - ${CARLA_HAS_UNREAL_ENGINE_PATH} -) - -if (WIN32) - set (CARLA_UNREAL_RHI_DEFAULT d3d12) -elseif (LINUX) - set (CARLA_UNREAL_RHI_DEFAULT vulkan) -endif () - -carla_string_option ( - CARLA_UNREAL_RHI - "Target CARLA Unreal Engine RHI." - "${CARLA_UNREAL_RHI_DEFAULT}" -) - -if (BUILD_CARLA_UNREAL) - if (NOT ${CARLA_HAS_UNREAL_ENGINE_PATH}) - carla_error ( - "Could not add UE project to build since the carla_option CARLA_UNREAL_ENGINE_PATH " - "is not set to a valid path (\"${CARLA_UNREAL_ENGINE_PATH}\")." - "Please set it to point to the root path of your CARLA Unreal Engine installation." - ) - endif () -endif () - -carla_option ( - CARLA_UNREAL_LOG_WINDOW - "Whether to open a terminal window along the Unreal editor." - ON -) - -set (CARLA_LAUNCH_ARGS_DEFAULT) -if (CARLA_UNREAL_LOG_WINDOW) - list (APPEND CARLA_LAUNCH_ARGS_DEFAULT -log) -endif () - -carla_string_option ( - CARLA_LAUNCH_ARGS - "CMake-style semicolon-separated list of arguments to pass when launching the Unreal Editor with CARLA." - "${CARLA_LAUNCH_ARGS_DEFAULT}" -) - -carla_string_option ( - CARLA_UNREAL_BUILD_TYPE - "Set the default CARLA Unreal Editor build configuration." - "Development" -) - -# Docs for UE5 build configurations: -# https://docs.unrealengine.com/4.27/en-US/ProductionPipelines/DevelopmentSetup/BuildConfigurations/ - -if (${CMAKE_BUILD_TYPE} STREQUAL "Debug") - set (CARLA_UNREAL_PACKAGE_BUILD_TYPE_DEFAULT Debug) -elseif (${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo") - set (CARLA_UNREAL_PACKAGE_BUILD_TYPE_DEFAULT Development) -elseif (${CMAKE_BUILD_TYPE} STREQUAL "Release") - set (CARLA_UNREAL_PACKAGE_BUILD_TYPE_DEFAULT Shipping) -else () - carla_warning("Unexpected CMAKE_BUILD_TYPE \"${CMAKE_BUILD_TYPE}\". Unreal packages will default to Development. Manually override DEFAULT_PACKAGE_CONFIGURATION if this behavior is not desired.") - set (CARLA_UNREAL_PACKAGE_BUILD_TYPE_DEFAULT Development) -endif () - -carla_string_option ( - CARLA_UNREAL_PACKAGE_BUILD_TYPE - "Set the default CARLA package build configuration." - "${CARLA_UNREAL_PACKAGE_BUILD_TYPE_DEFAULT}" -) - -if ("${CARLA_UNREAL_PACKAGE_BUILD_TYPE}" STREQUAL "Shipping") - set (CARLA_UNREAL_PACKAGE_NO_COMPRESSION_DEFAULT OFF) -else () - set (CARLA_UNREAL_PACKAGE_NO_COMPRESSION_DEFAULT ON) -endif () - -carla_option ( - CARLA_UNREAL_PACKAGE_NO_COMPRESSION - "Whether to skip the package compression step." - ${CARLA_UNREAL_PACKAGE_NO_COMPRESSION_DEFAULT} -) - - - -# ================================ -# Dependency-specific Options -# ================================ - -# ==== BOOST ==== - -carla_string_option ( - CARLA_BOOST_VERSION - "Target boost version." - 1.84.0 -) - -carla_string_option ( - CARLA_BOOST_TAG - "Target boost git tag." - boost-${CARLA_BOOST_VERSION} -) - -# ==== EIGEN ==== - -carla_string_option ( - CARLA_EIGEN_VERSION - "Target Eigen version." - 3.4.0 -) - -carla_string_option ( - CARLA_EIGEN_TAG - "Target Eigen git tag." - ${CARLA_EIGEN_VERSION} -) - -# ==== GOOGLE TEST ==== - -carla_string_option ( - CARLA_GTEST_VERSION - "Target googletest version." - 1.14.0 -) - -carla_string_option ( - CARLA_GTEST_TAG - "Target googletest git tag." - v${CARLA_GTEST_VERSION} -) - -# ==== LIBPNG ==== - -# We can not upgrade any further due to ZLIB. -# See https://github.com/madler/zlib/issues/1019 -# Once this is resolved we can target 1.6.50 -carla_string_option ( - CARLA_LIBPNG_VERSION - "Target libpng version." - 1.6.40 -) - -carla_string_option ( - CARLA_LIBPNG_TAG - "Target libpng git tag." - v${CARLA_LIBPNG_VERSION} -) - -# ==== PROJ ==== - -carla_string_option ( - CARLA_PROJ_VERSION - "Target PROJ version." - 9.7.0 -) - -carla_string_option ( - CARLA_PROJ_TAG - "Target PROJ git tag." - ${CARLA_PROJ_VERSION} -) - -# ==== RECAST ==== - -carla_string_option ( - CARLA_RECAST_TAG - "Target recastnavigation git tag." - carla -) - -# ==== RPCLIB ==== - -carla_string_option ( - CARLA_RPCLIB_TAG - "Target rpclib git tag." - carla -) - -# ==== SQLITE3 ==== - -carla_string_option ( - CARLA_SQLITE_VERSION - "Target SQLite version (major[1].minor[2].patch[2].revision[2])." - 3.50.04.00 -) - -carla_string_option ( - CARLA_SQLITE_RELEASE_YEAR - "Year corresponding to the target SQLite release." - 2025 -) - -# ==== XERCESC ==== - -carla_string_option ( - CARLA_XERCESC_VERSION - "Target xerces-c version." - 3.3.0 -) - -carla_string_option ( - CARLA_XERCESC_TAG - "Target xerces-c git tag." - v${CARLA_XERCESC_VERSION} -) - -# ==== ZLIB ==== - -carla_string_option ( - CARLA_ZLIB_VERSION - "Target zlib git tag." - 1.3.1 -) - -carla_string_option ( - CARLA_ZLIB_TAG - "Target zlib git tag." - v${CARLA_ZLIB_VERSION} -) - -# ==== LUNASVG ==== - -carla_string_option ( - CARLA_LUNASVG_VERSION - "Target lunasvg version." - master -) - -carla_string_option ( - CARLA_LUNASVG_TAG - "Target lunasvg git tag." - ${CARLA_LUNASVG_VERSION} -) - -# ==== LIBOSMSCOUT ==== - -carla_string_option ( - CARLA_LIBOSMSCOUT_VERSION - "Target libosmscout version." - master -) - -carla_string_option ( - CARLA_LIBOSMSCOUT_TAG - "Target libosmscout git tag." - ${CARLA_LIBOSMSCOUT_VERSION} -) - -# ==== STREETMAP ==== - -carla_string_option ( - CARLA_STREETMAP_VERSION - "Target StreetMap version." - ue5-dev-carla -) - -carla_string_option ( - CARLA_STREETMAP_TAG - "Target StreetMap git tag." - ${CARLA_STREETMAP_VERSION} -) - -# ==== FASTDDS ==== - -carla_string_option ( - CARLA_FASTDDS_VERSION - "Target Fast-DDS version." - 2.11.2 -) - -carla_string_option ( - CARLA_FASTDDS_TAG - "Target Fast-DDS git tag." - v${CARLA_FASTDDS_VERSION} -) - -# ==== FASTCDR ==== - -carla_string_option ( - CARLA_FASTCDR_VERSION - "Target Fast-CDR version." - 1.1.x -) - -carla_string_option ( - CARLA_FASTCDR_TAG - "Target Fast-CDR git tag." - ${CARLA_FASTCDR_VERSION} -) - -# ==== FOONATHAN MEMORY VENDOR ==== - -carla_string_option ( - CARLA_FOONATHAN_MEMORY_VENDOR_VERSION - "Target foonathan_memory_vendor version." - master -) - -carla_string_option ( - CARLA_FOONATHAN_MEMORY_VENDOR_TAG - "Target foonathan_memory_vendor git tag." - ${CARLA_FOONATHAN_MEMORY_VENDOR_VERSION} -) diff --git a/CMake/SuperBuild/Boost.cmake b/CMake/SuperBuild/Boost.cmake new file mode 100644 index 00000000000..0a5a4ec874b --- /dev/null +++ b/CMake/SuperBuild/Boost.cmake @@ -0,0 +1,80 @@ +include (${CMAKE_CURRENT_LIST_DIR}/Config.cmake) + +option ( + CARLA_BOOST_USE_FIND_PACKAGE + "Whether to use find_package when retrieving boost." + OFF +) + +if (CARLA_BOOST_USE_FIND_PACKAGE) + find_package ( + Boost ${BOOST_VERSION} + EXACT + QUIET + NO_MODULE + COMPONENTS + asio + geometry + algorithm + assert + gil + ) +endif () + +if (NOT CARLA_BOOST_USE_FIND_PACKAGE OR NOT Boost_FOUND) + include (ExternalProject) + + if (PREFER_CLONE) + set ( + DOWNLOAD_OPTIONS + GIT_REPOSITORY + https://github.com/boostorg/boost.git + GIT_TAG ${BOOST_TAG} + GIT_SUBMODULES_RECURSE ON + GIT_SHALLOW ON + GIT_PROGRESS ON + ) + else () + set ( + DOWNLOAD_OPTIONS + URL https://github.com/boostorg/boost/releases/download/${BOOST_TAG}/${BOOST_TAG}.zip + ) + endif () + + if (NOT TARGET boost_project) + set ( + BOOST_INCLUDED_PROJECTS + asio + iterator + python + date_time + geometry + container + variant2 + filesystem + gil + ) + string (REPLACE ";" "," BOOST_INCLUDED_PROJECTS_ESCAPED "${BOOST_INCLUDED_PROJECTS}") + ExternalProject_Add ( + boost_project + ${DOWNLOAD_OPTIONS} + LIST_SEPARATOR , + CMAKE_CACHE_ARGS + -DBOOST_INCLUDE_LIBRARIES:STRING=${BOOST_INCLUDED_PROJECTS_ESCAPED} + -DBOOST_INSTALL_LAYOUT:STRING="system" + # -DBOOST_EXCLUDE_LIBRARIES=ON + -DBOOST_ENABLE_PYTHON:BOOL=ON + -DBOOST_ENABLE_MPI:BOOL=OFF + -DBOOST_LOCALE_WITH_ICU:BOOL=OFF + -DBOOST_LOCALE_WITH_ICONV:BOOL=OFF + -DBOOST_GIL_BUILD_EXAMPLES:BOOL=OFF + -DBOOST_GIL_BUILD_HEADER_TESTS:BOOL=OFF + CMAKE_ARGS + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_INSTALL_PREFIX:FILEPATH= + -DCMAKE_TOOLCHAIN_FILE:FILEPATH=${CMAKE_TOOLCHAIN_FILE} + ) + ExternalProject_Add_StepTargets (boost_project install) # Generates boost_project-install + endif () + +endif () diff --git a/CMake/SuperBuild/Config.cmake b/CMake/SuperBuild/Config.cmake new file mode 100644 index 00000000000..68968c591e3 --- /dev/null +++ b/CMake/SuperBuild/Config.cmake @@ -0,0 +1,220 @@ +set (CARLA_VERSION_MAJOR 0) +set (CARLA_VERSION_MINOR 10) +set (CARLA_VERSION_PATCH 0) + +set ( + CARLA_VERSION + ${CARLA_VERSION_MAJOR}.${CARLA_VERSION_MINOR}.${CARLA_VERSION_PATCH} +) + +set ( + BOOST_VERSION + "1.84.0" + CACHE STRING + "Target boost version." +) + +set ( + BOOST_TAG + "boost-${BOOST_VERSION}" + CACHE STRING + "Target boost git tag." +) + +set ( + EIGEN_VERSION + "3.4.0" + CACHE STRING + "Target Eigen version." +) + +set ( + CARLA_EIGEN_TAG + "${EIGEN_VERSION}" + CACHE STRING + "Target Eigen git tag." +) + +set ( + FASTCDR_VERSION + "1.1.x" + CACHE STRING + "Target Fast-CDR version." +) + +set ( + FASTCDR_TAG + "${FASTCDR_VERSION}" + CACHE STRING + "Target Fast-CDR git tag." +) + +set ( + FASTDDS_VERSION + "3.4.1" + CACHE STRING + "Target Fast-DDS version." +) + +set ( + CARLA_FAST_DDS_TAG + "v${FASTDDS_VERSION}" + CACHE STRING + "Target Fast-DDS git tag." +) + +set ( + FOONATHAN_MEMORY_VENDOR_VERSION + "master" + CACHE STRING + "Target foonathan_memory_vendor version." +) + +set ( + FOONATHAN_MEMORY_VENDOR_TAG + "${FOONATHAN_MEMORY_VENDOR_VERSION}" + CACHE STRING + "Target foonathan_memory_vendor git tag." +) + +set ( + GTEST_VERSION + "1.14.0" + CACHE STRING + "Target googletest version." +) + +set ( + GTEST_TAG + "v${GTEST_VERSION}" + CACHE STRING + "Target googletest git tag." +) + +set ( + LIBOSMSCOUT_VERSION + "master" + CACHE STRING + "Target libosmscout version." +) + +set ( + LIBOSMSCOUT_TAG + "${LIBOSMSCOUT_VERSION}" + CACHE STRING + "Target libosmscout git tag." +) + +set ( + LUNASVG_VERSION + "master" + CACHE STRING + "Target lunasvg version." +) + +set ( + LUNASVG_TAG + "${LUNASVG_VERSION}" + CACHE STRING + "Target lunasvg git tag." +) + +set ( + PNG_VERSION + "1.6.54" + CACHE STRING + "Target libpng version." +) + +set ( + PNG_TAG + "v${PNG_VERSION}" + CACHE STRING + "Target libpng git tag." +) + +set ( + PROJ_VERSION + "9.7.0" + CACHE STRING + "Target PROJ version." +) + +set ( + PROJ_TAG + "${PROJ_VERSION}" + CACHE STRING + "Target PROJ git tag." +) + +set ( + RECAST_TAG + "carla" + CACHE STRING + "Target recastnavigation git tag." +) + +set ( + RPC_TAG + "carla" + CACHE STRING + "Target rpclib git tag." +) + +set ( + SQLITE_VERSION + "3.50.04.00" + CACHE STRING + "Target SQLite version (major[1].minor[2].patch[2].revision[2])." +) + +string (REPLACE "." "" CARLA_SQLITE_TAG ${SQLITE_VERSION}) + +set ( + SQLITE_RELEASE_YEAR + "2025" + CACHE STRING + "Year corresponding to the target SQLite release." +) + +set ( + STREETMAP_VERSION + "ue5-dev-carla" + CACHE STRING + "Target StreetMap version." +) + +set ( + CARLA_STREETMAP_TAG + "${STREETMAP_VERSION}" + CACHE STRING + "Target StreetMap git tag." +) + +set ( + XERCESC_VERSION + "3.3.0" + CACHE STRING + "Target xerces-c version." +) + +set ( + XERCESC_TAG + "v${XERCESC_VERSION}" + CACHE STRING + "Target xerces-c git tag." +) + +set ( + ZLIB_VERSION + "1.3.1" + CACHE STRING + "Target zlib git tag." +) + +set ( + ZLIB_TAG + "v${ZLIB_VERSION}" + CACHE STRING + "Target zlib git tag." +) diff --git a/CMake/SuperBuild/Eigen.cmake b/CMake/SuperBuild/Eigen.cmake new file mode 100644 index 00000000000..59739a5f862 --- /dev/null +++ b/CMake/SuperBuild/Eigen.cmake @@ -0,0 +1,54 @@ +include (${CMAKE_CURRENT_LIST_DIR}/Config.cmake) + +option ( + CARLA_EIGEN_USE_FIND_PACKAGE + "Whether to use find_package when retrieving Eigen." + OFF +) + +if (CARLA_EIGEN_USE_FIND_PACKAGE) + find_package ( + Eigen ${EIGEN_VERSION} + EXACT + QUIET + NO_MODULE + ) +endif () + +if (NOT CARLA_EIGEN_USE_FIND_PACKAGE OR NOT Eigen_FOUND) + + include (ExternalProject) + + if (PREFER_CLONE) + set ( + DOWNLOAD_OPTIONS + GIT_REPOSITORY + https://gitlab.com/libeigen/eigen.git + GIT_TAG ${CARLA_EIGEN_TAG} + GIT_SUBMODULES_RECURSE ON + GIT_SHALLOW ON + GIT_PROGRESS ON + ) + else () + set ( + DOWNLOAD_OPTIONS + URL https://gitlab.com/libeigen/eigen/-/archive/${CARLA_EIGEN_TAG}/eigen-${CARLA_EIGEN_TAG}.tar.gz + ) + endif () + + if (NOT TARGET eigen_project) + ExternalProject_Add ( + eigen_project + ${DOWNLOAD_OPTIONS} + CMAKE_ARGS + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DEIGEN_BUILD_PKGCONFIG=OFF + -DBUILD_TESTING=OFF + -DEIGEN_BUILD_DOC=OFF + -DCMAKE_INSTALL_PREFIX:FILEPATH= + -DCMAKE_TOOLCHAIN_FILE:FILEPATH=${CMAKE_TOOLCHAIN_FILE} + ) + ExternalProject_Add_StepTargets (eigen_project install) # Generates eigen_project-install + endif () + +endif () diff --git a/CMake/SuperBuild/FastCDR.cmake b/CMake/SuperBuild/FastCDR.cmake new file mode 100644 index 00000000000..58322ec3ffa --- /dev/null +++ b/CMake/SuperBuild/FastCDR.cmake @@ -0,0 +1 @@ +include (${CMAKE_CURRENT_LIST_DIR}/Config.cmake) diff --git a/CMake/SuperBuild/FastDDS.cmake b/CMake/SuperBuild/FastDDS.cmake new file mode 100644 index 00000000000..b2778f2d345 --- /dev/null +++ b/CMake/SuperBuild/FastDDS.cmake @@ -0,0 +1,71 @@ +include (${CMAKE_CURRENT_LIST_DIR}/Config.cmake) + +option ( + CARLA_FAST_DDS_USE_FIND_PACKAGE + "Whether to use find_package when retrieving Fast-DDS." + OFF +) + +if (CARLA_FAST_DDS_USE_FIND_PACKAGE) + find_package ( + FastDDS ${FAST_DDS_VERSION} + EXACT + QUIET + NO_MODULE + ) +endif () + +if (NOT CARLA_FAST_DDS_USE_FIND_PACKAGE OR NOT FastDDS_FOUND) + + include (ExternalProject) + + # FastDDS may not provide submodule in their release archives: + set (FASTDDS_CLONE_OVERRIDE ON) + + if (PREFER_CLONE OR FASTDDS_CLONE_OVERRIDE) + set ( + DOWNLOAD_OPTIONS + GIT_REPOSITORY https://github.com/eProsima/Fast-DDS.git + GIT_TAG ${CARLA_FAST_DDS_TAG} + GIT_SUBMODULES_RECURSE ON + GIT_SHALLOW ON + GIT_PROGRESS ON + ) + else () + set ( + DOWNLOAD_OPTIONS + URL + https://github.com/eProsima/Fast-DDS/archive/refs/tags/${CARLA_FAST_DDS_TAG}.zip + ) + endif () + + if (NOT TARGET fastdds_project) + ExternalProject_Get_Property (foonathan_memory_vendor_project INSTALL_DIR) + set (FOONATHAN_MEMORY_VENDOR_INSTALL_DIR ${INSTALL_DIR}) + ExternalProject_Add ( + fastdds_project + ${DOWNLOAD_OPTIONS} + CMAKE_ARGS + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DBUILD_SHARED_LIBS=ON + -DBUILD_TESTING=OFF + -DCOMPILE_EXAMPLES=OFF + -DCOMPILE_TOOLS=OFF + -DTHIRDPARTY_Asio=FORCE + -DTHIRDPARTY_fastcdr=FORCE + -DTHIRDPARTY_TinyXML2=FORCE + -DSQLITE3_SUPPORT=OFF + -DOPENSSL_FOUND:BOOL=ON + -DOPENSSL_INCLUDE_DIR:FILEPATH=${UE_OPENSSL_INCLUDE} + -DOPENSSL_SSL_LIBRARY:FILEPATH=${UE_OPENSSL_LIBS}/libssl.a + -DOPENSSL_CRYPTO_LIBRARY:FILEPATH=${UE_OPENSSL_LIBS}/libcrypto.a + -DCMAKE_PREFIX_PATH:STRING=${FOONATHAN_MEMORY_VENDOR_INSTALL_DIR} + -DCMAKE_INSTALL_PREFIX:FILEPATH= + -DCMAKE_TOOLCHAIN_FILE:FILEPATH=${CMAKE_TOOLCHAIN_FILE} + DEPENDS + foonathan_memory_vendor_project-install + ) + ExternalProject_Add_StepTargets (fastdds_project install) # Generates fastdds_project-install + endif () + +endif () diff --git a/CMake/SuperBuild/FoonathanMemoryVendor.cmake b/CMake/SuperBuild/FoonathanMemoryVendor.cmake new file mode 100644 index 00000000000..d88831ebb94 --- /dev/null +++ b/CMake/SuperBuild/FoonathanMemoryVendor.cmake @@ -0,0 +1,52 @@ +include (${CMAKE_CURRENT_LIST_DIR}/Config.cmake) + +option ( + CARLA_FOONATHAN_MEMORY_VENDOR_USE_FIND_PACKAGE + "Whether to use find_package when retrieving foonathan_memory_vendor." + OFF +) + +if (CARLA_FOONATHAN_MEMORY_VENDOR_USE_FIND_PACKAGE) + find_package ( + FoonathanMemoryVendor ${FOONATHAN_MEMORY_VENDOR_VERSION} + EXACT + QUIET + NO_MODULE + ) +endif () + +if (NOT CARLA_FOONATHAN_MEMORY_VENDOR_USE_FIND_PACKAGE OR NOT FoonathanMemoryVendor_FOUND) + + include (ExternalProject) + + if (PREFER_CLONE) + set ( + DOWNLOAD_OPTIONS + GIT_REPOSITORY https://github.com/eProsima/foonathan_memory_vendor.git + GIT_TAG ${FOONATHAN_MEMORY_VENDOR_TAG} + GIT_SUBMODULES_RECURSE ON + GIT_SHALLOW ON + GIT_PROGRESS ON + ) + else () + set ( + DOWNLOAD_OPTIONS + URL + https://github.com/eProsima/foonathan_memory_vendor/archive/refs/heads/${FOONATHAN_MEMORY_VENDOR_TAG}.zip + ) + endif () + + if (NOT TARGET foonathan_memory_vendor_project) + ExternalProject_Add ( + foonathan_memory_vendor_project + ${DOWNLOAD_OPTIONS} + CMAKE_ARGS + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DFOONATHAN_MEMORY_FORCE_VENDORED_BUILD=ON + -DCMAKE_INSTALL_PREFIX:FILEPATH= + -DCMAKE_TOOLCHAIN_FILE:FILEPATH=${CMAKE_TOOLCHAIN_FILE} + ) + ExternalProject_Add_StepTargets (foonathan_memory_vendor_project install) # Generates foonathan_memory_vendor_project-install + endif () + +endif () diff --git a/CMake/SuperBuild/GTest.cmake b/CMake/SuperBuild/GTest.cmake new file mode 100644 index 00000000000..58322ec3ffa --- /dev/null +++ b/CMake/SuperBuild/GTest.cmake @@ -0,0 +1 @@ +include (${CMAKE_CURRENT_LIST_DIR}/Config.cmake) diff --git a/CMake/SuperBuild/LibCarla.cmake b/CMake/SuperBuild/LibCarla.cmake new file mode 100644 index 00000000000..397db817d62 --- /dev/null +++ b/CMake/SuperBuild/LibCarla.cmake @@ -0,0 +1,80 @@ +include (${CMAKE_CURRENT_LIST_DIR}/Config.cmake) +include (${CMAKE_CURRENT_LIST_DIR}/Boost.cmake) +include (${CMAKE_CURRENT_LIST_DIR}/Eigen.cmake) +include (${CMAKE_CURRENT_LIST_DIR}/ZLIB.cmake) +include (${CMAKE_CURRENT_LIST_DIR}/PNG.cmake) +include (${CMAKE_CURRENT_LIST_DIR}/Recast.cmake) +include (${CMAKE_CURRENT_LIST_DIR}/RPCLib.cmake) + +set (PREFIX_PATHS ${CMAKE_PREFIX_PATH}) +set (DEP_ROOTS) + +if (TARGET boost_project) + ExternalProject_Get_Property (boost_project INSTALL_DIR) + list (APPEND DEP_ROOTS -DBoost_ROOT=${INSTALL_DIR}) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/lib/cmake) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/lib/cmake/Boost-${BOOST_VERSION}) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/lib/cmake/boost_asio-${BOOST_VERSION}) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/lib/cmake/boost_iterator-${BOOST_VERSION}) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/lib/cmake/boost_python-${BOOST_VERSION}) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/lib/cmake/boost_date_time-${BOOST_VERSION}) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/lib/cmake/boost_geometry-${BOOST_VERSION}) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/lib/cmake/boost_container-${BOOST_VERSION}) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/lib/cmake/boost_variant2-${BOOST_VERSION}) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/lib/cmake/boost_gil-${BOOST_VERSION}) +endif () + +if (TARGET eigen_project) + ExternalProject_Get_Property (eigen_project INSTALL_DIR) + list (APPEND DEP_ROOTS -DEigen3_ROOT=${INSTALL_DIR}) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/share/eigen3/cmake) +endif () + +if (TARGET zlib_project) + ExternalProject_Get_Property (zlib_project INSTALL_DIR) + list (APPEND DEP_ROOTS -DZLIB_ROOT=${INSTALL_DIR}) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}) +endif () + +if (TARGET png_project) + ExternalProject_Get_Property (png_project INSTALL_DIR) + list (APPEND DEP_ROOTS -DPNG_ROOT=${INSTALL_DIR}) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/lib/cmake/PNG) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/lib/libpng) +endif () + +if (TARGET recast_project) + ExternalProject_Get_Property (recast_project INSTALL_DIR) + list (APPEND DEP_ROOTS -DRRecastNavigation_ROOT=${INSTALL_DIR}) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/lib/cmake/recastnavigation) +endif () + +if (TARGET rpclib_project) + ExternalProject_Get_Property (rpclib_project INSTALL_DIR) + list (APPEND DEP_ROOTS -DRPCLib_ROOT=${INSTALL_DIR}) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/lib/cmake/rpclib) +endif () + +string (REPLACE ";" "," PREFIX_PATHS_ESCAPED "${PREFIX_PATHS}") + +ExternalProject_Add ( + libcarla_project + DOWNLOAD_COMMAND "" + SOURCE_DIR ${CARLA_ROOT}/LibCarla + LIST_SEPARATOR , + CMAKE_ARGS + ${DEP_ROOTS} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCARLA_CONFIG_FILEPATH=${CMAKE_CURRENT_LIST_DIR}/Config.cmake + -DCMAKE_PREFIX_PATH:STRING=${PREFIX_PATHS_ESCAPED} + -DCMAKE_INSTALL_PREFIX:FILEPATH= + -DCMAKE_TOOLCHAIN_FILE:FILEPATH=${CMAKE_TOOLCHAIN_FILE} + DEPENDS + boost_project-install + eigen_project-install + zlib_project-install + png_project-install + recast_project-install + rpclib_project-install +) +ExternalProject_Add_StepTargets (libcarla_project install) # Generates libcarla_project-install diff --git a/CMake/SuperBuild/LibOSMScout.cmake b/CMake/SuperBuild/LibOSMScout.cmake new file mode 100644 index 00000000000..58322ec3ffa --- /dev/null +++ b/CMake/SuperBuild/LibOSMScout.cmake @@ -0,0 +1 @@ +include (${CMAKE_CURRENT_LIST_DIR}/Config.cmake) diff --git a/CMake/SuperBuild/LunaSVG.cmake b/CMake/SuperBuild/LunaSVG.cmake new file mode 100644 index 00000000000..58322ec3ffa --- /dev/null +++ b/CMake/SuperBuild/LunaSVG.cmake @@ -0,0 +1 @@ +include (${CMAKE_CURRENT_LIST_DIR}/Config.cmake) diff --git a/CMake/SuperBuild/PNG.cmake b/CMake/SuperBuild/PNG.cmake new file mode 100644 index 00000000000..6f1e5d8f996 --- /dev/null +++ b/CMake/SuperBuild/PNG.cmake @@ -0,0 +1,86 @@ +include (${CMAKE_CURRENT_LIST_DIR}/Config.cmake) + +option ( + CARLA_PNG_USE_FIND_PACKAGE + "Whether to use find_package when retrieving LibPNG." + OFF +) + +if (CARLA_PNG_USE_FIND_PACKAGE) + find_package ( + PNG ${PNG_VERSION} + EXACT + QUIET + NO_MODULE + ) +endif () + +if (NOT CARLA_PNG_USE_FIND_PACKAGE OR NOT PNG_FOUND) + include (ExternalProject) + if (PREFER_CLONE) + set ( + DOWNLOAD_OPTIONS + GIT_REPOSITORY + https://github.com/pnggroup/libpng.git + GIT_TAG ${PNG_TAG} + GIT_SUBMODULES_RECURSE ON + GIT_SHALLOW ON + GIT_PROGRESS ON + ) + else () + set ( + DOWNLOAD_OPTIONS + URL https://github.com/pnggroup/libpng/archive/refs/tags/${PNG_TAG}.zip + ) + endif () + + if (NOT TARGET zlib_project-install) + message (FATAL_ERROR "You must include Dependencies/ZLIB.cmake before Dependencies/PNG.cmake") + endif () + + if (NOT TARGET png_project) + + set (PNG_ZLIB_OPTIONS) + + if (TARGET zlib_project) + ExternalProject_get_property (zlib_project INSTALL_DIR) + if (${CMAKE_BUILD_TYPE} STREQUAL "Debug") + if (WIN32) + set (ZLIB_NAME zlibstaticd.lib) + else () + set (ZLIB_NAME libzsd.a) + endif () + else () + if (WIN32) + set (ZLIB_NAME zlibstatic.lib) + else () + set (ZLIB_NAME libz.a) + endif () + endif () + set ( + PNG_ZLIB_OPTIONS + -DZLIB_INCLUDE_DIR=${INSTALL_DIR}/include + -DZLIB_LIBRARY=${INSTALL_DIR}/lib/${ZLIB_NAME} + ) + endif () + + ExternalProject_Add ( + png_project + ${DOWNLOAD_OPTIONS} + CMAKE_ARGS + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DPNG_SHARED=ON + -DPNG_STATIC=ON + -DPNG_TESTS=OFF + -DPNG_TOOLS=OFF + -DPNG_DEBUG=OFF + -DPNG_HARDWARE_OPTIMIZATIONS=ON + ${PNG_ZLIB_OPTIONS} + -DCMAKE_INSTALL_PREFIX:FILEPATH= + -DCMAKE_TOOLCHAIN_FILE:FILEPATH=${CMAKE_TOOLCHAIN_FILE} + ) + ExternalProject_Add_StepDependencies (png_project configure zlib_project-install) + ExternalProject_Add_StepTargets (png_project install) # Generates png_project-install + endif () + +endif () diff --git a/CMake/SuperBuild/PROJ.cmake b/CMake/SuperBuild/PROJ.cmake new file mode 100644 index 00000000000..58322ec3ffa --- /dev/null +++ b/CMake/SuperBuild/PROJ.cmake @@ -0,0 +1 @@ +include (${CMAKE_CURRENT_LIST_DIR}/Config.cmake) diff --git a/CMake/SuperBuild/PythonAPI.cmake b/CMake/SuperBuild/PythonAPI.cmake new file mode 100644 index 00000000000..5c0f053cdfc --- /dev/null +++ b/CMake/SuperBuild/PythonAPI.cmake @@ -0,0 +1,86 @@ +include (${CMAKE_CURRENT_LIST_DIR}/Config.cmake) + +if (NOT TARGET libcarla_project) + message (FATAL_ERROR "libcarla_project does not exist.") +endif () + +set (PREFIX_PATHS ${CMAKE_PREFIX_PATH}) +set (DEP_ROOTS) + +if (TARGET boost_project) + ExternalProject_Get_Property (boost_project INSTALL_DIR) + list (APPEND DEP_ROOTS -DBoost_ROOT=${INSTALL_DIR}) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/lib/cmake) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/lib/cmake/Boost-${BOOST_VERSION}) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/lib/cmake/boost_asio-${BOOST_VERSION}) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/lib/cmake/boost_iterator-${BOOST_VERSION}) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/lib/cmake/boost_python-${BOOST_VERSION}) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/lib/cmake/boost_date_time-${BOOST_VERSION}) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/lib/cmake/boost_geometry-${BOOST_VERSION}) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/lib/cmake/boost_container-${BOOST_VERSION}) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/lib/cmake/boost_variant2-${BOOST_VERSION}) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/lib/cmake/boost_gil-${BOOST_VERSION}) +endif () + +if (TARGET eigen_project) + ExternalProject_Get_Property (eigen_project INSTALL_DIR) + list (APPEND DEP_ROOTS -DEigen3_ROOT=${INSTALL_DIR}) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/share/eigen3/cmake) +endif () + +if (TARGET zlib_project) + ExternalProject_Get_Property (zlib_project INSTALL_DIR) + list (APPEND DEP_ROOTS -DZLIB_ROOT=${INSTALL_DIR}) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}) +endif () + +if (TARGET png_project) + ExternalProject_Get_Property (png_project INSTALL_DIR) + list (APPEND DEP_ROOTS -DPNG_ROOT=${INSTALL_DIR}) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/lib/cmake/PNG) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/lib/libpng) +endif () + +if (TARGET recast_project) + ExternalProject_Get_Property (recast_project INSTALL_DIR) + list (APPEND DEP_ROOTS -DRRecastNavigation_ROOT=${INSTALL_DIR}) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/lib/cmake/recastnavigation) +endif () + +if (TARGET rpclib_project) + ExternalProject_Get_Property (rpclib_project INSTALL_DIR) + list (APPEND DEP_ROOTS -DRPCLib_ROOT=${INSTALL_DIR}) + list (APPEND PREFIX_PATHS ${INSTALL_DIR}/lib/cmake/rpclib) +endif () + +ExternalProject_Get_Property(libcarla_project INSTALL_DIR) +list (APPEND PREFIX_PATHS ${INSTALL_DIR}/lib/cmake/LibCarla) + +string (REPLACE ";" "," PREFIX_PATHS_ESCAPED "${PREFIX_PATHS}") + +ExternalProject_Add ( + carla_python_api_project + DOWNLOAD_COMMAND "" + SOURCE_DIR ${CARLA_ROOT}/PythonAPI + INSTALL_COMMAND "" + LIST_SEPARATOR , + CMAKE_ARGS + ${DEP_ROOTS} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCARLA_CONFIG_FILEPATH=${CMAKE_CURRENT_LIST_DIR}/Config.cmake + -DENABLE_PEP517=${ENABLE_PEP517} + -DCMAKE_PREFIX_PATH:STRING=${PREFIX_PATHS_ESCAPED} + -DCMAKE_INSTALL_PREFIX:FILEPATH= + -DCMAKE_TOOLCHAIN_FILE:FILEPATH=${CMAKE_TOOLCHAIN_FILE} + DEPENDS + libcarla_project-install +) +ExternalProject_Add_StepTargets (carla_python_api_project install) # Generates carla_python_api_project-install +ExternalProject_Add_StepTargets (carla_python_api_project configure) # Generates carla_python_api_project-configure + +file ( + COPY + ${CARLA_ROOT}/LICENSE + DESTINATION + ${CARLA_ROOT}/PythonAPI/carla/ +) diff --git a/CMake/SuperBuild/RPCLib.cmake b/CMake/SuperBuild/RPCLib.cmake new file mode 100644 index 00000000000..ea1e3e4f2f8 --- /dev/null +++ b/CMake/SuperBuild/RPCLib.cmake @@ -0,0 +1,55 @@ +include (${CMAKE_CURRENT_LIST_DIR}/Config.cmake) + +option ( + CARLA_RPC_USE_FIND_PACKAGE + "Whether to use find_package when retrieving RPCLib." + OFF +) + +if (CARLA_RPC_USE_FIND_PACKAGE) + find_package ( + RPC + QUIET + NO_MODULE + ) +endif () + +if (NOT CARLA_RPC_USE_FIND_PACKAGE OR NOT RPC_FOUND) + + include (ExternalProject) + + if (PREFER_CLONE) + set ( + DOWNLOAD_OPTIONS + GIT_REPOSITORY + https://github.com/carla-simulator/rpclib.git + GIT_TAG ${RPC_TAG} + GIT_SUBMODULES_RECURSE ON + GIT_SHALLOW ON + GIT_PROGRESS ON + ) + else () + set ( + DOWNLOAD_OPTIONS + URL https://github.com/carla-simulator/rpclib/archive/refs/heads/${RPC_TAG}.zip + ) + endif () + + if (NOT TARGET rpclib_project) + ExternalProject_Add ( + rpclib_project + ${DOWNLOAD_OPTIONS} + CMAKE_ARGS + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DRPCLIB_BUILD_TESTS=OFF + -DRPCLIB_GENERATE_COMPDB=OFF + -DRPCLIB_BUILD_EXAMPLES=OFF + -DRPCLIB_ENABLE_LOGGING=OFF + -DRPCLIB_ENABLE_COVERAGE=OFF + -DCMAKE_INSTALL_PREFIX:FILEPATH= + -DCMAKE_TOOLCHAIN_FILE:FILEPATH=${CMAKE_TOOLCHAIN_FILE} + ) + ExternalProject_Add_StepTargets (rpclib_project install) # Generates rpclib_project-install + endif () + +endif () diff --git a/CMake/SuperBuild/Recast.cmake b/CMake/SuperBuild/Recast.cmake new file mode 100644 index 00000000000..66bb62fa554 --- /dev/null +++ b/CMake/SuperBuild/Recast.cmake @@ -0,0 +1,52 @@ +include (${CMAKE_CURRENT_LIST_DIR}/Config.cmake) + +option ( + CARLA_RECAST_USE_FIND_PACKAGE + "Whether to use find_package when retrieving Recast." + OFF +) + +if (CARLA_RECAST_USE_FIND_PACKAGE) + find_package ( + RecastNavigation + QUIET + NO_MODULE + ) +endif () + +if (NOT CARLA_RECAST_USE_FIND_PACKAGE OR NOT RECAST_FOUND) + + include (ExternalProject) + + if (PREFER_CLONE) + set ( + DOWNLOAD_OPTIONS + GIT_REPOSITORY + https://github.com/carla-simulator/recastnavigation.git + GIT_TAG ${RECAST_TAG} + GIT_SUBMODULES_RECURSE ON + GIT_SHALLOW ON + GIT_PROGRESS ON + ) + else () + set ( + DOWNLOAD_OPTIONS + URL https://github.com/carla-simulator/recastnavigation/archive/refs/heads/${RECAST_TAG}.zip + ) + endif () + + if (NOT TARGET recast_project) + ExternalProject_Add ( + recast_project + ${DOWNLOAD_OPTIONS} + CMAKE_CACHE_ARGS + -DRECASTNAVIGATION_BUILDER:BOOL=ON + CMAKE_ARGS + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_INSTALL_PREFIX:FILEPATH= + -DCMAKE_TOOLCHAIN_FILE:FILEPATH=${CMAKE_TOOLCHAIN_FILE} + ) + ExternalProject_Add_StepTargets (recast_project install) # Generates recast_project-install + endif () + +endif () diff --git a/CMake/SuperBuild/SQLite3.cmake b/CMake/SuperBuild/SQLite3.cmake new file mode 100644 index 00000000000..614f6432faf --- /dev/null +++ b/CMake/SuperBuild/SQLite3.cmake @@ -0,0 +1,50 @@ +include (${CMAKE_CURRENT_LIST_DIR}/Config.cmake) + +option ( + CARLA_SQLITE3_USE_FIND_PACKAGE + "Whether to use find_package when retrieving ZLib." + OFF +) + +if (CARLA_SQLITE3_USE_FIND_PACKAGE) + find_package ( + SQLite3 ${SQLITE_VERSION} + EXACT + QUIET + NO_MODULE + ) +endif () + +if (NOT CARLA_SQLITE3_USE_FIND_PACKAGE OR NOT SQLite3_FOUND) + include (FetchContent) + + if (NOT TARGET sqlite3_project) + FetchContent_Declare ( + sqlite3_project + URL https://www.sqlite.org/${SQLITE_RELEASE_YEAR}/sqlite-amalgamation-${CARLA_SQLITE_TAG}.zip + SYSTEM OVERRIDE_FIND_PACKAGE EXCLUDE_FROM_ALL + ) + FetchContent_MakeAvailable (sqlite3_project) + message (STATUS "sqlite3_project_SOURCE_DIR=${sqlite3_project_SOURCE_DIR}") + add_library ( + libsqlite3 + ${sqlite3_project_SOURCE_DIR}/sqlite3.h + ${sqlite3_project_SOURCE_DIR}/sqlite3.c + ) + add_executable ( + sqlite3 + ${sqlite3_project_SOURCE_DIR}/shell.c + ) + if (NOT WIN32) + target_link_libraries (libsqlite3 PRIVATE ${CMAKE_DL_LIBS}) + target_link_libraries (libsqlite3 PRIVATE Threads::Threads) + find_library (STD_MATH_LIB m) + target_link_libraries (libsqlite3 PRIVATE ${STD_MATH_LIB}) + endif () + target_link_libraries ( + sqlite3 PRIVATE + libsqlite3 + ) + endif () + +endif () diff --git a/CMake/SuperBuild/Streetmap.cmake b/CMake/SuperBuild/Streetmap.cmake new file mode 100644 index 00000000000..58322ec3ffa --- /dev/null +++ b/CMake/SuperBuild/Streetmap.cmake @@ -0,0 +1 @@ +include (${CMAKE_CURRENT_LIST_DIR}/Config.cmake) diff --git a/CMake/SuperBuild/XercesC.cmake b/CMake/SuperBuild/XercesC.cmake new file mode 100644 index 00000000000..58322ec3ffa --- /dev/null +++ b/CMake/SuperBuild/XercesC.cmake @@ -0,0 +1 @@ +include (${CMAKE_CURRENT_LIST_DIR}/Config.cmake) diff --git a/CMake/SuperBuild/ZLIB.cmake b/CMake/SuperBuild/ZLIB.cmake new file mode 100644 index 00000000000..22210960f65 --- /dev/null +++ b/CMake/SuperBuild/ZLIB.cmake @@ -0,0 +1,52 @@ +include (${CMAKE_CURRENT_LIST_DIR}/Config.cmake) + +option ( + CARLA_ZLIB_USE_FIND_PACKAGE + "Whether to use find_package when retrieving ZLib." + OFF +) + +if (CARLA_ZLIB_USE_FIND_PACKAGE) + find_package ( + ZLIB ${ZLIB_VERSION} + EXACT + QUIET + NO_MODULE + ) +endif () + +if (NOT CARLA_ZLIB_USE_FIND_PACKAGE OR NOT ZLIB_FOUND) + + include (ExternalProject) + + if (PREFER_CLONE) + set ( + DOWNLOAD_OPTIONS + GIT_REPOSITORY + https://github.com/madler/zlib.git + GIT_TAG ${ZLIB_TAG} + GIT_SUBMODULES_RECURSE ON + GIT_SHALLOW ON + GIT_PROGRESS ON + ) + else () + set ( + DOWNLOAD_OPTIONS + URL https://github.com/madler/zlib/archive/refs/tags/${ZLIB_TAG}.zip + ) + endif () + + if (NOT TARGET zlib_project) + ExternalProject_Add ( + zlib_project + ${DOWNLOAD_OPTIONS} + CMAKE_ARGS + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DZLIB_BUILD_EXAMPLES=OFF + -DCMAKE_INSTALL_PREFIX:FILEPATH= + -DCMAKE_TOOLCHAIN_FILE:FILEPATH=${CMAKE_TOOLCHAIN_FILE} + ) + ExternalProject_Add_StepTargets (zlib_project install) # Generates eigen_project-install + endif () + +endif () diff --git a/CMake/Util.cmake b/CMake/Util.cmake deleted file mode 100644 index bc8ad99d6ad..00000000000 --- a/CMake/Util.cmake +++ /dev/null @@ -1,181 +0,0 @@ -# message wrapper for normal messages. -function (carla_message) - message (STATUS "CARLA: " ${ARGN}) -endfunction () - -# message wrapper for normal messages. -function (carla_message_verbose) - if (VERBOSE_CONFIGURE) - message (STATUS "CARLA: " ${ARGN}) - endif () -endfunction () - - - -# message() wrapper for warnings. -function (carla_warning) - message (WARNING ${ARGN}) -endfunction () - - - -# message() wrapper for errors. -function (carla_error) - message (FATAL_ERROR ${ARGN}) -endfunction () - - - -function (carla_get_option_docs OUT_VAR) - get_property (DOCS GLOBAL PROPERTY CARLA_OPTION_DOCS) - set (${OUT_VAR} ${DOCS}) - return (PROPAGATE ${OUT_VAR}) -endfunction () - -macro (carla_option NAME DESCRIPTION VALUE) - option (${NAME} ${DESCRIPTION} ${VALUE}) - carla_message_verbose ("(option) ${NAME} : ${${NAME}}") - get_property (DOCS GLOBAL PROPERTY CARLA_OPTION_DOCS) - string ( - APPEND - DOCS - "- ${NAME}\n" - "\t- Description: ${DESCRIPTION}\n" - "\t- Default: ${VALUE}\n" - ) - set_property (GLOBAL PROPERTY CARLA_OPTION_DOCS ${DOCS}) -endmacro () - - - -macro (carla_string_option NAME DESCRIPTION VALUE) - set (${NAME} "${VALUE}") - carla_message_verbose ("(option) ${NAME} : \"${${NAME}}\"") - get_property (DOCS GLOBAL PROPERTY CARLA_OPTION_DOCS) - string ( - APPEND - DOCS - "- ${NAME}\n" - "\t- Description: ${DESCRIPTION}\n" - "\t- Default: \"${VALUE}\"\n" - ) - set_property (GLOBAL PROPERTY CARLA_OPTION_DOCS ${DOCS}) -endmacro () - - - -# Similar to configure_file, but also expands variables -# that are set at generate time, like generator expressions. -function (carla_two_step_configure_file DESTINATION SOURCE) - carla_message_verbose ("Configuring file ${DESTINATION}") - # Configure-time step; evaluate variables: - configure_file (${SOURCE} ${DESTINATION} @ONLY) - # Generate-time step; evaluate generator expressions: - file (GENERATE OUTPUT ${DESTINATION} INPUT ${DESTINATION}) -endfunction () - - - -# If, for some reason, CARLA is configured with CMake<3.5, this is necessary: -if (${CMAKE_VERSION} VERSION_LESS 3.5) - include (CMakeParseArguments) -endif () - -function (carla_add_target_docs) - set (OPTIONS) - set (ONE_VAL_ARGS NAME TYPE DOCS_BRIEF) - set (MULTI_VAL_ARGS) - cmake_parse_arguments ( - ARG - "${OPTIONS}" - "${ONE_VAL_ARGS}" - "${MULTI_VAL_ARGS}" - ${ARGN} - ) - get_property (DOCS GLOBAL PROPERTY CARLA_TARGET_DOCS) - string (APPEND DOCS "- ${ARG_NAME}\n") - if (NOT ${ARG_TYPE} STREQUAL "") - string (APPEND DOCS "\t- Type: ${ARG_TYPE}\n") - endif () - if (NOT ${ARG_DOCS_BRIEF} STREQUAL "") - string (APPEND DOCS "\t- Description: ${ARG_DOCS_BRIEF}\n") - endif () - set_property (GLOBAL PROPERTY CARLA_TARGET_DOCS ${DOCS}) -endfunction () - - - -function (carla_get_target_docs OUT_VAR) - get_property (DOCS GLOBAL PROPERTY CARLA_TARGET_DOCS) - set (${OUT_VAR} ${DOCS}) - return (PROPAGATE ${OUT_VAR}) -endfunction () - - - -function (carla_add_library NAME DESCRIPTION) - carla_add_target_docs ( - NAME ${NAME} - TYPE Library - DOCS_BRIEF ${DESCRIPTION} - ) - add_library (${NAME} ${ARGN}) -endfunction () - - - -function (carla_add_executable NAME DESCRIPTION) - carla_add_target_docs ( - NAME ${NAME} - TYPE Executable - DOCS_BRIEF ${DESCRIPTION} - ) - add_executable (${NAME} ${ARGN}) -endfunction () - - - -function (carla_add_custom_target NAME DESCRIPTION) - carla_add_target_docs ( - NAME ${NAME} - TYPE CustomTarget - DOCS_BRIEF ${DESCRIPTION} - ) - add_custom_target (${NAME} ${ARGN}) -endfunction () - - - -if (VERBOSE_CONFIGURE) - macro (carla_print_cmake_variable NAME) - carla_message ("${NAME}: \'${${NAME}}\'") - endmacro () - - carla_print_cmake_variable (CMAKE_C_COMPILER) - carla_print_cmake_variable (CMAKE_CXX_COMPILER) - carla_print_cmake_variable (CMAKE_ASM_COMPILER) - carla_print_cmake_variable (CMAKE_AR) - carla_print_cmake_variable (CMAKE_C_COMPILER_AR) - carla_print_cmake_variable (CMAKE_CXX_COMPILER_AR) - carla_print_cmake_variable (CMAKE_OBJCOPY) - carla_print_cmake_variable (CMAKE_ADDR2LINE) - carla_print_cmake_variable (CMAKE_C_COMPILER_RANLIB) - carla_print_cmake_variable (CMAKE_CXX_COMPILER_RANLIB) - carla_print_cmake_variable (CMAKE_LINKER) - carla_print_cmake_variable (CMAKE_NM) - carla_print_cmake_variable (CMAKE_OBJDUMP) - carla_print_cmake_variable (CMAKE_RANLIB) - carla_print_cmake_variable (CMAKE_READELF) - carla_print_cmake_variable (CMAKE_STRIP) - carla_print_cmake_variable (COVERAGE_COMMAND) - carla_print_cmake_variable (CMAKE_CXX_STANDARD_LIBRARIES) - carla_print_cmake_variable (CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES) -endif () - - - -carla_add_target_docs ( - NAME clean - TYPE Builtin - DOCS_BRIEF "Removes all build directories and files." -) diff --git a/CMakeLists.txt b/CMakeLists.txt index b030a641f09..27a0ceec6ec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,14 +8,9 @@ ]] -set ( - CARLA_CMAKE_MINIMUM_REQUIRED_VERSION - 3.27.2 -) - cmake_minimum_required ( VERSION - ${CARLA_CMAKE_MINIMUM_REQUIRED_VERSION} + 3.28 ) cmake_policy (SET CMP0097 NEW) @@ -42,100 +37,106 @@ project ( VERSION ${CARLA_VERSION} LANGUAGES - C - CXX - ASM + C CXX ASM DESCRIPTION "Open-source simulator for autonomous driving research." HOMEPAGE_URL https://carla.org ) -set ( - CARLA_WORKSPACE_PATH - ${CMAKE_CURRENT_SOURCE_DIR} -) - -set ( - CARLA_BUILD_PATH - ${CMAKE_BINARY_DIR} -) - -set ( - CARLA_PACKAGE_PATH - ${CARLA_BUILD_PATH}/Package -) - -set ( - CARLA_UNREAL_PLUGINS_PATH - ${CARLA_WORKSPACE_PATH}/Unreal/CarlaUnreal/Plugins -) - -set ( - CARLA_LICENSE_FILE_PATH - ${CARLA_WORKSPACE_PATH}/LICENSE -) +set (CARLA_ROOT ${CMAKE_CURRENT_SOURCE_DIR}) include (CheckCCompilerFlag) include (CheckCXXCompilerFlag) include (CheckLinkerFlag) -include (${CARLA_WORKSPACE_PATH}/CMake/Util.cmake) -include (${CARLA_WORKSPACE_PATH}/CMake/Options.cmake) -include (${CARLA_WORKSPACE_PATH}/CMake/Common.cmake) -include (${CARLA_WORKSPACE_PATH}/CMake/Dependencies.cmake) -if (BUILD_CARLA_CLIENT OR BUILD_CARLA_SERVER) - add_subdirectory (LibCarla) +if (CMAKE_BUILD_TYPE STREQUAL "Debug") + message (WARNING + "CARLA is set to be built in Debug mode. This may cause issues when building CarlaUnrealEditor." + ) endif () -if (BUILD_OSM_WORLD_RENDERER) - add_subdirectory (osm-world-renderer) +if (LINUX) + check_linker_flag (CXX -lpthread HAS_PTHREAD) + if (HAS_PTHREAD) + add_link_options (-lpthread) + endif () endif () -if (ENABLE_ROS2) - add_subdirectory (Ros2Native) -endif() +if (WIN32) + if (CMAKE_BUILD_TYPE STREQUAL "Debug") + set (CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDebugDLL") + else () + set (CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDLL") + endif () +endif () -if (BUILD_PYTHON_API) - add_subdirectory (PythonAPI) +if (WIN32) + check_cxx_compiler_flag (/utf-8 HAS_MSVC_UTF8) + if (HAS_MSVC_UTF8) + # @TODO This causes warnings with MASM. A better approach should be looked into. + add_compile_options ($<$:/utf-8>) + endif () endif () -if (BUILD_CARLA_UNREAL) - add_subdirectory (Unreal) +include (${CARLA_ROOT}/CMake/Common.cmake) + +option (BUILD_SERVER "Build the CARLA server." ON) +option (BUILD_CLIENT "Build the CARLA client." ON) +option (BUILD_PYTHON_API "Build the CARLA Python API." ON) +option (BUILD_EXAMPLES "Build CARLA examples." ON) +option (ENABLE_ROS2 "Enable ROS2." OFF) +option (ENABLE_ROS2_DEMO "Enable ROS2 demo." OFF) +option (ENABLE_OSM2ODR "Enable OSM2ODR." OFF) +option (ENABLE_RSS "Enable RSS components (ad-rss-lib)" OFF) +option (BUILD_OSM_WORLD_RENDERER "Build OSM World Renderer." OFF) +option (ENABLE_RTTI "Enable C++ RTTI." ON) +option (ENABLE_EXCEPTIONS "Enable C++ Exceptions." ON) +option (PREFER_CLONE "Whether to clone dependencies instead of directly downloading a compressed archive." OFF) +option (ENABLE_PEP517 "Whether to use PEP 517." ON) +option (ENABLE_ALL_WARNINGS "Whether to emit extra build warnings." ON) +option (ENABLE_WARNINGS_TO_ERRORS "Whether to convert build warnings to errors." OFF) + +option (ENABLE_STREETMAP "Whether to download the Streetmap UE plugin." ON) + +include (${CMAKE_CURRENT_LIST_DIR}/CMake/SuperBuild/Config.cmake) +include (${CMAKE_CURRENT_LIST_DIR}/CMake/SuperBuild/LibCarla.cmake) + +if (BUILD_PYTHON_API) + include (${CMAKE_CURRENT_LIST_DIR}/CMake/SuperBuild/PythonAPI.cmake) endif () -if (BUILD_EXAMPLES) - add_subdirectory (Examples) +# if (BUILD_CARLA_UNREAL) +# add_subdirectory (Unreal) +# endif () + +if (BUILD_OSM_WORLD_RENDERER) + add_subdirectory (osm-world-renderer) endif () -carla_add_custom_target ( - carla-help - "Display this message." - COMMAND ${CMAKE_COMMAND} -E cat "${CMAKE_CURRENT_BINARY_DIR}/Help.md" -) +if (ENABLE_ROS2) + add_subdirectory (Ros2Native) +endif() -carla_get_option_docs (CARLA_OPTION_DOCS) -carla_get_target_docs (CARLA_TARGET_DOCS) -set (CARLA_CMAKE_HELP_MESSAGE) -string ( - APPEND - CARLA_CMAKE_HELP_MESSAGE - "# CARLA - CMake Help\n" - "## CMake Targets\n" - "${CARLA_TARGET_DOCS}\n" - "## CMake Options\n" - "${CARLA_OPTION_DOCS}\n" +file ( + WRITE + ${CMAKE_CURRENT_BINARY_DIR}/targets.txt + ${CARLA_TARGETS_HELPER_TEXT} ) +if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/targets.txt) + file (REMOVE ${CMAKE_CURRENT_SOURCE_DIR}/targets.txt) +endif () + file ( - WRITE - ${CMAKE_CURRENT_BINARY_DIR}/Help.md - ${CARLA_CMAKE_HELP_MESSAGE} + CREATE_LINK + ${CMAKE_CURRENT_BINARY_DIR}/targets.txt + ${CMAKE_CURRENT_SOURCE_DIR}/targets.txt ) if (CMAKE_EXPORT_COMPILE_COMMANDS) configure_file ( - ${CARLA_WORKSPACE_PATH}/.clangd.in - ${CARLA_WORKSPACE_PATH}/.clangd + ${CARLA_ROOT}/.clangd.in + ${CARLA_ROOT}/.clangd ) endif () diff --git a/CMakePresets.json b/CMakePresets.json index 8fd5880aae7..5e11ec1645c 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -15,7 +15,8 @@ "installDir": "${sourceDir}/Install/${presetName}", "cacheVariables": { - "CMAKE_TOOLCHAIN_FILE": "${sourceDir}/CMake/Toolchain.cmake" + "CMAKE_TOOLCHAIN_FILE": "${sourceDir}/CMake/Toolchain.cmake", + "CMAKE_EXPORT_COMPILE_COMMANDS" : true }, "hidden": true }, @@ -24,8 +25,7 @@ "inherits": "Common", "cacheVariables": { - "CMAKE_BUILD_TYPE": "RelWithDebInfo", - "CMAKE_EXPORT_COMPILE_COMMANDS" : true + "CMAKE_BUILD_TYPE": "RelWithDebInfo" } }, { @@ -41,8 +41,7 @@ "inherits": "Common", "cacheVariables": { - "CMAKE_BUILD_TYPE": "Debug", - "CMAKE_EXPORT_COMPILE_COMMANDS" : true + "CMAKE_BUILD_TYPE": "Debug" } } ] diff --git a/LibCarla/CMake/LibCarlaConfig.cmake.in b/LibCarla/CMake/LibCarlaConfig.cmake.in new file mode 100644 index 00000000000..dda405b72f3 --- /dev/null +++ b/LibCarla/CMake/LibCarlaConfig.cmake.in @@ -0,0 +1,3 @@ +@PACKAGE_INIT@ + +include (${CMAKE_CURRENT_LIST_DIR}/LibCarlaTargets.cmake) \ No newline at end of file diff --git a/LibCarla/CMakeLists.txt b/LibCarla/CMakeLists.txt index b9fbd925fb4..10350826127 100644 --- a/LibCarla/CMakeLists.txt +++ b/LibCarla/CMakeLists.txt @@ -1,43 +1,97 @@ +cmake_minimum_required ( + VERSION + 3.28 +) + +if (CARLA_CONFIG_FILEPATH) + include (${CARLA_CONFIG_FILEPATH}) +else () + message (WARNING "Missing \"CARLA_CONFIG_FILEPATH\"") +endif () + project ( - libcarla + LibCarla LANGUAGES - CXX + C CXX VERSION ${CARLA_VERSION} ) +option (BUILD_SERVER "Build the CARLA server." ON) +option (BUILD_CLIENT "Build the CARLA client." ON) +option (ENABLE_RSS "Enable RSS components (ad-rss-lib)" OFF) +option (ENABLE_ROS2 "Enable ROS2." OFF) +option (ENABLE_ROS2_DEMO "Enable ROS2 demo." OFF) + +find_package ( + Boost ${BOOST_VERSION} EXACT REQUIRED + COMPONENTS + asio geometry algorithm assert gil +) + +find_package ( + RecastNavigation REQUIRED + COMPONENTS + Recast Detour DetourCrowd +) + +find_package (Eigen3 ${EIGEN_VERSION} EXACT REQUIRED) +find_package (ZLIB ${ZLIB_VERSION} EXACT REQUIRED) +find_package (RPCLib REQUIRED) +find_package (PNG ${PNG_VERSION} EXACT REQUIRED) + +set (CMAKE_C_STANDARD 11) +set (CMAKE_C_STANDARD_REQUIRED ON) + +set (CMAKE_CXX_STANDARD 20) +set (CMAKE_CXX_STANDARD_REQUIRED ON) + +if (BUILD_SHARED_LIBS) + set (CMAKE_POSITION_INDEPENDENT_CODE ON) +endif () + set ( LIBCARLA_SOURCE_PATH - ${CARLA_WORKSPACE_PATH}/LibCarla/source + ${CMAKE_CURRENT_SOURCE_DIR}/Source ) -carla_two_step_configure_file ( - ${LIBCARLA_SOURCE_PATH}/carla/Version.h - ${LIBCARLA_SOURCE_PATH}/carla/Version.h.in +set (LIBCARLA_IMAGE_SUPPORTED_FORMATS_DEFAULT) +if (TARGET PNG::PNG) + list (APPEND LIBCARLA_IMAGE_SUPPORTED_FORMATS_DEFAULT "png") +endif () + +set ( + LIBCARLA_IMAGE_SUPPORTED_FORMATS + "${LIBCARLA_IMAGE_SUPPORTED_FORMATS_DEFAULT}" + CACHE STRING + "Semicolon-separated list of supported image formats by LibCarla. Available formats: png, jpeg, tiff." ) +set (CARLA_COMMON_DEFINITIONS) + +foreach (FORMAT ${LIBCARLA_IMAGE_SUPPORTED_FORMATS}) + message (STATUS "Enabling CARLA image support for \"${FORMAT}\".") + string (TOUPPER "${FORMAT}" FORMAT_UPPERCASE) + list (APPEND CARLA_COMMON_DEFINITIONS LIBCARLA_IMAGE_SUPPORT_${FORMAT_UPPERCASE}=1) + set (LIBCARLA_IMAGE_SUPPORT_${FORMAT_UPPERCASE} TRUE CACHE BOOL "") +endforeach () + if (WIN32) + # Documentation: https://learn.microsoft.com/en-us/cpp/porting/modifying-winver-and-win32-winnt?view=msvc-170 + list (APPEND CARLA_COMMON_DEFINITIONS _WIN32_WINNT=0x0601) # <- Windows 10 + list (APPEND CARLA_COMMON_DEFINITIONS HAVE_SNPRINTF) + list (APPEND CARLA_COMMON_DEFINITIONS _USE_MATH_DEFINES) +endif () - set ( - WINNT_MACRO_PATH - ${LIBCARLA_SOURCE_PATH}/util/winnt-macros.txt - ) - file ( - STRINGS - ${WINNT_MACRO_PATH} - WINDOWS_MACRO_LIST - ) - set ( - GUARD_BEGIN_FILE_TEXT - "" - ) +if (WIN32) - set ( - GUARD_END_FILE_TEXT - "" - ) + set (WINNT_MACRO_PATH ${LIBCARLA_SOURCE_PATH}/util/winnt-macros.txt) + file (STRINGS ${WINNT_MACRO_PATH} WINDOWS_MACRO_LIST) + + set (GUARD_BEGIN_FILE_TEXT "") + set (GUARD_END_FILE_TEXT "") foreach (WINDOWS_MACRO ${WINDOWS_MACRO_LIST}) string ( @@ -53,49 +107,37 @@ if (WIN32) ) endforeach () - file ( - WRITE - ${LIBCARLA_SOURCE_PATH}/util/ue-header-guard-begin.h - ${GUARD_BEGIN_FILE_TEXT} - ) - - file ( - WRITE - ${LIBCARLA_SOURCE_PATH}/util/ue-header-guard-end.h - ${GUARD_END_FILE_TEXT} - ) - - set_directory_properties( - PROPERTIES - CMAKE_CONFIGURE_DEPENDS - ${WINNT_MACRO_PATH} - ) + file (WRITE ${CMAKE_CURRENT_BINARY_DIR}/ue-header-guard-begin.h ${GUARD_BEGIN_FILE_TEXT}) + file (WRITE ${CMAKE_CURRENT_BINARY_DIR}/ue-header-guard-end.h ${GUARD_END_FILE_TEXT}) else () - file ( - WRITE - ${LIBCARLA_SOURCE_PATH}/util/ue-header-guard-begin.h - "" - ) - - file ( - WRITE - ${LIBCARLA_SOURCE_PATH}/util/ue-header-guard-end.h - "" - ) + file (WRITE ${CMAKE_CURRENT_BINARY_DIR}/ue-header-guard-begin.h "") + file (WRITE ${CMAKE_CURRENT_BINARY_DIR}/ue-header-guard-end.h "") endif () +configure_file ( + ${LIBCARLA_SOURCE_PATH}/carla/Version.h.in + ${CMAKE_CURRENT_BINARY_DIR}/carla/Version.h +) + +configure_file ( + ${LIBCARLA_SOURCE_PATH}/carla/Config.h.in + ${CMAKE_CURRENT_BINARY_DIR}/carla/Config.h +) +set ( + LIBCARLA_GENERATED_HEADERS + ${CMAKE_CURRENT_BINARY_DIR}/carla/Version.h + ${CMAKE_CURRENT_BINARY_DIR}/carla/Config.h +) -if (BUILD_CARLA_SERVER) +if (BUILD_SERVER) file ( GLOB LIBCARLA_SERVER_SOURCES - ${LIBCARLA_SOURCE_PATH}/carla/Buffer.cpp - ${LIBCARLA_SOURCE_PATH}/carla/Exception.cpp ${LIBCARLA_SOURCE_PATH}/carla/geom/*.cpp ${LIBCARLA_SOURCE_PATH}/carla/opendrive/*.cpp ${LIBCARLA_SOURCE_PATH}/carla/opendrive/parser/*.cpp @@ -105,25 +147,24 @@ if (BUILD_CARLA_SERVER) ${LIBCARLA_SOURCE_PATH}/carla/road/object/*.cpp ${LIBCARLA_SOURCE_PATH}/carla/road/signal/*.cpp ${LIBCARLA_SOURCE_PATH}/carla/rpc/*.cpp - ${LIBCARLA_SOURCE_PATH}/carla/sensor/s11n/SensorHeaderSerializer.cpp ${LIBCARLA_SOURCE_PATH}/carla/streaming/detail/*.cpp ${LIBCARLA_SOURCE_PATH}/carla/streaming/detail/tcp/*.cpp ${LIBCARLA_SOURCE_PATH}/carla/multigpu/*.cpp ) - + + list ( + APPEND + LIBCARLA_SERVER_SOURCES + ${LIBCARLA_SOURCE_PATH}/carla/Buffer.cpp + # ${LIBCARLA_SOURCE_PATH}/carla/Exception.cpp + ${LIBCARLA_SOURCE_PATH}/carla/sensor/s11n/SensorHeaderSerializer.cpp + ) + if (ENABLE_ROS2) - file ( - GLOB - LIBCARLA_SERVER_SOURCES_ROS2 - ${LIBCARLA_SOURCE_PATH}/carla/ros2/*.cpp - ) - list ( - APPEND - LIBCARLA_SERVER_SOURCES - ${LIBCARLA_SERVER_SOURCES_ROS2} - ) + file (GLOB LIBCARLA_SERVER_SOURCES_ROS2 ${LIBCARLA_SOURCE_PATH}/carla/ros2/*.cpp) + list (APPEND LIBCARLA_SERVER_SOURCES ${LIBCARLA_SERVER_SOURCES_ROS2}) endif () - + file ( GLOB LIBCARLA_SERVER_SOURCES_THIRD_PARTY @@ -131,7 +172,7 @@ if (BUILD_CARLA_SERVER) ${LIBCARLA_SOURCE_PATH}/third-party/moodycamel/*.cpp ${LIBCARLA_SOURCE_PATH}/third-party/pugixml/*.cpp ) - + file ( GLOB LIBCARLA_SERVER_HEADERS @@ -157,27 +198,23 @@ if (BUILD_CARLA_SERVER) list ( APPEND LIBCARLA_SERVER_HEADERS - ${LIBCARLA_SOURCE_PATH}/util/winnt-macros.txt + ${LIBCARLA_GENERATED_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/ue-header-guard-begin.h + ${CMAKE_CURRENT_BINARY_DIR}/ue-header-guard-end.h ) + + set (CARLA_ROS2_DEFINITIONS) if (ENABLE_ROS2) - file ( - GLOB - LIBCARLA_SERVER_HEADERS_ROS2 - ${LIBCARLA_SOURCE_PATH}/carla/ros2/*.h - ) - list ( - APPEND - LIBCARLA_SERVER_HEADERS - ${LIBCARLA_SERVER_HEADERS_ROS2} - ) - set (CARLA_ROS2_DEFINITIONS WITH_ROS2) + file (GLOB LIBCARLA_SERVER_HEADERS_ROS2 ${LIBCARLA_SOURCE_PATH}/carla/ros2/*.h) + list (APPEND LIBCARLA_SERVER_HEADERS ${LIBCARLA_SERVER_HEADERS_ROS2}) + list (APPEND CARLA_ROS2_DEFINITIONS WITH_ROS2) endif () - + if (ENABLE_ROS2_DEMO) - set (CARLA_ROS2_DEFINITIONS ${CARLA_ROS2_DEFINITIONS} WITH_ROS2_DEMO) + list (APPEND CARLA_ROS2_DEFINITIONS WITH_ROS2_DEMO) endif () - + file ( GLOB LIBCARLA_SERVER_HEADERS_THIRD_PARTY @@ -185,18 +222,19 @@ if (BUILD_CARLA_SERVER) ${LIBCARLA_SOURCE_PATH}/third-party/moodycamel/*.h ${LIBCARLA_SOURCE_PATH}/third-party/pugixml/*.hpp ) - - carla_add_library ( - carla-server - "Build the CARLA server." + + add_library ( + Server ${LIBCARLA_SERVER_HEADERS} ${LIBCARLA_SERVER_SOURCES} ${LIBCARLA_SERVER_HEADERS_THIRD_PARTY} ${LIBCARLA_SERVER_SOURCES_THIRD_PARTY} ) + add_library (LibCarla::Server ALIAS Server) + target_link_libraries ( - carla-server PUBLIC SYSTEM + Server PUBLIC Boost::asio Boost::geometry Boost::algorithm @@ -205,34 +243,61 @@ if (BUILD_CARLA_SERVER) RecastNavigation::Recast RecastNavigation::Detour RecastNavigation::DetourCrowd - png_static - zlibstatic - rpc + ZLIB::ZLIB + rpclib::rpc ) + + if (TARGET PNG::PNG) + target_link_libraries (Server PUBLIC PNG::PNG) + endif () target_include_directories ( - carla-server PUBLIC - ${LIBCARLA_SOURCE_PATH} + Server PUBLIC + $ + $ ) - + + target_include_directories ( + Server PRIVATE + ${CMAKE_CURRENT_BINARY_DIR} + ) + target_compile_definitions ( - carla-server PUBLIC + Server PUBLIC ${CARLA_COMMON_DEFINITIONS} ${CARLA_EXCEPTION_DEFINITIONS} ${CARLA_RTTI_DEFINITIONS} ${CARLA_ROS2_DEFINITIONS} ) - - if (ENABLE_ROS2) - add_dependencies (carla-server carla-ros2-native) - endif () + + foreach (HEADER ${LIBCARLA_SERVER_HEADERS}) + cmake_path ( + GET + HEADER + PARENT_PATH + HEADER_PARENT + ) + cmake_path ( + RELATIVE_PATH + HEADER_PARENT + BASE_DIRECTORY + ${LIBCARLA_SOURCE_PATH} + OUTPUT_VARIABLE + HEADER_PARENT_RELATIVE + ) + install ( + FILES + ${HEADER} + DESTINATION + include/${HEADER_PARENT_RELATIVE} + ) + endforeach () endif () -if (BUILD_CARLA_CLIENT) - +if (BUILD_CLIENT) file ( GLOB LIBCARLA_CLIENT_HEADERS @@ -263,26 +328,20 @@ if (BUILD_CARLA_CLIENT) ${LIBCARLA_SOURCE_PATH}/carla/trafficmanager/*.h ${LIBCARLA_SOURCE_PATH}/util/*.h ) - + list ( APPEND LIBCARLA_CLIENT_HEADERS - ${LIBCARLA_SOURCE_PATH}/util/winnt-macros.txt + ${LIBCARLA_GENERATED_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/ue-header-guard-begin.h + ${CMAKE_CURRENT_BINARY_DIR}/ue-header-guard-end.h ) - + if (ENABLE_RSS) - file ( - GLOB - LIBCARLA_CLIENT_HEADERS_RSS - ${LIBCARLA_SOURCE_PATH}/carla/rss/*.h - ) - list ( - APPEND - LIBCARLA_CLIENT_HEADERS - ${LIBCARLA_CLIENT_HEADERS_RSS} - ) + file (GLOB LIBCARLA_CLIENT_HEADERS_RSS ${LIBCARLA_SOURCE_PATH}/carla/rss/*.h) + list (APPEND LIBCARLA_CLIENT_HEADERS ${LIBCARLA_CLIENT_HEADERS_RSS}) endif () - + file ( GLOB LIBCARLA_CLIENT_HEADERS_THIRD_PARTY @@ -291,7 +350,7 @@ if (BUILD_CARLA_CLIENT) ${LIBCARLA_SOURCE_PATH}/third-party/pugixml/*.hpp ${LIBCARLA_SOURCE_PATH}/third-party/pugixml/*.h ) - + file ( GLOB LIBCARLA_CLIENT_SOURCES @@ -320,62 +379,156 @@ if (BUILD_CARLA_CLIENT) ${LIBCARLA_SOURCE_PATH}/carla/multigpu/*.cpp ${LIBCARLA_SOURCE_PATH}/carla/trafficmanager/*.cpp ) - + if (ENABLE_RSS) - file ( - GLOB - LIBCARLA_CLIENT_SOURCES_RSS - ${LIBCARLA_SOURCE_PATH}/carla/rss/*.cpp - ) - list ( - APPEND - LIBCARLA_CLIENT_SOURCES - ${LIBCARLA_CLIENT_SOURCES_RSS} - ) + file (GLOB LIBCARLA_CLIENT_SOURCES_RSS ${LIBCARLA_SOURCE_PATH}/carla/rss/*.cpp) + list (APPEND LIBCARLA_CLIENT_SOURCES ${LIBCARLA_CLIENT_SOURCES_RSS}) endif () - + file ( GLOB LIBCARLA_CLIENT_SOURCES_THIRD_PARTY ${LIBCARLA_SOURCE_PATH}/third-party/odrSpiral/*.cpp ${LIBCARLA_SOURCE_PATH}/third-party/pugixml/*.cpp ) - - carla_add_library ( - carla-client - "Build the CARLA client." + + add_library ( + Client ${LIBCARLA_CLIENT_HEADERS} ${LIBCARLA_CLIENT_SOURCES} ${LIBCARLA_CLIENT_HEADERS_THIRD_PARTY} ${LIBCARLA_CLIENT_SOURCES_THIRD_PARTY} ) + + add_library (LibCarla::Client ALIAS Client) target_link_libraries ( - carla-client PUBLIC + Client PUBLIC Boost::asio - Boost::python - Boost::algorithm Boost::geometry + Boost::algorithm Boost::assert Boost::gil RecastNavigation::Recast RecastNavigation::Detour RecastNavigation::DetourCrowd - png_static - zlibstatic - rpc + ZLIB::ZLIB + rpclib::rpc + ) + + if (TARGET PNG::PNG) + target_link_libraries (Client PUBLIC PNG::PNG) + endif () + + target_include_directories ( + Client PUBLIC + $ + $ ) target_include_directories ( - carla-client PUBLIC - ${LIBCARLA_SOURCE_PATH} + Client PRIVATE + ${CMAKE_CURRENT_BINARY_DIR} ) - + target_compile_definitions ( - carla-client PUBLIC + Client PUBLIC ${CARLA_COMMON_DEFINITIONS} ${CARLA_EXCEPTION_DEFINITIONS} ${CARLA_RTTI_DEFINITIONS} ) + foreach (HEADER ${LIBCARLA_CLIENT_HEADERS}) + cmake_path ( + GET + HEADER + PARENT_PATH + HEADER_PARENT + ) + cmake_path (IS_PREFIX LIBCARLA_SOURCE_PATH ${HEADER} FROM_SOURCE) + cmake_path (IS_PREFIX CMAKE_CURRENT_BINARY_DIR ${HEADER} FROM_BINARY) + if (FROM_SOURCE) + set (PARENT_PATH ${LIBCARLA_SOURCE_PATH}) + elseif (FROM_BINARY) + set (PARENT_PATH ${CMAKE_CURRENT_BINARY_DIR}) + else () + message (FATAL_ERROR "Could not determine where to install ${HEADER}.") + endif () + cmake_path ( + RELATIVE_PATH + HEADER_PARENT + BASE_DIRECTORY + ${PARENT_PATH} + OUTPUT_VARIABLE + HEADER_PARENT_RELATIVE + ) + install ( + FILES + ${HEADER} + DESTINATION + include/${HEADER_PARENT_RELATIVE} + ) + endforeach () + +endif () + +set (LIBCARLA_TARGETS) + +if (BUILD_CLIENT) + list (APPEND LIBCARLA_TARGETS Client) +endif () + +if (BUILD_SERVER) + list (APPEND LIBCARLA_TARGETS Server) +endif () + +install ( + TARGETS + ${LIBCARLA_TARGETS} + EXPORT LibCarlaTargets + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib + RUNTIME DESTINATION bin + INCLUDES DESTINATION include +) + +install ( + EXPORT LibCarlaTargets + FILE LibCarlaTargets.cmake + NAMESPACE LibCarla:: + DESTINATION lib/cmake/LibCarla +) + +include (CMakePackageConfigHelpers) + +configure_package_config_file ( + ${CMAKE_CURRENT_LIST_DIR}/Cmake/LibCarlaConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/LibCarlaConfig.cmake + INSTALL_DESTINATION lib/cmake/LibCarla +) + +install ( + FILES + ${CMAKE_CURRENT_BINARY_DIR}/LibCarlaConfig.cmake + DESTINATION + lib/cmake/LibCarla +) + +write_basic_package_version_file ( + ${CMAKE_CURRENT_BINARY_DIR}/LibCarlaConfigVersion.cmake + VERSION + ${CARLA_VERSION} + COMPATIBILITY + SameMajorVersion +) + +install( + FILES + ${CMAKE_CURRENT_BINARY_DIR}/LibCarlaConfigVersion.cmake + DESTINATION + lib/cmake/LibCarla +) + +if (BUILD_EXAMPLES) + add_subdirectory (Examples) endif () diff --git a/Examples/CMakeLists.txt b/LibCarla/examples/CMakeLists.txt similarity index 83% rename from Examples/CMakeLists.txt rename to LibCarla/examples/CMakeLists.txt index 7705edf1f12..781170f9420 100644 --- a/Examples/CMakeLists.txt +++ b/LibCarla/examples/CMakeLists.txt @@ -1,9 +1,9 @@ set ( CARLA_EXAMPLE_CPP_CLIENT_SOURCE_PATH - ${CARLA_WORKSPACE_PATH}/Examples/CppClient + ${CARLA_ROOT}/Examples/CppClient ) -carla_message ("CARLA Building C++ EXAMPLE CLIENT") +message (STATUS "CARLA Building C++ EXAMPLE CLIENT") project ( carla-example-cpp-client @@ -27,7 +27,7 @@ file ( ${CARLA_EXAMPLE_CPP_CLIENT_SOURCE_PATH}/*.h ) -carla_add_executable ( +add_executable ( carla-example-client "Build the CARLA C++ client example." ${CARLA_EXAMPLE_CPP_SOURCES} diff --git a/Examples/CppClient/main.cpp b/LibCarla/examples/CppClient/main.cpp similarity index 100% rename from Examples/CppClient/main.cpp rename to LibCarla/examples/CppClient/main.cpp diff --git a/LibCarla/source/carla/.gitignore b/LibCarla/source/carla/.gitignore deleted file mode 100644 index 38ba24e29ea..00000000000 --- a/LibCarla/source/carla/.gitignore +++ /dev/null @@ -1 +0,0 @@ -Version.h diff --git a/LibCarla/source/carla/Config.h.in b/LibCarla/source/carla/Config.h.in new file mode 100644 index 00000000000..1dc371ad075 --- /dev/null +++ b/LibCarla/source/carla/Config.h.in @@ -0,0 +1,9 @@ +// Copyright (c) 2026 Computer Vision Center (CVC) at the Universitat Autonoma +// de Barcelona (UAB). +// +// This work is licensed under the terms of the MIT license. +// For a copy, see . + +#cmakedefine LIBCARLA_IMAGE_SUPPORT_PNG +#cmakedefine LIBCARLA_IMAGE_SUPPORT_JPEG +#cmakedefine LIBCARLA_IMAGE_SUPPORT_TIFF diff --git a/LibCarla/source/carla/image/ImageIOConfig.h b/LibCarla/source/carla/image/ImageIOConfig.h index 74aca5e30f1..755b1751bf3 100644 --- a/LibCarla/source/carla/image/ImageIOConfig.h +++ b/LibCarla/source/carla/image/ImageIOConfig.h @@ -10,52 +10,14 @@ #include "carla/Logging.h" #include "carla/StringUtil.h" #include "carla/image/BoostGil.h" +#include "carla/Config.h" -#ifndef LIBCARLA_IMAGE_SUPPORT_PNG - #define LIBCARLA_IMAGE_SUPPORT_PNG false +#ifdef LIBCARLA_IMAGE_SUPPORT_JPEG +#include #endif -#ifndef LIBCARLA_IMAGE_SUPPORT_JPEG - #define LIBCARLA_IMAGE_SUPPORT_JPEG false -#endif - -#ifndef LIBCARLA_IMAGE_SUPPORT_TIFF - #define LIBCARLA_IMAGE_SUPPORT_TIFF false -#endif - -#if defined(__clang__) -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wunused-parameter" -#endif - -#if LIBCARLA_IMAGE_SUPPORT_PNG -# ifndef png_infopp_NULL -# define png_infopp_NULL (png_infopp)NULL -# endif // png_infopp_NULL -# ifndef int_p_NULL -# define int_p_NULL (int*)NULL -# endif // int_p_NULL -# if defined(__clang__) -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wignored-qualifiers" -# pragma clang diagnostic ignored "-Wparentheses" -# endif -# include -# if defined(__clang__) -# pragma clang diagnostic pop -# endif -#endif - -#if LIBCARLA_IMAGE_WITH_JPEG_SUPPORT -# include -#endif - -#if LIBCARLA_IMAGE_WITH_TIFF_SUPPORT -# include -#endif - -#if defined(__clang__) -# pragma clang diagnostic pop +#ifdef LIBCARLA_IMAGE_SUPPORT_TIFF +#include #endif namespace carla { @@ -63,15 +25,27 @@ namespace image { namespace io { constexpr bool has_png_support() { - return LIBCARLA_IMAGE_SUPPORT_PNG; +#ifdef LIBCARLA_IMAGE_SUPPORT_PNG + return true; +#else + return false; +#endif } constexpr bool has_jpeg_support() { - return LIBCARLA_IMAGE_SUPPORT_JPEG; +#ifdef LIBCARLA_IMAGE_SUPPORT_JPEG + return true; +#else + return false; +#endif } constexpr bool has_tiff_support() { - return LIBCARLA_IMAGE_SUPPORT_TIFF; +#ifdef LIBCARLA_IMAGE_SUPPORT_TIFF + return true; +#else + return false; +#endif } static_assert( @@ -92,7 +66,7 @@ namespace detail { static constexpr bool is_supported = has_png_support(); -#if LIBCARLA_IMAGE_SUPPORT_PNG +#ifdef LIBCARLA_IMAGE_SUPPORT_PNG static constexpr const char *get_default_extension() { return "png"; @@ -120,7 +94,7 @@ namespace detail { static constexpr bool is_supported = has_jpeg_support(); -#if LIBCARLA_IMAGE_WITH_JPEG_SUPPORT +#ifdef LIBCARLA_IMAGE_WITH_JPEG_SUPPORT static constexpr const char *get_default_extension() { return "jpeg"; @@ -159,7 +133,7 @@ namespace detail { static constexpr bool is_supported = has_tiff_support(); -#if LIBCARLA_IMAGE_SUPPORT_TIFF +#ifdef LIBCARLA_IMAGE_SUPPORT_TIFF static constexpr const char *get_default_extension() { return "tiff"; @@ -312,11 +286,11 @@ namespace detail { struct tiff : detail::io_impl {}; -#if LIBCARLA_IMAGE_SUPPORT_PNG +#ifdef LIBCARLA_IMAGE_SUPPORT_PNG struct any : detail::io_any {}; -#elif LIBCARLA_IMAGE_SUPPORT_TIFF +#elif defined(LIBCARLA_IMAGE_SUPPORT_TIFF) struct any : detail::io_any {}; diff --git a/LibCarla/source/carla/sensor/RawData.h b/LibCarla/source/carla/sensor/RawData.h index 53106f7803e..b0d99831ebb 100644 --- a/LibCarla/source/carla/sensor/RawData.h +++ b/LibCarla/source/carla/sensor/RawData.h @@ -8,7 +8,9 @@ #include "carla/Buffer.h" #include "carla/sensor/s11n/SensorHeaderSerializer.h" +#if __has_include("carla/ros2/ROS2.h") #include "carla/ros2/ROS2.h" +#endif #include #include @@ -89,7 +91,10 @@ namespace sensor { template friend class CompositeSerializer; + +#if __has_include("carla/ros2/ROS2.h") friend class carla::ros2::ROS2; +#endif RawData(Buffer &&buffer) : _buffer(std::move(buffer)) {} diff --git a/LibCarla/source/carla/sensor/data/ImageTmpl.h b/LibCarla/source/carla/sensor/data/ImageTmpl.h index f55ac396c17..17c93dc287b 100644 --- a/LibCarla/source/carla/sensor/data/ImageTmpl.h +++ b/LibCarla/source/carla/sensor/data/ImageTmpl.h @@ -13,7 +13,9 @@ #include "carla/sensor/s11n/GBufferUint8Serializer.h" #include "carla/sensor/s11n/GBufferFloatSerializer.h" #include "carla/sensor/s11n/NormalsImageSerializer.h" +#if __has_include("carla/ros2/ROS2.h") #include "carla/ros2/ROS2.h" +#endif namespace carla { namespace sensor { @@ -22,8 +24,13 @@ namespace data { /// Templated image for any type of pixel. template class ImageTmpl : public Array { + using Super = Array; + +#if __has_include("carla/ros2/ROS2.h") friend class carla::ros2::ROS2; +#endif + protected: using Serializer = s11n::ImageSerializer; diff --git a/PythonAPI/CMakeLists.txt b/PythonAPI/CMakeLists.txt index c0cf4eed61b..ab6810c935f 100644 --- a/PythonAPI/CMakeLists.txt +++ b/PythonAPI/CMakeLists.txt @@ -1,3 +1,24 @@ +cmake_minimum_required ( + VERSION + 3.28 +) + +if (CARLA_CONFIG_FILEPATH) + include (${CARLA_CONFIG_FILEPATH}) +else () + message (WARNING "Missing \"CARLA_CONFIG_FILEPATH\"") +endif () + +project ( + PythonAPI + LANGUAGES + CXX + VERSION + ${CARLA_VERSION} +) + +option (ENABLE_PEP517 "Whether to use PEP 517." ON) + find_package ( Python3 COMPONENTS @@ -8,6 +29,7 @@ find_package ( REQUIRED ) +#[[ # -- Temporary check for numpy 2 presence, which breaks our current version of Boost.Python. execute_process ( COMMAND @@ -21,106 +43,25 @@ execute_process ( NUMPY_VERSION_QUERY_RESULT ) if (NUMPY_VERSION_QUERY_RESULT) - carla_warning ("Failed to query numpy version.") + message (WARNING "Failed to query numpy version.") endif () -carla_message ("Found Numpy ${NUMPY_VERSION_STRING} for Python ${Python3_VERSION} (${Python3_EXECUTABLE}).") +message (STATUS "Found Numpy ${NUMPY_VERSION_STRING} for Python ${Python3_VERSION} (${Python3_EXECUTABLE}).") if ("${NUMPY_VERSION_STRING}" VERSION_GREATER "2.0.0") - carla_error ("Unsupported Numpy version, please downgrade to a version prior to numpy 2.") + message (FATAL_ERROR "Unsupported Numpy version, please downgrade to a version prior to numpy 2.") endif () # -- +]] -set ( - PYTHON_API_DEPENDENCIES - carla-client - rpc - png_static - zlibstatic - Boost::asio - Boost::python - Boost::geometry - Boost::gil - RecastNavigation::Recast - RecastNavigation::Detour - RecastNavigation::DetourCrowd -) - -get_target_property ( - Boost_asio_TARGET_NAME - Boost::asio - ALIASED_TARGET -) - -get_target_property ( - Boost_python_TARGET_NAME - Boost::python${Python3_VERSION_MAJOR}${Python3_VERSION_MINOR} - ALIASED_TARGET -) - -get_target_property ( - Boost_geometry_TARGET_NAME - Boost::geometry - ALIASED_TARGET -) - -get_target_property ( - Boost_gil_TARGET_NAME - Boost::gil - ALIASED_TARGET -) - -get_target_property ( - RecastNavigation_Recast_TARGET_NAME - RecastNavigation::Recast - ALIASED_TARGET -) - -get_target_property ( - RecastNavigation_Detour_TARGET_NAME - RecastNavigation::Detour - ALIASED_TARGET +configure_file ( + ${CMAKE_CURRENT_SOURCE_DIR}/carla/pyproject.toml.in + ${CMAKE_CURRENT_SOURCE_DIR}/carla/pyproject.toml + @ONLY ) -get_target_property ( - RecastNavigation_DetourCrowd_TARGET_NAME - RecastNavigation::DetourCrowd - ALIASED_TARGET -) - -set ( - CARLA_PYTHON_API_CARLA_PATH - ${CMAKE_CURRENT_SOURCE_DIR}/carla -) - -set ( - CARLA_PYTHON_API_CMAKE_ARGS - "\t'-G${CMAKE_GENERATOR}'" -) - -set ( - CARLA_PYTHON_API_CMAKE_ARGS - "${CARLA_PYTHON_API_CMAKE_ARGS},\n\t'-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}'" -) - -set ( - CARLA_PYTHON_API_CMAKE_ARGS - "${CARLA_PYTHON_API_CMAKE_ARGS},\n\t'-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}'" -) - -if (CMAKE_TOOLCHAIN_FILE) - set ( - CARLA_PYTHON_API_CMAKE_ARGS - "${CARLA_PYTHON_API_CMAKE_ARGS},\n\t\'--toolchain=${CMAKE_TOOLCHAIN_FILE}\'" - ) -endif () - -carla_two_step_configure_file ( - ${CARLA_PYTHON_API_CARLA_PATH}/pyproject.toml - ${CARLA_PYTHON_API_CARLA_PATH}/pyproject.toml.in -) - -carla_two_step_configure_file ( - ${CARLA_PYTHON_API_CARLA_PATH}/CMakeLists.txt - ${CARLA_PYTHON_API_CARLA_PATH}/CMakeLists.txt.in +configure_file ( + ${CMAKE_CURRENT_SOURCE_DIR}/carla/CMakeLists.txt.in + ${CMAKE_CURRENT_SOURCE_DIR}/carla/CMakeLists.txt + @ONLY ) set ( @@ -128,12 +69,6 @@ set ( ${CMAKE_CURRENT_BINARY_DIR}/dist ) -file ( - COPY - ${CARLA_WORKSPACE_PATH}/LICENSE - DESTINATION ${CARLA_PYTHON_API_CARLA_PATH} -) - if (ENABLE_PEP517) set ( CARLA_PYTHON_API_BUILD_COMMAND @@ -145,7 +80,7 @@ if (ENABLE_PEP517) else () file ( WRITE - ${CARLA_PYTHON_API_CARLA_PATH}/setup.py + ${CMAKE_CURRENT_SOURCE_DIR}/carla/setup.py "from setuptools import setup\n" "setup()\n" ) @@ -158,41 +93,12 @@ else () ) endif () -carla_add_custom_target ( - carla-python-api - "Build the CARLA Python API." - COMMAND - ${CMAKE_COMMAND} - -E copy - ${CARLA_WORKSPACE_PATH}/LICENSE - ${CARLA_PYTHON_API_CARLA_PATH}/LICENSE +add_custom_target ( + python-api ALL COMMAND ${CARLA_PYTHON_API_BUILD_COMMAND} WORKING_DIRECTORY - ${CARLA_PYTHON_API_CARLA_PATH} + ${CMAKE_CURRENT_SOURCE_DIR}/carla VERBATIM USES_TERMINAL ) - -carla_add_custom_target ( - carla-python-api-install - "Build & install the CARLA Python API" - COMMAND - ${Python3_EXECUTABLE} - -m pip install - -e ${CARLA_PYTHON_API_CARLA_PATH} - WORKING_DIRECTORY - ${CARLA_PYTHON_API_CARLA_PATH} - VERBATIM - USES_TERMINAL -) - -add_dependencies ( - carla-python-api - ${PYTHON_API_DEPENDENCIES} -) - -add_dependencies ( - carla-python-api-install - carla-python-api -) diff --git a/PythonAPI/carla/CMakeLists.txt.in b/PythonAPI/carla/CMakeLists.txt.in index 32cdd79b4d8..19244fe1016 100644 --- a/PythonAPI/carla/CMakeLists.txt.in +++ b/PythonAPI/carla/CMakeLists.txt.in @@ -1,6 +1,6 @@ cmake_minimum_required ( VERSION - @CARLA_CMAKE_MINIMUM_REQUIRED_VERSION@ + 3.30 ) project ( @@ -18,7 +18,28 @@ if (${CMAKE_MINOR_VERSION} GREATER_EQUAL 24) cmake_policy (SET CMP0135 NEW) endif () -include (@CARLA_WORKSPACE_PATH@/CMake/Util.cmake) +find_package ( + Boost ${BOOST_VERSION} EXACT REQUIRED + COMPONENTS + asio geometry algorithm assert gil python +) + +find_package ( + RecastNavigation REQUIRED + COMPONENTS + Recast Detour DetourCrowd +) + +find_package (Eigen3 @EIGEN_VERSION@ EXACT REQUIRED) +find_package (ZLIB @ZLIB_VERSION@ EXACT REQUIRED) +find_package (RPCLib REQUIRED) +find_package (PNG @PNG_VERSION@ EXACT REQUIRED) + +find_package ( + LibCarla @CARLA_VERSION@ EXACT REQUIRED + COMPONENTS + Client +) set (CMAKE_CXX_STANDARD 20) set (CMAKE_CXX_STANDARD_REQUIRED ON) @@ -36,34 +57,13 @@ find_package ( REQUIRED ) -if (WIN32) - set (PYTHON_MODULE_EXT .pyd) -else () - set (PYTHON_MODULE_EXT .so) -endif () - -set ( - CARLA_PYTHON_API_CARLA_PATH - ${CMAKE_CURRENT_SOURCE_DIR} -) - -carla_message_verbose ( +message ( + STATUS "Selected Python executable: ${Python3_EXECUTABLE} (Interpreter ID: ${Python3_INTERPRETER_ID})" ) -set ( - CARLA_PYTHON_API_DEPENDENCIES -) - -set ( - CARLA_PYTHON_API_INCLUDE_PATH - ${CARLA_PYTHON_API_CARLA_PATH}/include -) - -set ( - CARLA_PYTHON_API_SOURCE_PATH - ${CARLA_PYTHON_API_CARLA_PATH}/src -) +set (CARLA_PYTHON_API_INCLUDE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/include) +set (CARLA_PYTHON_API_SOURCE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/src) set ( PYTHON_API_HEADERS @@ -91,19 +91,11 @@ set ( ) if (ENABLE_OSM2ODR) - list ( - APPEND - PYTHON_API_SOURCES - ${CARLA_PYTHON_API_SOURCE_PATH}/OSM2ODR.cpp - ) + list (APPEND PYTHON_API_SOURCES ${CARLA_PYTHON_API_SOURCE_PATH}/OSM2ODR.cpp) endif () if (ENABLE_RSS) - list ( - APPEND - PYTHON_API_SOURCES - ${CARLA_PYTHON_API_SOURCE_PATH}/AdRss.cpp - ) + list (APPEND PYTHON_API_SOURCES ${CARLA_PYTHON_API_SOURCE_PATH}/AdRss.cpp) endif () set ( @@ -116,68 +108,33 @@ set ( ) if (USE_LIMITED_API) - list ( - APPEND - PYTHON_API_ADD_LIBRARY_ARGS - USE_SABI ${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR} - ) + list (APPEND PYTHON_API_ADD_LIBRARY_ARGS USE_SABI ${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}) endif () -list ( - APPEND - PYTHON_API_ADD_LIBRARY_ARGS - WITH_SOABI -) +list (APPEND PYTHON_API_ADD_LIBRARY_ARGS WITH_SOABI) Python3_add_library ( ${SKBUILD_PROJECT_NAME} MODULE - ${PYTHON_API_ADD_LIBRARY_ARGS} - ${PYTHON_API_HEADERS} - ${PYTHON_API_SOURCES} + ${PYTHON_API_ADD_LIBRARY_ARGS} + ${PYTHON_API_HEADERS} + ${PYTHON_API_SOURCES} ) -install ( - TARGETS ${SKBUILD_PROJECT_NAME} - DESTINATION . +target_link_libraries ( + ${SKBUILD_PROJECT_NAME} PRIVATE + LibCarla::Client + Boost::python ) target_include_directories ( - ${SKBUILD_PROJECT_NAME} SYSTEM PRIVATE + ${SKBUILD_PROJECT_NAME} PUBLIC ${CARLA_PYTHON_API_INCLUDE_PATH} - $ - $ - $ - $ - $ - $ - $ - $ - $ - $ - $ - @libpng_SOURCE_DIR@ @libpng_BINARY_DIR@ - @zlib_SOURCE_DIR@ @zlib_BINARY_DIR@ ) -set ( - PYTHON_API_BUILD_DEFINITIONS - BOOST_ALL_NO_LIB - LIBCARLA_WITH_PYTHON_SUPPORT - @CARLA_COMMON_DEFINITIONS@ - @CARLA_EXCEPTION_DEFINITIONS@ - @CARLA_RTTI_DEFINITIONS@ - $ - $ - $ - $ - $ - $ - $ - $ - $ - $ - $ +install ( + TARGETS ${SKBUILD_PROJECT_NAME} + DESTINATION . ) if (WIN32) @@ -192,15 +149,3 @@ target_compile_definitions ( ${SKBUILD_PROJECT_NAME} PRIVATE ${PYTHON_API_BUILD_DEFINITIONS} ) - -target_link_libraries ( - ${SKBUILD_PROJECT_NAME} PUBLIC - $ - $ - $ - $ - $ - $ - $ - $ -) diff --git a/PythonAPI/carla/include/PythonAPI.h b/PythonAPI/carla/include/PythonAPI.h index 353f4b45039..d2ced60e5a4 100644 --- a/PythonAPI/carla/include/PythonAPI.h +++ b/PythonAPI/carla/include/PythonAPI.h @@ -77,6 +77,8 @@ #include #include +#include + #include #include #include diff --git a/PythonAPI/carla/pyproject.toml.in b/PythonAPI/carla/pyproject.toml.in index bac626edb27..270d5d581df 100644 --- a/PythonAPI/carla/pyproject.toml.in +++ b/PythonAPI/carla/pyproject.toml.in @@ -7,7 +7,9 @@ wheel.packages = ['carla'] cmake.version = '>=@CMAKE_MAJOR_VERSION@.@CMAKE_MINOR_VERSION@' cmake.build-type = '@CMAKE_BUILD_TYPE@' cmake.args = [ - @CARLA_PYTHON_API_CMAKE_ARGS@ + "-G@CMAKE_GENERATOR@", + "-DCMAKE_PREFIX_PATH=@CMAKE_PREFIX_PATH@", + "--toolchain=@CMAKE_TOOLCHAIN_FILE@" ] ninja.version=">=1.10" ninja.make-fallback=true diff --git a/Ros2Native/CMakeLists.txt b/Ros2Native/CMakeLists.txt index 18b8d61a454..5d062ddc375 100644 --- a/Ros2Native/CMakeLists.txt +++ b/Ros2Native/CMakeLists.txt @@ -1,9 +1,9 @@ cmake_minimum_required ( VERSION - ${CARLA_CMAKE_MINIMUM_REQUIRED_VERSION} + 3.30 ) -project (carla-ros2-native-project) +project (carla-ros2-native_project) include (ExternalProject) @@ -16,7 +16,7 @@ ExternalProject_add ( -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${PROJECT_INSTALL_PATH} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} - -DBUILD_SHARED_LIBS=ON + # -DBUILD_SHARED_LIBS=ON -DFOONATHAN_MEMORY_FORCE_VENDORED_BUILD=ON ) @@ -25,7 +25,7 @@ ExternalProject_add ( ExternalProject_add ( fastdds GIT_REPOSITORY https://github.com/eProsima/Fast-DDS.git - GIT_TAG ${CARLA_FASTDDS_TAG} + GIT_TAG ${CARLA_FAST_DDS_TAG} CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${PROJECT_INSTALL_PATH} @@ -68,7 +68,7 @@ add_custom_command ( ${CARLA_PLUGIN_BINARY_PATH} ) -carla_add_custom_target ( +add_custom_target ( carla-ros2-native "Build the ROS2-Native CARLA subproject." DEPENDS carla-ros2-native-lib diff --git a/Unreal/CMakeLists.txt b/Unreal/CMakeLists.txt index 01d2c9e4383..972fdf7cd12 100644 --- a/Unreal/CMakeLists.txt +++ b/Unreal/CMakeLists.txt @@ -8,15 +8,20 @@ project ( "Open-source simulator for autonomous driving research." ) -carla_option ( +option ( ENABLE_DIRECTORY_CLEAN "Enable ADDITIONAL_CLEAN_FILES on directory level" ON ) +set ( + CARLA_PACKAGE_PATH + ${CMAKE_BINARY_DIR}/Package +) + set ( CARLA_UE_PATH - ${CARLA_WORKSPACE_PATH}/Unreal/CarlaUnreal + ${CARLA_ROOT}/Unreal/CarlaUnreal ) set ( @@ -49,52 +54,198 @@ set ( ${CARLA_UE_PATH}/Content/Carla ) -if (NOT EXISTS ${CARLA_UE_CONTENT_PATH}/.git) - carla_error ("Missing CARLA content.") +set ( + CARLA_UE_CONTENT_ORIGIN_URL + https://bitbucket.org/carla-simulator/carla-content.git +) + +cmake_path ( + CONVERT + "$ENV{CARLA_UNREAL_ENGINE_PATH}" + TO_CMAKE_PATH_LIST + CARLA_UNREAL_ENGINE_PATH_INFERRED + NORMALIZE +) + +set ( + CARLA_UNREAL_ENGINE_PATH + "${CARLA_UNREAL_ENGINE_PATH_INFERRED}" + CACHE FILEPATH + "Path to the CARLA fork of Unreal Engine." +) + +message (STATUS "Using ${CARLA_UNREAL_ENGINE_PATH} as Unreal Engine root path.") + +if (EXISTS ${CARLA_UNREAL_ENGINE_PATH}) + set (CARLA_HAS_UNREAL_ENGINE_PATH ON) +else () + set (CARLA_HAS_UNREAL_ENGINE_PATH OFF) +endif () + +option (BUILD_CARLA_UNREAL "Build the Carla Unreal Engine project." ${CARLA_HAS_UNREAL_ENGINE_PATH}) +if (WIN32) + set (CARLA_UNREAL_RHI_DEFAULT d3d12) +elseif (LINUX) + set (CARLA_UNREAL_RHI_DEFAULT vulkan) endif () set ( - UNREAL_EDITOR_PATH - ${CARLA_UNREAL_ENGINE_PATH}/Engine/Binaries/${UE_SYSTEM_NAME}/UnrealEditor${EXE_EXT} + CARLA_UNREAL_RHI + "${CARLA_UNREAL_RHI_DEFAULT}" + CACHE STRING + "Target CARLA Unreal Engine RHI." +) + +if (BUILD_CARLA_UNREAL) + if (NOT ${CARLA_HAS_UNREAL_ENGINE_PATH}) + message (FATAL_ERROR + "Could not add UE project to build since the option CARLA_UNREAL_ENGINE_PATH " + "is not set to a valid path (\"${CARLA_UNREAL_ENGINE_PATH}\")." + "Please set it to point to the root path of your CARLA Unreal Engine installation." + ) + endif () +endif () + +# Docs for UE5 build configurations: +# https://docs.unrealengine.com/4.27/en-US/ProductionPipelines/DevelopmentSetup/BuildConfigurations/ + +if (${CMAKE_BUILD_TYPE} STREQUAL "Debug") + set (CARLA_UNREAL_BUILD_TYPE Debug) +elseif (${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo") + set (CARLA_UNREAL_BUILD_TYPE Development) +elseif (${CMAKE_BUILD_TYPE} STREQUAL "Release") + set (CARLA_UNREAL_BUILD_TYPE Shipping) +else () + message (WARNING "Unexpected CMAKE_BUILD_TYPE \"${CMAKE_BUILD_TYPE}\". Unreal packages will default to Development. Manually override DEFAULT_PACKAGE_CONFIGURATION if this behavior is not desired.") + set (CARLA_UNREAL_BUILD_TYPE Development) +endif () + +set ( + CARLA_UNREAL_BUILD_TYPE + "${CARLA_UNREAL_BUILD_TYPE}" + CACHE STRING + "Override the CARLA Unreal build configuration." ) -set (CARLA_UE_CONTENT_CHECK_PATH ${CARLA_UE_PATH}/Content/Carla/Blueprints) -if (IS_DIRECTORY ${CARLA_UE_CONTENT_CHECK_PATH}) - carla_message_verbose ("CARLA Unreal Content - FOUND") +set (CARLA_UNREAL_PACKAGE_NO_COMPRESSION_DEFAULT OFF) +if ("${CARLA_UNREAL_BUILD_TYPE}" STREQUAL "Shipping") + set (CARLA_UNREAL_PACKAGE_NO_COMPRESSION_DEFAULT ON) +endif () + +option (CARLA_UNREAL_PACKAGE_NO_COMPRESSION "Whether to skip the package compression step." ${CARLA_UNREAL_PACKAGE_NO_COMPRESSION_DEFAULT}) + +set ( + CARLA_ADDITIONAL_CONTENT_SEARCH_PATHS + "" + CACHE STRING + "Comma-separated list of additional paths to look for a cloned CARLA Unreal Engine Content repo." +) + +set (CARLA_HAS_CONTENT FALSE) +set (ASSUME_CONTENT_IS_GIT_REPO TRUE) # TODO VERIFY USING HASH IF RAW DOWNLOAD. +if (ASSUME_CONTENT_IS_GIT_REPO) + + # Assume CARLA Content has been downloaded using git. + # Therefore, we can use git commands to test the validity of the repo. + + function (carla_test_is_valid_content_directory RETURN_VALUE PATH) + if (IS_DIRECTORY "${PATH}") + message (STATUS "Searching CARLA Content in ${PATH}") + execute_process ( + COMMAND + git -C ${PATH} config --get remote.origin.url + OUTPUT_VARIABLE + GIT_ORIGIN_URL + RESULT_VARIABLE + GIT_ORIGIN_URL_RESULT + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if (NOT ${GIT_ORIGIN_URL_RESULT}) + if ("${GIT_ORIGIN_URL}" STREQUAL "${CARLA_UE_CONTENT_ORIGIN_URL}") + set (${RETURN_VALUE} TRUE PARENT_SCOPE) + return () + endif () + endif () + endif () + set (${RETURN_VALUE} FALSE PARENT_SCOPE) + endfunction () + + carla_test_is_valid_content_directory (CARLA_HAS_CONTENT "${CARLA_UE_CONTENT_PATH}") + + if (NOT ${CARLA_HAS_CONTENT}) + foreach (ADDITIONAL_CONTENT_SEARCH_PATH ${CARLA_ADDITIONAL_CONTENT_SEARCH_PATHS}) + carla_test_is_valid_content_directory (CARLA_HAS_CONTENT "${ADDITIONAL_CONTENT_SEARCH_PATH}") + if (${CARLA_HAS_CONTENT}) + message (STATUS "Found CARLA Content in \"${ADDITIONAL_CONTENT_SEARCH_PATH}\", creating symlink.") + file ( + CREATE_LINK + "${CARLA_UE_CONTENT_PATH}" + "${ADDITIONAL_CONTENT_SEARCH_PATH}" + ) + endif () + endforeach () + endif () + +else () + + # Assume CARLA Content has been downloaded directly, without using git. + # In this case use a simple directory existence check. + + if (IS_DIRECTORY ${CARLA_UE_CONTENT_PATH}) + set (CARLA_HAS_CONTENT TRUE) + endif () + +endif () + +if (NOT ${CARLA_HAS_CONTENT}) + message (FATAL_ERROR + "Could not find CARLA Content. Either clone it from ${CARLA_UE_CONTENT_ORIGIN_URL} or, if you already downloaded it somewhere else in your system, add its path to CARLA_ADDITIONAL_CONTENT_SEARCH_PATHS.") else () - carla_warning ("Could not find CARLA Content, download it or running the editor will result in a crash.") + message (STATUS + "Found CARLA Content." + ) endif () +if (WIN32) + set (UE_SYSTEM_NAME Win64) + set (UE_PLATFORM_NAME Windows) +else () + if (LINUX) + set (UE_SYSTEM_NAME Linux) + elseif (APPLE) + set (UE_SYSTEM_NAME Mac) + else () + message (FATAL_ERROR "Unknown target system.") + endif () + set (UE_PLATFORM_NAME ${UE_SYSTEM_NAME}) +endif () +set ( + UNREAL_EDITOR_PATH + ${CARLA_UNREAL_ENGINE_PATH}/Engine/Binaries/${UE_SYSTEM_NAME}/UnrealEditor${EXE_EXT} +) set ( UE_DEPENDENCIES carla-server - libsqlite3 + SQLite::SQLite3 Boost::asio Boost::python Boost::geometry Boost::gil Eigen3::Eigen - zlibstatic - png_static - rpc + ZLIB::ZLIB + PNG::PNG + RPC::RPC ) -set (UE_DEPENDENCIES_ORDER_ONLY ${UE_DEPENDENCIES}) - -if (BUILD_CARLA_CLIENT) - list (APPEND UE_DEPENDENCIES_ORDER_ONLY carla-client) -endif () - -list ( - APPEND +set ( UE_DEPENDENCIES_ORDER_ONLY + ${UE_DEPENDENCIES} + carla-client RecastBuilder ) - - set ( CARLA_UNREAL_INCLUDE_PATHS_FILE_NAME Includes.def @@ -135,11 +286,6 @@ set ( ${CMAKE_CURRENT_BINARY_DIR}/${CARLA_UNREAL_DEFINITIONS_FILE_NAME} ) -set ( - CARLA_UNREAL_INCLUDE_PATHS - ${sqlite3_SOURCE_DIR} -) - foreach (UE_DEP ${UE_DEPENDENCIES}) list ( APPEND @@ -148,9 +294,11 @@ foreach (UE_DEP ${UE_DEPENDENCIES}) ) endforeach () +#[[ @TODO + set ( CARLA_UNREAL_LIBRARIES - $ + $ ) foreach (UE_DEP ${UE_DEPENDENCIES}) @@ -168,6 +316,7 @@ set ( CARLA_UNREAL_DEFINITIONS RECASTBUILDER_PATH="$" ) +]] set (CARLA_UNREAL_OPTIONS) @@ -322,12 +471,34 @@ list ( file ( MAKE_DIRECTORY - ${CARLA_UE_PATH}/Content/Carla/ExportedMaps + ${CARLA_UE_CONTENT_PATH}/ExportedMaps ) -carla_add_custom_target ( +add_custom_target ( + ue-compile-shaders + "Compile all CARLA Unreal Engine Shaders." + COMMAND + ${CARLA_UNREAL_ENGINE_PATH}/Engine/Binaries/${UE_SYSTEM_NAME}/UnrealEditor-Cmd${EXE_EXT} + ${CARLA_UE_PROJECT_PATH} + -run=DerivedDataCache + -fill +) + +add_custom_target ( + ue-cook-content + "Compile all CARLA Unreal Engine Shaders." + COMMAND + ${CARLA_UNREAL_ENGINE_PATH}/Engine/Binaries/${UE_SYSTEM_NAME}/UnrealEditor-Cmd${EXE_EXT} + ${CARLA_UE_PROJECT_PATH} + -run=Cook + -TargetPlatform=${UE_SYSTEM_NAME} + -unattended + -nop4 +) + +add_custom_target ( carla-unreal "Build the CarlaUnreal subproject." COMMAND @@ -335,27 +506,22 @@ carla_add_custom_target ( CarlaUnreal ${UE_SYSTEM_NAME} ${CARLA_UNREAL_BUILD_TYPE} - -project=${CARLA_UE_PROJECT_PATH} + _project=${CARLA_UE_PROJECT_PATH} -game -buildscw USES_TERMINAL VERBATIM ) -add_dependencies ( - carla-unreal - ${UE_DEPENDENCIES_ORDER_ONLY} -) - -carla_add_custom_target ( - carla-unreal-editor +add_custom_target ( + ue-editor "Build the CarlaUnrealEditor subproject." COMMAND ${CARLA_UE_BUILD_COMMAND_PREFIX} CarlaUnrealEditor ${UE_SYSTEM_NAME} ${CARLA_UNREAL_BUILD_TYPE} - -project=${CARLA_UE_PROJECT_PATH} + _project=${CARLA_UE_PROJECT_PATH} -game -buildscw DEPENDS @@ -364,10 +530,10 @@ carla_add_custom_target ( VERBATIM ) -add_dependencies ( +add_custom_target ( carla-unreal-editor - carla-unreal - ${UE_DEPENDENCIES_ORDER_ONLY} + DEPENDS + ue-editor ) @@ -410,9 +576,10 @@ function ( endif () set (TARGET_NAME_SHORT package${TARGET_NAME_SUFFIX}) - set (TARGET_NAME carla-unreal-${TARGET_NAME_SHORT}) + set (TARGET_NAME ue-${TARGET_NAME_SHORT}) + set (TARGET_NAME_LONG carla-${TARGET_NAME}) - carla_add_custom_target ( + add_custom_target ( ${TARGET_NAME} "Create a CARLA package in ${PACKAGE_CONFIGURATION} mode." COMMAND @@ -420,16 +587,16 @@ function ( CarlaUnreal ${UE_SYSTEM_NAME} ${UE_BUILD_CONFIGURATION} - -project=${CARLA_UE_PROJECT_PATH} + _project=${CARLA_UE_PROJECT_PATH} -game -buildscw COMMAND ${CARLA_UE_UAT_COMMAND_PREFIX} BuildCookRun - -project=${CARLA_UE_PROJECT_PATH} + _project=${CARLA_UE_PROJECT_PATH} -nocompileeditor -nop4 - -cook + -cookonthefly -stage -archive -package @@ -445,11 +612,14 @@ function ( VERBATIM ) + add_custom_target (${TARGET_NAME_SHORT} DEPENDS ${TARGET_NAME}) + add_custom_target (${TARGET_NAME_LONG} DEPENDS ${TARGET_NAME}) + set ( PACKAGE_POST_BUILD_COMMANDS COMMAND ${CMAKE_COMMAND} -E echo "********** PACKAGE CREATING VERSION FILE UNREAL PACKAGE EXTRA FILES STARTED **********" COMMAND ${CMAKE_COMMAND} - -DCARLA_WORKSPACE_PATH=${CARLA_WORKSPACE_PATH} + -DCARLA_ROOT_PATH=${CARLA_ROOT} -DCARLA_UNREAL_ENGINE_PATH=${CARLA_UNREAL_ENGINE_PATH} -DCARLA_PACKAGE_VERSION_FILE=${CARLA_PACKAGE_ARCHIVE_PATH}/VERSION -P${CMAKE_CURRENT_SOURCE_DIR}/Package/CreateCarlaVersionFile.cmake @@ -463,8 +633,8 @@ function ( COMMAND ${CMAKE_COMMAND} -E echo "********** PACKAGE COPYING CARLA ADDITIONAL FILES STARTED **********" COMMAND ${CMAKE_COMMAND} - -DCARLA_BUILD_PATH=${CARLA_BUILD_PATH} - -DCARLA_WORKSPACE_PATH=${CARLA_WORKSPACE_PATH} + -DCARLA_BUILD_PATH=${CMAKE_BINARY_DIR} + -DCARLA_ROOT_PATH=${CARLA_ROOT} -DCARLA_PACKAGE_ARCHIVE_PATH=${CARLA_PACKAGE_ARCHIVE_PATH} -P${CMAKE_CURRENT_SOURCE_DIR}/Package/CopyCarlaAdditionalFiles.cmake COMMAND ${CMAKE_COMMAND} -E echo "********** PACKAGE COPYING CARLA ADDITIONAL FILES COMPLETED **********" @@ -492,22 +662,6 @@ function ( VERBATIM ) - add_dependencies ( - ${TARGET_NAME} - carla-python-api - carla-unreal-editor - ) - - carla_add_custom_target ( - ${TARGET_NAME_SHORT} - "Create a CARLA package in ${PACKAGE_CONFIGURATION} mode." - ) - - add_dependencies ( - ${TARGET_NAME_SHORT} - ${TARGET_NAME} - ) - endfunction() @@ -515,84 +669,13 @@ endfunction() # Docs for UE5 build configurations: # https://docs.unrealengine.com/4.27/en-US/ProductionPipelines/DevelopmentSetup/BuildConfigurations/ -add_carla_ue_package_target("" ${CARLA_UNREAL_PACKAGE_BUILD_TYPE}) +add_carla_ue_package_target("" ${CARLA_UNREAL_BUILD_TYPE}) add_carla_ue_package_target(Shipping Shipping) add_carla_ue_package_target(Debug Debug) add_carla_ue_package_target(DebugGame DebugGame) add_carla_ue_package_target(Development Development) add_carla_ue_package_target(Test Test) - - -set (LAUNCH_ARGS ${CARLA_LAUNCH_ARGS}) - -if (ENABLE_ROS2) - list (APPEND LAUNCH_ARGS --ros2) -endif() - -if (ENABLE_ROS2_DEMO) - list (APPEND LAUNCH_ARGS --ros2-demo) -endif() - -set ( - CARLA_LAUNCH_TARGET_OPTIONS - COMMENT - "Launching Carla Unreal..." - COMMAND - ${UNREAL_EDITOR_PATH} - ${CARLA_UE_PROJECT_PATH} - -${CARLA_UNREAL_RHI} - ${LAUNCH_ARGS} - USES_TERMINAL - VERBATIM -) - -if (WIN32) - set ( - PRELAUNCH_CONTENT_CHECK_COMMAND - if exist ${CARLA_UE_CONTENT_CHECK_PATH} (exit 0) else (exit 1) - ) -else () - set ( - PRELAUNCH_CONTENT_CHECK_COMMAND - test -d ${CARLA_UE_CONTENT_CHECK_PATH} - ) -endif () - -carla_add_custom_target ( - check-unreal-content - "Perform some basic checks to ensure that the CARLA Unreal Editor will not open without its assets." - COMMAND - ${PRELAUNCH_CONTENT_CHECK_COMMAND} - COMMENT - "Performing prelaunch check for CARLA Content presence." - USES_TERMINAL - VERBATIM -) - -carla_add_custom_target ( - launch-only - "Open CARLA in the Unreal Editor. This will not rebuild outdated targets." - ${CARLA_LAUNCH_TARGET_OPTIONS} -) - -add_dependencies ( - launch-only - check-unreal-content -) - -carla_add_custom_target ( - launch - "Build and open CARLA in the Unreal Editor." - ${CARLA_LAUNCH_TARGET_OPTIONS} -) - -add_dependencies ( - launch - carla-unreal-editor - check-unreal-content -) - set_property ( DIRECTORY APPEND PROPERTY ADDITIONAL_CLEAN_FILES "${CARLA_UE_PATH}/Binaries" @@ -609,9 +692,13 @@ set_property ( "${CARLA_UE_CARLA_PATH}/Binaries" "${CARLA_UE_CARLA_PATH}/Intermediate" "${CARLA_UE_CARLA_PATH}/Saved" - "${CARLA_UE_PLUGINS_PATH}/StreetMap/Binaries" - "${CARLA_UE_PLUGINS_PATH}/StreetMap/Intermediate" - "${CARLA_UE_PLUGINS_PATH}/StreetMap/Saved" - "${CARLA_BUILD_PATH}/Package" - "${CARLA_BUILD_PATH}/PythonAPI/dist" ) + +if (ENABLE_STREETMAP) + set_property ( + DIRECTORY APPEND PROPERTY ADDITIONAL_CLEAN_FILES + "${CARLA_UE_PLUGINS_PATH}/StreetMap/Binaries" + "${CARLA_UE_PLUGINS_PATH}/StreetMap/Intermediate" + "${CARLA_UE_PLUGINS_PATH}/StreetMap/Saved" + ) +endif () \ No newline at end of file diff --git a/Unreal/CarlaUnreal/Plugins/Carla/Source/Carla/Game/CarlaEngine.h b/Unreal/CarlaUnreal/Plugins/Carla/Source/Carla/Game/CarlaEngine.h index b344478bd8d..5dd56edc541 100644 --- a/Unreal/CarlaUnreal/Plugins/Carla/Source/Carla/Game/CarlaEngine.h +++ b/Unreal/CarlaUnreal/Plugins/Carla/Source/Carla/Game/CarlaEngine.h @@ -18,8 +18,8 @@ #include #include #include -#if WITH_ROS2 - #include +#if __has_include() +#include #endif #include diff --git a/Unreal/CarlaUnreal/Plugins/Carla/Source/Carla/Game/CarlaEpisode.h b/Unreal/CarlaUnreal/Plugins/Carla/Source/Carla/Game/CarlaEpisode.h index 0960039f9ab..d009c13fe70 100644 --- a/Unreal/CarlaUnreal/Plugins/Carla/Source/Carla/Game/CarlaEpisode.h +++ b/Unreal/CarlaUnreal/Plugins/Carla/Source/Carla/Game/CarlaEpisode.h @@ -19,8 +19,8 @@ #include #include #include -#if WITH_ROS2 - #include +#if __has_include() +#include #endif #include #include diff --git a/Unreal/Package/CopyCarlaAdditionalFiles.cmake b/Unreal/Package/CopyCarlaAdditionalFiles.cmake index 00b0cf6f5e6..f78177828b5 100644 --- a/Unreal/Package/CopyCarlaAdditionalFiles.cmake +++ b/Unreal/Package/CopyCarlaAdditionalFiles.cmake @@ -1,7 +1,7 @@ -file (COPY_FILE ${CARLA_WORKSPACE_PATH}/LICENSE ${CARLA_PACKAGE_ARCHIVE_PATH}/LICENSE) -file (COPY_FILE ${CARLA_WORKSPACE_PATH}/CHANGELOG.md ${CARLA_PACKAGE_ARCHIVE_PATH}/CHANGELOG) -file (COPY_FILE ${CARLA_WORKSPACE_PATH}/Docs/release_readme.md ${CARLA_PACKAGE_ARCHIVE_PATH}/README) +file (COPY_FILE ${CARLA_ROOT}/LICENSE ${CARLA_PACKAGE_ARCHIVE_PATH}/LICENSE) +file (COPY_FILE ${CARLA_ROOT}/CHANGELOG.md ${CARLA_PACKAGE_ARCHIVE_PATH}/CHANGELOG) +file (COPY_FILE ${CARLA_ROOT}/Docs/release_readme.md ${CARLA_PACKAGE_ARCHIVE_PATH}/README) if (WIN32) set (EXE_EXT .exe) else () @@ -14,35 +14,35 @@ file (COPY_FILE ${CARLA_BUILD_PATH}/_deps/recastnavigation-build/RecastBuilder/R make_directory (${CARLA_PACKAGE_ARCHIVE_PATH}/PythonAPI/carla/dist) file (GLOB PYTHON_WHL_FILES ${CARLA_BUILD_PATH}/PythonAPI/dist/carla-*.whl) file (COPY ${PYTHON_WHL_FILES} DESTINATION ${CARLA_PACKAGE_ARCHIVE_PATH}/PythonAPI/carla/dist/) -file (COPY_FILE ${CARLA_WORKSPACE_PATH}/Docs/python_api.md ${CARLA_PACKAGE_ARCHIVE_PATH}/PythonAPI/python_api.md) -file (COPY ${CARLA_WORKSPACE_PATH}/PythonAPI/carla/agents/ DESTINATION ${CARLA_PACKAGE_ARCHIVE_PATH}/PythonAPI/carla/agents/) -file (COPY_FILE ${CARLA_WORKSPACE_PATH}/PythonAPI/carla/scene_layout.py ${CARLA_PACKAGE_ARCHIVE_PATH}/PythonAPI/carla/scene_layout.py) -file (COPY_FILE ${CARLA_WORKSPACE_PATH}/PythonAPI/carla/requirements.txt ${CARLA_PACKAGE_ARCHIVE_PATH}/PythonAPI/carla/requirements.txt) +file (COPY_FILE ${CARLA_ROOT}/Docs/python_api.md ${CARLA_PACKAGE_ARCHIVE_PATH}/PythonAPI/python_api.md) +file (COPY ${CARLA_ROOT}/PythonAPI/carla/agents/ DESTINATION ${CARLA_PACKAGE_ARCHIVE_PATH}/PythonAPI/carla/agents/) +file (COPY_FILE ${CARLA_ROOT}/PythonAPI/carla/scene_layout.py ${CARLA_PACKAGE_ARCHIVE_PATH}/PythonAPI/carla/scene_layout.py) +file (COPY_FILE ${CARLA_ROOT}/PythonAPI/carla/requirements.txt ${CARLA_PACKAGE_ARCHIVE_PATH}/PythonAPI/carla/requirements.txt) make_directory (${CARLA_PACKAGE_ARCHIVE_PATH}/PythonAPI/examples/) -file (GLOB PYTHON_EXAMPLE_FILES ${CARLA_WORKSPACE_PATH}/PythonAPI/examples/*.py ${CARLA_WORKSPACE_PATH}/PythonAPI/examples/*.xml) +file (GLOB PYTHON_EXAMPLE_FILES ${CARLA_ROOT}/PythonAPI/examples/*.py ${CARLA_ROOT}/PythonAPI/examples/*.xml) file (COPY ${PYTHON_EXAMPLE_FILES} DESTINATION ${CARLA_PACKAGE_ARCHIVE_PATH}/PythonAPI/examples/) # make_directory (${CARLA_PACKAGE_ARCHIVE_PATH}/PythonAPI/examples/rss/) -# file (GLOB PYTHON_EXAMPLE_RSS_FILES ${CARLA_WORKSPACE_PATH}/PythonAPI/examples/rss/*.py) +# file (GLOB PYTHON_EXAMPLE_RSS_FILES ${CARLA_ROOT}/PythonAPI/examples/rss/*.py) # file (COPY ${PYTHON_EXAMPLE_RSS_FILES} DESTINATION ${CARLA_PACKAGE_ARCHIVE_PATH}/PythonAPI/examples/rss/) -file (COPY_FILE ${CARLA_WORKSPACE_PATH}/PythonAPI/examples/requirements.txt ${CARLA_PACKAGE_ARCHIVE_PATH}/PythonAPI/examples/requirements.txt) +file (COPY_FILE ${CARLA_ROOT}/PythonAPI/examples/requirements.txt ${CARLA_PACKAGE_ARCHIVE_PATH}/PythonAPI/examples/requirements.txt) make_directory (${CARLA_PACKAGE_ARCHIVE_PATH}/PythonAPI/examples/ros2) -file (GLOB PYTHON_EXAMPLE_ROS2_FILES ${CARLA_WORKSPACE_PATH}/PythonAPI/examples/ros2/*) +file (GLOB PYTHON_EXAMPLE_ROS2_FILES ${CARLA_ROOT}/PythonAPI/examples/ros2/*) file (COPY ${PYTHON_EXAMPLE_ROS2_FILES} DESTINATION ${CARLA_PACKAGE_ARCHIVE_PATH}/PythonAPI/examples/ros2) make_directory (${CARLA_PACKAGE_ARCHIVE_PATH}/PythonAPI/examples/ros2/config) -file (GLOB PYTHON_EXAMPLE_CONFIG_ROS2_FILES ${CARLA_WORKSPACE_PATH}/PythonAPI/examples/ros2/config/*) +file (GLOB PYTHON_EXAMPLE_CONFIG_ROS2_FILES ${CARLA_ROOT}/PythonAPI/examples/ros2/config/*) file (COPY ${PYTHON_EXAMPLE_CONFIG_ROS2_FILES} DESTINATION ${CARLA_PACKAGE_ARCHIVE_PATH}/PythonAPI/examples/ros2/config) make_directory (${CARLA_PACKAGE_ARCHIVE_PATH}/PythonAPI/util/) -file (GLOB PYTHON_UTIL_FILES ${CARLA_WORKSPACE_PATH}/PythonAPI/util/*.py) +file (GLOB PYTHON_UTIL_FILES ${CARLA_ROOT}/PythonAPI/util/*.py) file (COPY ${PYTHON_UTIL_FILES} DESTINATION ${CARLA_PACKAGE_ARCHIVE_PATH}/PythonAPI/util/) -file (COPY_FILE ${CARLA_WORKSPACE_PATH}/PythonAPI/util/requirements.txt ${CARLA_PACKAGE_ARCHIVE_PATH}/PythonAPI/util/requirements.txt) -file (COPY ${CARLA_WORKSPACE_PATH}/PythonAPI/util/opendrive/ DESTINATION ${CARLA_PACKAGE_ARCHIVE_PATH}/PythonAPI/util/opendrive/) +file (COPY_FILE ${CARLA_ROOT}/PythonAPI/util/requirements.txt ${CARLA_PACKAGE_ARCHIVE_PATH}/PythonAPI/util/requirements.txt) +file (COPY ${CARLA_ROOT}/PythonAPI/util/opendrive/ DESTINATION ${CARLA_PACKAGE_ARCHIVE_PATH}/PythonAPI/util/opendrive/) -# file (COPY ${CARLA_WORKSPACE_PATH}/Co-Simulation/ DESTINATION ${CARLA_PACKAGE_ARCHIVE_PATH}/Co-Simulation/) +# file (COPY ${CARLA_ROOT}/Co-Simulation/ DESTINATION ${CARLA_PACKAGE_ARCHIVE_PATH}/Co-Simulation/) # make_directory (${CARLA_PACKAGE_ARCHIVE_PATH}/HDMaps/) -# file (GLOB PYTHON_HDMAP_FILES ${CARLA_WORKSPACE_PATH}/Unreal/CarlaUnreal/Content/Carla/HDMaps/*.pcd) +# file (GLOB PYTHON_HDMAP_FILES ${CARLA_ROOT}/Unreal/CarlaUnreal/Content/Carla/HDMaps/*.pcd) # file (COPY ${PYTHON_HDMAP_FILES} DESTINATION ${CARLA_PACKAGE_ARCHIVE_PATH}/HDMaps/) -# file (COPY_FILE ${CARLA_WORKSPACE_PATH}/Unreal/CarlaUnreal/Content/Carla/HDMaps/Readme.md ${CARLA_PACKAGE_ARCHIVE_PATH}/HDMaps/README) +# file (COPY_FILE ${CARLA_ROOT}/Unreal/CarlaUnreal/Content/Carla/HDMaps/Readme.md ${CARLA_PACKAGE_ARCHIVE_PATH}/HDMaps/README) diff --git a/Unreal/Package/CreateCarlaVersionFile.cmake b/Unreal/Package/CreateCarlaVersionFile.cmake index e5c97c1d5c8..0f13c45af52 100644 --- a/Unreal/Package/CreateCarlaVersionFile.cmake +++ b/Unreal/Package/CreateCarlaVersionFile.cmake @@ -2,7 +2,7 @@ execute_process( COMMAND git log -1 --format=%H WORKING_DIRECTORY - ${CARLA_WORKSPACE_PATH} + ${CARLA_ROOT} OUTPUT_VARIABLE CARLA_GIT_HASH OUTPUT_STRIP_TRAILING_WHITESPACE @@ -12,7 +12,7 @@ execute_process( COMMAND git log -1 --format=%H WORKING_DIRECTORY - ${CARLA_WORKSPACE_PATH}/Unreal/CarlaUnreal/Content/Carla + ${CARLA_ROOT}/Unreal/CarlaUnreal/Content/Carla OUTPUT_VARIABLE CONTENT_GIT_HASH OUTPUT_STRIP_TRAILING_WHITESPACE diff --git a/carlacmd.bat b/carlacmd.bat new file mode 100644 index 00000000000..81806d8a817 --- /dev/null +++ b/carlacmd.bat @@ -0,0 +1,2 @@ +@echo off +python carlacmd.py %* diff --git a/carlacmd.py b/carlacmd.py new file mode 100644 index 00000000000..4b0fda4f2ce --- /dev/null +++ b/carlacmd.py @@ -0,0 +1,69 @@ +import subprocess + +def run_command(command : list): + subprocess.run(command).check_returncode() + +def main(): + from argparse import ArgumentParser + from pathlib import Path + import glob, os + from concurrent.futures import ProcessPoolExecutor, as_completed + + CARLA_ROOT = Path(__file__).parent + BUILD_ROOT_SELECTOR = CARLA_ROOT / 'targets.txt' + + main_parser = ArgumentParser() + subparser = main_parser.add_subparsers( + dest='primary_command', + required=True, + help='Primary command') + configure_parser = subparser.add_parser( + 'configure', + help='Configure CARLA\'s build.') + + target_map = {} + if BUILD_ROOT_SELECTOR.exists(): + with open(BUILD_ROOT_SELECTOR, 'r') as file: + for line in file.readlines(): + key, command = line.split('::') + target_map[key] = command.strip().split(' ') + _ = subparser.add_parser( + key, + help=f'Build CMake target "{key}"' + ) + + configure_parser.add_argument( + 'build_config', + choices=['debug','development','release'] + ) + main_parser.add_argument('-j', '--jobs', type=int, default=0, help='Max job count.') + + ARGV = main_parser.parse_args() + + match ARGV.primary_command: + case 'configure': + config = str(ARGV.build_config).capitalize() + run_command(f'cmake --preset {config} -DCMAKE_POLICY_VERSION_MINIMUM=3.5'.split(' ')) + pass + case _: + jobs = None if ARGV.jobs == 0 else ARGV.jobs + if jobs != 0: + with ProcessPoolExecutor(max_workers=jobs) as pool: + futures = [] + futures.append( + pool.submit( + run_command, + target_map[ARGV.primary_command])) + for f in futures: + f.result() + else: + if ARGV.primary_command in target_map: + run_command(target_map[ARGV.primary_command]) + +if __name__ == '__main__': + try: + main() + except Exception as e: + print(e) + finally: + pass diff --git a/carlacmd.sh b/carlacmd.sh new file mode 100644 index 00000000000..7c7a54090f3 --- /dev/null +++ b/carlacmd.sh @@ -0,0 +1 @@ +python3 carlacmd.py "$@" diff --git a/targets.txt b/targets.txt new file mode 100644 index 00000000000..e69de29bb2d