diff --git a/CHANGELOG.md b/CHANGELOG.md index ba19da0946b..0e97bcab5ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## LATEST Changes * Added actor description as Actor TAGs +* Got Windows ROS2 Build working ## CARLA 0.10.0 diff --git a/CMake/Options.cmake b/CMake/Options.cmake index c163f40137b..9e9908a8d8f 100644 --- a/CMake/Options.cmake +++ b/CMake/Options.cmake @@ -53,7 +53,7 @@ carla_option ( carla_option ( ENABLE_ROS2 "Enable ROS2." - OFF + ON ) carla_option ( @@ -420,7 +420,7 @@ carla_string_option ( carla_string_option ( CARLA_FASTDDS_VERSION "Target Fast-DDS version." - 2.11.2 + 2.11.3 ) carla_string_option ( diff --git a/CMake/Toolchain.cmake b/CMake/Toolchain.cmake index 5940300d55c..b4bbee9f57c 100644 --- a/CMake/Toolchain.cmake +++ b/CMake/Toolchain.cmake @@ -10,201 +10,201 @@ if (LINUX) -set (UE_ROOT $ENV{CARLA_UNREAL_ENGINE_PATH}) + set (UE_ROOT $ENV{CARLA_UNREAL_ENGINE_PATH}) -if (NOT UE_ROOT) - set (UE_ROOT $ENV{UE_ROOT}) -endif () - -if ("${UE_ROOT}" STREQUAL "") - set (UE_ROOT ${CARLA_UNREAL_ENGINE_PATH}) - set (ENV{UE_ROOT} ${UE_ROOT}) # @TODO -endif () + if (NOT UE_ROOT) + set (UE_ROOT $ENV{UE_ROOT}) + endif () -if (NOT EXISTS ${UE_ROOT}) - message (FATAL_ERROR "The specified Carla Unreal Engine 5 path does not exist (\"${UE_ROOT}\").") -endif () + if ("${UE_ROOT}" STREQUAL "") + set (UE_ROOT ${CARLA_UNREAL_ENGINE_PATH}) + set (ENV{UE_ROOT} ${UE_ROOT}) # @TODO + endif () -set (ARCH ${CMAKE_HOST_SYSTEM_PROCESSOR}) - -if (${ARCH} STREQUAL "x86_64") - set (CMAKE_SYSTEM_PROCESSOR x86_64 CACHE STRING "") - set (TARGET_TRIPLE "x86_64-unknown-linux-gnu" CACHE STRING "") -elseif (${ARCH} STREQUAL "aarch64") - set (CMAKE_SYSTEM_PROCESSOR aarch64 CACHE STRING "") - set (TARGET_TRIPLE "aarch64-unknown-linux-gnueabi" CACHE STRING "") -endif() - -file ( - GLOB - UE_SYSROOT_CANDIDATES - ${UE_ROOT}/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v*_clang-*.*.*-*/${TARGET_TRIPLE} - LIST_DIRECTORIES TRUE - FOLLOW_SYMLINKS -) - -set (UE_SYSROOT_CANDIDATE) -foreach (CANDIDATE ${UE_SYSROOT_CANDIDATES}) - if (IS_DIRECTORY ${CANDIDATE}) - set (UE_SYSROOT_CANDIDATE ${CANDIDATE}) - break () + if (NOT EXISTS ${UE_ROOT}) + message (FATAL_ERROR "The specified Carla Unreal Engine 5 path does not exist (\"${UE_ROOT}\").") endif () -endforeach () -if (NOT UE_SYSROOT_CANDIDATE) - message (FATAL_ERROR "Could not find Unreal Engine clang sysroot.") -endif () + set (ARCH ${CMAKE_HOST_SYSTEM_PROCESSOR}) + + if (${ARCH} STREQUAL "x86_64") + set (CMAKE_SYSTEM_PROCESSOR x86_64 CACHE STRING "") + set (TARGET_TRIPLE "x86_64-unknown-linux-gnu" CACHE STRING "") + elseif (${ARCH} STREQUAL "aarch64") + set (CMAKE_SYSTEM_PROCESSOR aarch64 CACHE STRING "") + set (TARGET_TRIPLE "aarch64-unknown-linux-gnueabi" CACHE STRING "") + endif() + + file ( + GLOB + UE_SYSROOT_CANDIDATES + ${UE_ROOT}/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v*_clang-*.*.*-*/${TARGET_TRIPLE} + LIST_DIRECTORIES TRUE + FOLLOW_SYMLINKS + ) + + set (UE_SYSROOT_CANDIDATE) + foreach (CANDIDATE ${UE_SYSROOT_CANDIDATES}) + if (IS_DIRECTORY ${CANDIDATE}) + set (UE_SYSROOT_CANDIDATE ${CANDIDATE}) + break () + endif () + endforeach () + + if (NOT UE_SYSROOT_CANDIDATE) + message (FATAL_ERROR "Could not find Unreal Engine clang sysroot.") + endif () -set ( - UE_SYSROOT - ${UE_SYSROOT_CANDIDATE} - CACHE PATH "" -) - -set ( - UE_THIRD_PARTY - ${UE_ROOT}/Engine/Source/ThirdParty CACHE PATH "" -) - -set ( - UE_INCLUDE - ${UE_THIRD_PARTY}/Unix/LibCxx/include CACHE PATH "" -) - -set ( - UE_LIBS - ${UE_THIRD_PARTY}/Unix/LibCxx/lib/Unix/${TARGET_TRIPLE} CACHE PATH "" -) - -set ( - UE_OPENSSL_INCLUDE - ${UE_THIRD_PARTY}/OpenSSL/1.1.1t/include/Unix CACHE PATH "" -) - -set ( - UE_OPENSSL_LIBS - ${UE_THIRD_PARTY}/OpenSSL/1.1.1t/lib/Unix/x86_64-unknown-linux-gnu CACHE PATH "" -) - -add_compile_options ( - -fms-extensions - -fno-math-errno - -fdiagnostics-absolute-paths - $<$:-stdlib=libc++> -) - -add_link_options (-stdlib=libc++ -L${UE_LIBS} ) - -set ( - CMAKE_AR - ${UE_SYSROOT}/bin/llvm-ar - CACHE FILEPATH "" -) - -set ( - CMAKE_ASM_COMPILER - ${UE_SYSROOT}/bin/clang - CACHE FILEPATH "" -) - -set ( - CMAKE_C_COMPILER - ${UE_SYSROOT}/bin/clang - CACHE FILEPATH "" -) - -set ( - CMAKE_C_COMPILER_AR - ${UE_SYSROOT}/bin/llvm-ar - CACHE FILEPATH "" -) - -set ( - CMAKE_CXX_COMPILER - ${UE_SYSROOT}/bin/clang++ - CACHE FILEPATH "" -) - -set ( - CMAKE_CXX_COMPILER_AR - ${UE_SYSROOT}/bin/llvm-ar - CACHE FILEPATH "" -) - -set ( - CMAKE_OBJCOPY - ${UE_SYSROOT}/bin/llvm-objcopy - CACHE FILEPATH "" -) - -set ( - CMAKE_ADDR2LINE - ${UE_SYSROOT}/bin/${TARGET_TRIPLE}-addr2line - CACHE FILEPATH "" -) - -set ( - CMAKE_C_COMPILER_RANLIB - ${UE_SYSROOT}/bin/${TARGET_TRIPLE}-ranlib - CACHE FILEPATH "" -) - -set ( - CMAKE_CXX_COMPILER_RANLIB - ${UE_SYSROOT}/bin/${TARGET_TRIPLE}-ranlib - CACHE FILEPATH "" -) - -set ( - CMAKE_LINKER - ${UE_SYSROOT}/bin/${TARGET_TRIPLE}-ld - CACHE FILEPATH "" -) - -set ( - CMAKE_NM - ${UE_SYSROOT}/bin/${TARGET_TRIPLE}-nm - CACHE FILEPATH "" -) - -set ( - CMAKE_OBJDUMP - ${UE_SYSROOT}/bin/${TARGET_TRIPLE}-objdump - CACHE FILEPATH "" -) - -set ( - CMAKE_RANLIB - ${UE_SYSROOT}/bin/${TARGET_TRIPLE}-ranlib - CACHE FILEPATH "" -) - -set ( - CMAKE_READELF - ${UE_SYSROOT}/bin/${TARGET_TRIPLE}-readelf - CACHE FILEPATH "" -) - -set ( - CMAKE_STRIP - ${UE_SYSROOT}/bin/${TARGET_TRIPLE}-strip - CACHE FILEPATH "" -) - -set ( - COVERAGE_COMMAND - ${UE_SYSROOT}/bin/${TARGET_TRIPLE}-gcov - CACHE FILEPATH "" -) - -set ( - CMAKE_CXX_STANDARD_LIBRARIES - "${UE_LIBS}/libc++.a ${UE_LIBS}/libc++abi.a" -) - -set ( - CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES - ${UE_INCLUDE} ${UE_INCLUDE}/c++/v1 -) + set ( + UE_SYSROOT + ${UE_SYSROOT_CANDIDATE} + CACHE PATH "" + ) + + set ( + UE_THIRD_PARTY + ${UE_ROOT}/Engine/Source/ThirdParty CACHE PATH "" + ) + + set ( + UE_INCLUDE + ${UE_THIRD_PARTY}/Unix/LibCxx/include CACHE PATH "" + ) + + set ( + UE_LIBS + ${UE_THIRD_PARTY}/Unix/LibCxx/lib/Unix/${TARGET_TRIPLE} CACHE PATH "" + ) + + set ( + UE_OPENSSL_INCLUDE + ${UE_THIRD_PARTY}/OpenSSL/1.1.1t/include/Unix CACHE PATH "" + ) + + set ( + UE_OPENSSL_LIBS + ${UE_THIRD_PARTY}/OpenSSL/1.1.1t/lib/Unix/x86_64-unknown-linux-gnu CACHE PATH "" + ) + + add_compile_options ( + -fms-extensions + -fno-math-errno + -fdiagnostics-absolute-paths + $<$:-stdlib=libc++> + ) + + add_link_options (-stdlib=libc++ -L${UE_LIBS} ) + + set ( + CMAKE_AR + ${UE_SYSROOT}/bin/llvm-ar + CACHE FILEPATH "" + ) + + set ( + CMAKE_ASM_COMPILER + ${UE_SYSROOT}/bin/clang + CACHE FILEPATH "" + ) + + set ( + CMAKE_C_COMPILER + ${UE_SYSROOT}/bin/clang + CACHE FILEPATH "" + ) + + set ( + CMAKE_C_COMPILER_AR + ${UE_SYSROOT}/bin/llvm-ar + CACHE FILEPATH "" + ) + + set ( + CMAKE_CXX_COMPILER + ${UE_SYSROOT}/bin/clang++ + CACHE FILEPATH "" + ) + + set ( + CMAKE_CXX_COMPILER_AR + ${UE_SYSROOT}/bin/llvm-ar + CACHE FILEPATH "" + ) + + set ( + CMAKE_OBJCOPY + ${UE_SYSROOT}/bin/llvm-objcopy + CACHE FILEPATH "" + ) + + set ( + CMAKE_ADDR2LINE + ${UE_SYSROOT}/bin/${TARGET_TRIPLE}-addr2line + CACHE FILEPATH "" + ) + + set ( + CMAKE_C_COMPILER_RANLIB + ${UE_SYSROOT}/bin/${TARGET_TRIPLE}-ranlib + CACHE FILEPATH "" + ) + + set ( + CMAKE_CXX_COMPILER_RANLIB + ${UE_SYSROOT}/bin/${TARGET_TRIPLE}-ranlib + CACHE FILEPATH "" + ) + + set ( + CMAKE_LINKER + ${UE_SYSROOT}/bin/${TARGET_TRIPLE}-ld + CACHE FILEPATH "" + ) + + set ( + CMAKE_NM + ${UE_SYSROOT}/bin/${TARGET_TRIPLE}-nm + CACHE FILEPATH "" + ) + + set ( + CMAKE_OBJDUMP + ${UE_SYSROOT}/bin/${TARGET_TRIPLE}-objdump + CACHE FILEPATH "" + ) + + set ( + CMAKE_RANLIB + ${UE_SYSROOT}/bin/${TARGET_TRIPLE}-ranlib + CACHE FILEPATH "" + ) + + set ( + CMAKE_READELF + ${UE_SYSROOT}/bin/${TARGET_TRIPLE}-readelf + CACHE FILEPATH "" + ) + + set ( + CMAKE_STRIP + ${UE_SYSROOT}/bin/${TARGET_TRIPLE}-strip + CACHE FILEPATH "" + ) + + set ( + COVERAGE_COMMAND + ${UE_SYSROOT}/bin/${TARGET_TRIPLE}-gcov + CACHE FILEPATH "" + ) + + set ( + CMAKE_CXX_STANDARD_LIBRARIES + "${UE_LIBS}/libc++.a ${UE_LIBS}/libc++abi.a" + ) + + set ( + CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES + ${UE_INCLUDE} ${UE_INCLUDE}/c++/v1 + ) endif () diff --git a/CarlaSetup.bat b/CarlaSetup.bat index af7148c4830..3fc9883dd5b 100644 --- a/CarlaSetup.bat +++ b/CarlaSetup.bat @@ -2,7 +2,8 @@ setlocal EnableDelayedExpansion set skip_prerequisites=false -set launch=false +set skip_prebuild=false +set launch=true set interactive=false set python_path=python set python_root= @@ -77,19 +78,47 @@ if exist "%cd%\Unreal\CarlaUnreal\Content" ( ) rem Activate VS terminal development environment: -if exist "%PROGRAMFILES%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat" ( - echo Activating "x64 Native Tools Command Prompt" terminal environment. - call "%PROGRAMFILES%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat" || exit /b -) else ( - echo Could not find vcvarsall.bat, aborting setup... +set "vcvars64_found=" + +echo Checking for Visual Studio 2022... +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvars64.bat" ( + set "vcvars64_found=true" + call "%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvars64.bat" || exit /b +) +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat" ( + set "vcvars64_found=true" + call "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat" || exit /b +) +if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvars64.bat" ( + set "vcvars64_found=true" + call "%ProgramFiles(x86)%\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvars64.bat" || exit /b +) +if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat" ( + set "vcvars64_found=true" + call "%ProgramFiles(x86)%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat" || exit /b +) +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" ( + set "vcvars64_found=true" + call "%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" || exit /b +) +if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" ( + set "vcvars64_found=true" + call "%ProgramFiles(x86)%\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" || exit /b +) + +if "%vcvars64_found%"=="" ( + echo Could not find vcvars64.bat for any detected Visual Studio version, aborting setup... exit 1 +) else ( + echo Visual Studio 2022 found. ) rem -- DOWNLOAD + BUILD UNREAL ENGINE -- if exist "%CARLA_UNREAL_ENGINE_PATH%" ( echo Found Unreal Engine 5 at "%CARLA_UNREAL_ENGINE_PATH%". ) else if exist ..\UnrealEngine5_carla ( - echo Found CARLA Unreal Engine at %cd%/UnrealEngine5_carla. Assuming already built... + echo Found CARLA Unreal Engine at %cd%/../UnrealEngine5_carla. Assuming already built... + set CARLA_UNREAL_ENGINE_PATH=%cd%/../UnrealEngine5_carla ) else ( echo Could not find CARLA Unreal Engine, downloading... pushd .. @@ -112,23 +141,24 @@ if exist "%CARLA_UNREAL_ENGINE_PATH%" ( popd ) -rem -- BUILD CARLA -- -echo Configuring the CARLA CMake project... -cmake ^ - -G Ninja ^ - -S . ^ - -B Build ^ - --toolchain=CMake/Toolchain.cmake ^ - -DPython_ROOT_DIR=%python_root% ^ - -DPython3_ROOT_DIR=%python_root% ^ - -DCMAKE_BUILD_TYPE=Release ^ - -DCARLA_UNREAL_ENGINE_PATH=%CARLA_UNREAL_ENGINE_PATH% || exit /b -echo Building CARLA... -cmake --build Build || exit /b -echo Installing Python API... -cmake --build Build --target carla-python-api-install || exit /b -echo CARLA Python API build+install succeeded. - +if %skip_prebuild%==false ( + rem -- BUILD CARLA -- + echo Configuring the CARLA CMake project... + cmake ^ + -G Ninja ^ + -S . ^ + -B Build ^ + --toolchain=CMake/Toolchain.cmake ^ + -DPython_ROOT_DIR=%python_root% ^ + -DPython3_ROOT_DIR=%python_root% ^ + -DCMAKE_BUILD_TYPE=Release ^ + -DCARLA_UNREAL_ENGINE_PATH=%CARLA_UNREAL_ENGINE_PATH% || exit /b + echo Building CARLA... + cmake --build Build || exit /b + echo Installing Python API... + cmake --build Build --target carla-python-api-install || exit /b + echo CARLA Python API build+install succeeded. +) rem -- POST-BUILD STEPS -- if %launch%==true ( diff --git a/LibCarla/source/carla/ros2/ROS2.cpp b/LibCarla/source/carla/ros2/ROS2.cpp index ed563cb6bec..720ca451109 100644 --- a/LibCarla/source/carla/ros2/ROS2.cpp +++ b/LibCarla/source/carla/ros2/ROS2.cpp @@ -94,7 +94,7 @@ void ROS2::SetFrame(uint64_t frame) { if (_controller->HasNewMessage()) { auto it = _actor_callbacks.find(actor); if (it != _actor_callbacks.end()) { - VehicleControl control = _controller->GetMessage(); + VehicleControl control = _controller->GetCarlaMessage(); it->second(actor, control); } } @@ -114,7 +114,7 @@ void ROS2::SetFrame(uint64_t frame) { auto it = _actor_message_callbacks.find(actor); if (it != _actor_message_callbacks.end()) { MessageControl control; - control.message = _basic_subscriber->GetMessage(); + control.message = _basic_subscriber->GetCarlaMessage(); it->second(actor, control); } } diff --git a/LibCarla/source/carla/ros2/publishers/CarlaIMUPublisher.cpp b/LibCarla/source/carla/ros2/publishers/CarlaIMUPublisher.cpp index ce971ca0b46..50e9d3bcab5 100644 --- a/LibCarla/source/carla/ros2/publishers/CarlaIMUPublisher.cpp +++ b/LibCarla/source/carla/ros2/publishers/CarlaIMUPublisher.cpp @@ -1,3 +1,8 @@ +#ifdef _WIN32 +// Allow use of M_PI +#define _USE_MATH_DEFINES +#endif // _WIN32 + #include "CarlaIMUPublisher.h" #include diff --git a/LibCarla/source/carla/ros2/publishers/CarlaTransformPublisher.cpp b/LibCarla/source/carla/ros2/publishers/CarlaTransformPublisher.cpp index fb622f14fdf..8dc26a074c2 100644 --- a/LibCarla/source/carla/ros2/publishers/CarlaTransformPublisher.cpp +++ b/LibCarla/source/carla/ros2/publishers/CarlaTransformPublisher.cpp @@ -1,3 +1,9 @@ +#ifdef _WIN32 +#define _USE_MATH_DEFINES +// Convert GNU C lib M_PIf32 to a float 32 version of M_PI +#define M_PIf32 (float)M_PI +#endif // _WIN32 + #include "CarlaTransformPublisher.h" #include diff --git a/LibCarla/source/carla/ros2/subscribers/BasicSubscriber.cpp b/LibCarla/source/carla/ros2/subscribers/BasicSubscriber.cpp index 9bbe83c0a01..5f68e2c698d 100644 --- a/LibCarla/source/carla/ros2/subscribers/BasicSubscriber.cpp +++ b/LibCarla/source/carla/ros2/subscribers/BasicSubscriber.cpp @@ -98,7 +98,7 @@ namespace ros2 { _impl->_alive = false; } - const char* BasicSubscriber::GetMessage() { + const char* BasicSubscriber::GetCarlaMessage() { _impl->_new_message = false; return _impl->_message.c_str(); } diff --git a/LibCarla/source/carla/ros2/subscribers/BasicSubscriber.h b/LibCarla/source/carla/ros2/subscribers/BasicSubscriber.h index 1c94eae2084..ef85dea4132 100644 --- a/LibCarla/source/carla/ros2/subscribers/BasicSubscriber.h +++ b/LibCarla/source/carla/ros2/subscribers/BasicSubscriber.h @@ -26,7 +26,7 @@ namespace ros2 { bool HasNewMessage(); bool IsAlive(); - const char* GetMessage(); + const char* GetCarlaMessage(); void* GetActor(); bool Init(); diff --git a/LibCarla/source/carla/ros2/subscribers/CarlaEgoVehicleControlSubscriber.cpp b/LibCarla/source/carla/ros2/subscribers/CarlaEgoVehicleControlSubscriber.cpp index 0089336e07c..daaea0a2865 100644 --- a/LibCarla/source/carla/ros2/subscribers/CarlaEgoVehicleControlSubscriber.cpp +++ b/LibCarla/source/carla/ros2/subscribers/CarlaEgoVehicleControlSubscriber.cpp @@ -160,7 +160,7 @@ namespace ros2 { _impl->_alive = false; } - VehicleControl CarlaEgoVehicleControlSubscriber::GetMessage() { + VehicleControl CarlaEgoVehicleControlSubscriber::GetCarlaMessage() { _impl->_new_message = false; return _impl->_control; } diff --git a/LibCarla/source/carla/ros2/subscribers/CarlaEgoVehicleControlSubscriber.h b/LibCarla/source/carla/ros2/subscribers/CarlaEgoVehicleControlSubscriber.h index 70231fbf270..6e26257f24c 100644 --- a/LibCarla/source/carla/ros2/subscribers/CarlaEgoVehicleControlSubscriber.h +++ b/LibCarla/source/carla/ros2/subscribers/CarlaEgoVehicleControlSubscriber.h @@ -26,7 +26,7 @@ namespace ros2 { bool HasNewMessage(); bool IsAlive(); - VehicleControl GetMessage(); + VehicleControl GetCarlaMessage(); void* GetVehicle(); bool Init(); diff --git a/LibCarla/source/carla/ros2/types/CameraInfo.cpp b/LibCarla/source/carla/ros2/types/CameraInfo.cpp index 058e88d3bd3..32cd463019f 100644 --- a/LibCarla/source/carla/ros2/types/CameraInfo.cpp +++ b/LibCarla/source/carla/ros2/types/CameraInfo.cpp @@ -20,6 +20,8 @@ */ #ifdef _WIN32 +// Allow M_PI usage +#define _USE_MATH_DEFINES // Remove linker warning LNK4221 on Visual Studio namespace { char dummy; diff --git a/Ros2Native/CMakeLists.txt b/Ros2Native/CMakeLists.txt index 18b8d61a454..e90dcd7fd73 100644 --- a/Ros2Native/CMakeLists.txt +++ b/Ros2Native/CMakeLists.txt @@ -9,67 +9,137 @@ include (ExternalProject) set (PROJECT_INSTALL_PATH ${CMAKE_CURRENT_BINARY_DIR}/install) -ExternalProject_add ( - foonathan_memory - URL https://github.com/eProsima/foonathan_memory_vendor/archive/refs/heads/${CARLA_FOONATHAN_MEMORY_VENDOR_TAG}.zip - CMAKE_ARGS - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DCMAKE_INSTALL_PREFIX=${PROJECT_INSTALL_PATH} - -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} - -DBUILD_SHARED_LIBS=ON - -DFOONATHAN_MEMORY_FORCE_VENDORED_BUILD=ON -) +if (WIN32) + ExternalProject_add ( + foonathan_memory + URL https://github.com/eProsima/foonathan_memory_vendor/archive/refs/heads/${CARLA_FOONATHAN_MEMORY_VENDOR_TAG}.zip + CMAKE_ARGS + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_INSTALL_PREFIX=${PROJECT_INSTALL_PATH} + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + -DBUILD_SHARED_LIBS=OFF + -DFOONATHAN_MEMORY_FORCE_VENDORED_BUILD=ON + ) -# Note: We are using GIT_REPOSITORY instead URL for fastdds because fastdss contains submodules -# and we need the .git folders to download the submodules -ExternalProject_add ( - fastdds - GIT_REPOSITORY https://github.com/eProsima/Fast-DDS.git - GIT_TAG ${CARLA_FASTDDS_TAG} - CMAKE_ARGS - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DCMAKE_INSTALL_PREFIX=${PROJECT_INSTALL_PATH} - -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} - -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 - DEPENDS foonathan_memory -) + ExternalProject_add ( + fastcdr + GIT_REPOSITORY https://github.com/eProsima/Fast-CDR.git + GIT_TAG v1.1.0 + CMAKE_ARGS + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_INSTALL_PREFIX=${PROJECT_INSTALL_PATH} + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + -DBUILD_SHARED_LIBS=OFF + ) -ExternalProject_Add ( - carla-ros2-native-lib - DEPENDS fastdds - SOURCE_DIR ${PROJECT_SOURCE_DIR}/LibCarlaRos2Native - CMAKE_ARGS - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DCMAKE_INSTALL_PREFIX=${PROJECT_INSTALL_PATH} - -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -) + # Note: We are using GIT_REPOSITORY instead URL for fastdds because fastdss contains submodules + # and we need the .git folders to download the submodules + ExternalProject_add ( + fastdds + GIT_REPOSITORY https://github.com/eProsima/Fast-DDS.git + GIT_TAG ${CARLA_FASTDDS_TAG} + CMAKE_ARGS + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_INSTALL_PREFIX=${PROJECT_INSTALL_PATH} + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + -DBUILD_SHARED_LIBS=OFF + -DBUILD_TESTING=OFF + -DCOMPILE_EXAMPLES=OFF + -DCOMPILE_TOOLS=OFF + -DTHIRDPARTY_Asio=FORCE + -DTHIRDPARTY_fastcdr=FORCE + -DTHIRDPARTY_TinyXML2=FORCE + -DSQLITE3_SUPPORT=OFF + -DSECURITY=OFF + DEPENDS foonathan_memory + ) -set (CARLA_PLUGIN_BINARY_PATH ${CMAKE_SOURCE_DIR}/Unreal/CarlaUnreal/Plugins/Carla/Binaries/Linux) + ExternalProject_Add ( + carla-ros2-native-lib + DEPENDS fastdds + SOURCE_DIR ${PROJECT_SOURCE_DIR}/LibCarlaRos2Native + CMAKE_ARGS + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_INSTALL_PREFIX=${PROJECT_INSTALL_PATH} + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + -DCMAKE_CXX_STANDARD=17 + ) +else() + ExternalProject_add ( + foonathan_memory + URL https://github.com/eProsima/foonathan_memory_vendor/archive/refs/heads/${CARLA_FOONATHAN_MEMORY_VENDOR_TAG}.zip + CMAKE_ARGS + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_INSTALL_PREFIX=${PROJECT_INSTALL_PATH} + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + -DBUILD_SHARED_LIBS=ON + -DFOONATHAN_MEMORY_FORCE_VENDORED_BUILD=ON + ) -make_directory (${CARLA_PLUGIN_BINARY_PATH}) + # Note: We are using GIT_REPOSITORY instead URL for fastdds because fastdss contains submodules + # and we need the .git folders to download the submodules + ExternalProject_add ( + fastdds + GIT_REPOSITORY https://github.com/eProsima/Fast-DDS.git + GIT_TAG ${CARLA_FASTDDS_TAG} + CMAKE_ARGS + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_INSTALL_PREFIX=${PROJECT_INSTALL_PATH} + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + -DBUILD_SHARED_LIBS=ON + -DBUILD_TESTING=ON + -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 + DEPENDS foonathan_memory + ) -add_custom_command ( - TARGET carla-ros2-native-lib - POST_BUILD - COMMAND - ${CMAKE_COMMAND} -E copy - ${PROJECT_INSTALL_PATH}/lib/*.so* - ${CARLA_PLUGIN_BINARY_PATH} -) + ExternalProject_Add ( + carla-ros2-native-lib + DEPENDS fastdds + SOURCE_DIR ${PROJECT_SOURCE_DIR}/LibCarlaRos2Native + CMAKE_ARGS + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_INSTALL_PREFIX=${PROJECT_INSTALL_PATH} + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + ) +endif() carla_add_custom_target ( carla-ros2-native "Build the ROS2-Native CARLA subproject." DEPENDS carla-ros2-native-lib ) + +set (CARLA_PLUGIN_BINARY_PATH ${CMAKE_SOURCE_DIR}/Unreal/CarlaUnreal/Plugins/Carla/Binaries) +make_directory (${CARLA_PLUGIN_BINARY_PATH}) + +if (WIN32) + add_custom_command ( + TARGET carla-ros2-native-lib + POST_BUILD + COMMAND + ${CMAKE_COMMAND} -E copy + ${PROJECT_INSTALL_PATH}/lib/carla-ros2-native.lib + ${PROJECT_INSTALL_PATH}/lib/libfastcdr-1.1.lib + ${PROJECT_INSTALL_PATH}/lib/libfastrtps-2.11.lib + ${PROJECT_INSTALL_PATH}/lib/foonathan_memory-0.7.3.lib + ${CARLA_PLUGIN_BINARY_PATH} + ) +else() + add_custom_command ( + TARGET carla-ros2-native-lib + POST_BUILD + COMMAND + ${CMAKE_COMMAND} -E copy + ${PROJECT_INSTALL_PATH}/lib/*.so* + ${CARLA_PLUGIN_BINARY_PATH} + ) +endif() diff --git a/Ros2Native/LibCarlaRos2Native/CMakeLists.txt b/Ros2Native/LibCarlaRos2Native/CMakeLists.txt index f9d4c9e0f04..05c99e74019 100644 --- a/Ros2Native/LibCarlaRos2Native/CMakeLists.txt +++ b/Ros2Native/LibCarlaRos2Native/CMakeLists.txt @@ -30,12 +30,21 @@ file ( ${LIBCARLA_SOURCE_PATH}/carla/ros2/types/*.h ) -add_library ( - carla-ros2-native - SHARED - ${LIBCARLA_ROS2_HEADERS} - ${LIBCARLA_ROS2_SOURCES} -) +if (WIN32) + add_library ( + carla-ros2-native + STATIC + ${LIBCARLA_ROS2_HEADERS} + ${LIBCARLA_ROS2_SOURCES} + ) +else () + add_library ( + carla-ros2-native + SHARED + ${LIBCARLA_ROS2_HEADERS} + ${LIBCARLA_ROS2_SOURCES} + ) +endif() target_include_directories ( carla-ros2-native @@ -50,10 +59,21 @@ target_compile_definitions ( BOOST_ASIO_ENABLE_BUFFER_DEBUGGING ) -target_link_libraries ( - carla-ros2-native PUBLIC - ${CMAKE_INSTALL_PREFIX}/lib/libfastrtps.so -) +if(WIN32) + target_link_libraries ( + carla-ros2-native PUBLIC + ${CMAKE_INSTALL_PREFIX}/lib/libfastrtps-2.11.lib + ${CMAKE_INSTALL_PREFIX}/lib/libfastcdr-1.1.lib + ${CMAKE_INSTALL_PREFIX}/lib/foonathan_memory-0.7.3.lib + Shlwapi.lib + ) + +else() + target_link_libraries ( + carla-ros2-native PUBLIC + ${CMAKE_INSTALL_PREFIX}/lib/libfastrtps.so + ) +endif() install ( TARGETS diff --git a/Unreal/CMakeLists.txt b/Unreal/CMakeLists.txt index 0df769df376..795a1b160b4 100644 --- a/Unreal/CMakeLists.txt +++ b/Unreal/CMakeLists.txt @@ -148,10 +148,18 @@ foreach (UE_DEP ${UE_DEPENDENCIES}) ) endforeach () -set ( - CARLA_UNREAL_LIBRARIES - $ -) +if(WIN32) + set ( + CARLA_UNREAL_LIBRARIES + $ + shlwapi.lib + ) +else() + set ( + CARLA_UNREAL_LIBRARIES + $ + ) +endif() foreach (UE_DEP ${UE_DEPENDENCIES}) get_target_property (UE_DEP_TYPE ${UE_DEP} TYPE) diff --git a/Unreal/CarlaUnreal/Plugins/Carla/Source/Carla/Carla.Build.cs b/Unreal/CarlaUnreal/Plugins/Carla/Source/Carla/Carla.Build.cs index 4b8420c02b4..4a030cf58d4 100644 --- a/Unreal/CarlaUnreal/Plugins/Carla/Source/Carla/Carla.Build.cs +++ b/Unreal/CarlaUnreal/Plugins/Carla/Source/Carla/Carla.Build.cs @@ -172,15 +172,26 @@ void AddDynamicLibrary(string library) TestOptionalFeature(EnableRos2Demo, "Ros2 demo", "WITH_ROS2_DEMO"); string CarlaPluginSourcePath = Path.GetFullPath(ModuleDirectory); - string CarlaPluginBinariesLinuxPath = Path.Combine(CarlaPluginSourcePath, "..", "..", "Binaries", "Linux"); - AddDynamicLibrary(Path.Combine(CarlaPluginBinariesLinuxPath, "libcarla-ros2-native.so")); - RuntimeDependencies.Add(Path.Combine(CarlaPluginBinariesLinuxPath, "libfoonathan_memory-0.7.3.so")); - RuntimeDependencies.Add(Path.Combine(CarlaPluginBinariesLinuxPath, "libfastcdr.so")); - RuntimeDependencies.Add(Path.Combine(CarlaPluginBinariesLinuxPath, "libfastcdr.so.1")); - RuntimeDependencies.Add(Path.Combine(CarlaPluginBinariesLinuxPath, "libfastcdr.so.1.1.0")); - RuntimeDependencies.Add(Path.Combine(CarlaPluginBinariesLinuxPath, "libfastrtps.so")); - RuntimeDependencies.Add(Path.Combine(CarlaPluginBinariesLinuxPath, "libfastrtps.so.2.11")); - RuntimeDependencies.Add(Path.Combine(CarlaPluginBinariesLinuxPath, "libfastrtps.so.2.11.2")); + string CarlaPluginBinariesPath = Path.Combine(CarlaPluginSourcePath, "..", "..", "Binaries"); + if (Target.Platform == UnrealTargetPlatform.Win64) + { + PublicAdditionalLibraries.Add(Path.Combine(CarlaPluginBinariesPath, "carla-ros2-native.lib")); + PublicAdditionalLibraries.Add(Path.Combine(CarlaPluginBinariesPath, "libfastrtps-2.11.lib")); + PublicAdditionalLibraries.Add(Path.Combine(CarlaPluginBinariesPath, "libfastcdr-1.1.lib")); + PublicAdditionalLibraries.Add(Path.Combine(CarlaPluginBinariesPath, "foonathan_memory-0.7.3.lib")); + PublicAdditionalLibraries.Add("Shlwapi.lib"); + } + else + { + AddDynamicLibrary(Path.Combine(CarlaPluginBinariesPath, "libcarla-ros2-native.so")); + RuntimeDependencies.Add(Path.Combine(CarlaPluginBinariesPath, "libfoonathan_memory-0.7.3.so")); + RuntimeDependencies.Add(Path.Combine(CarlaPluginBinariesPath, "libfastcdr.so")); + RuntimeDependencies.Add(Path.Combine(CarlaPluginBinariesPath, "libfastcdr.so.1")); + RuntimeDependencies.Add(Path.Combine(CarlaPluginBinariesPath, "libfastcdr.so.1.1.0")); + RuntimeDependencies.Add(Path.Combine(CarlaPluginBinariesPath, "libfastrtps.so")); + RuntimeDependencies.Add(Path.Combine(CarlaPluginBinariesPath, "libfastrtps.so.2.11")); + RuntimeDependencies.Add(Path.Combine(CarlaPluginBinariesPath, "libfastrtps.so.2.11.3")); + } } } } diff --git a/Util/SetupUtils/InstallPrerequisites.bat b/Util/SetupUtils/InstallPrerequisites.bat index e07293ebe87..4b21ddd41b0 100644 --- a/Util/SetupUtils/InstallPrerequisites.bat +++ b/Util/SetupUtils/InstallPrerequisites.bat @@ -48,15 +48,42 @@ rem -- MAIN -- :main rem -- INSTALL VISUAL STUDIO -- -if not exist %cd%\Temp ( - mkdir %cd%\Temp +set "vcvars64_found=" + +echo Checking if Visual Studio 2022 needs to be installed... +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvars64.bat" ( + set "vcvars64_found=true" +) +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat" ( + set "vcvars64_found=true" +) +if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvars64.bat" ( + set "vcvars64_found=true" +) +if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat" ( + set "vcvars64_found=true" +) +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" ( + set "vcvars64_found=true" +) +if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" ( + set "vcvars64_found=true" +) + +if "%vcvars64_found%"=="" ( + echo Visual Studio 2022 not found. Installing required components... + if not exist %cd%\Temp ( + mkdir %cd%\Temp + ) + pushd Temp + curl -L -O https://aka.ms/vs/17/release/vs_community.exe || exit /b + popd Temp + %cd%\Temp\vs_community.exe --add %visual_studio_components% --installWhileDownloading --passive --wait || exit /b + del %cd%\Temp\vs_community.exe + rmdir %cd%\Temp +) else ( + echo Visual Studio 2022 found. Skipping installation. ) -pushd Temp -curl -L -O https://aka.ms/vs/17/release/vs_community.exe || exit /b -popd Temp -%cd%\Temp\vs_community.exe --add %visual_studio_components% --installWhileDownloading --passive --wait || exit /b -del %cd%\Temp\vs_community.exe -rmdir %cd%\Temp rem -- INSTALL NINJA -- ninja --version >nul 2>nul