Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 51 additions & 9 deletions gazebo/dave_gz_multibeam_sonar/multibeam_sonar/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,23 +1,16 @@
cmake_minimum_required(VERSION 3.11.0 FATAL_ERROR)

# Suppress developer warnings for the entire workspace.

set(CMAKE_SUPPRESS_DEVELOPER_WARNINGS TRUE CACHE BOOL
"Suppress developer warnings" FORCE)
# Set CMP0144 to NEW to ensure find_package
# uses upper-case <PACKAGENAME>_ROOT variables.

cmake_policy(SET CMP0144 NEW)

project(multibeam_sonar)

set(CUDA_ARCHITECTURE "60" CACHE STRING "Target CUDA SM version")

find_package(ament_cmake REQUIRED)
find_package(CUDAToolkit QUIET)

if(CUDAToolkit_FOUND)

enable_language(CUDA)
find_package(CUDA REQUIRED)
message(STATUS "CUDA found, enabling CUDA support.")
Expand Down Expand Up @@ -47,17 +40,51 @@ if(CUDAToolkit_FOUND)
set(GZ_RENDERING_TARGET gz-rendering${GZ_RENDERING_VER}-ogre)
add_definitions(-DWITH_OGRE)
endif()

if(TARGET gz-rendering${GZ_RENDERING_VER}::ogre2)
set(HAVE_OGRE2 TRUE)
set(GZ_RENDERING_TARGET gz-rendering${GZ_RENDERING_VER}-ogre2)
add_definitions(-DWITH_OGRE2)
endif()

# Detected at configure time by presence of cargo.
# If cargo is absent the wgpu sources are simply excluded — CUDA build is
# completely unaffected.

find_program(CARGO_EXECUTABLE cargo)

if(CARGO_EXECUTABLE)
message(STATUS "[multibeam_sonar] WGPU backend ENABLED")

set(WGPU_DIR ${CMAKE_CURRENT_SOURCE_DIR}/wgpu_backend)
set(WGPU_LIB ${WGPU_DIR}/target/release/libsonar_wgpu_backend.a)

add_custom_command(
OUTPUT ${WGPU_LIB}
COMMAND cargo build --release
WORKING_DIRECTORY ${WGPU_DIR}
COMMENT "Building Rust WGPU backend"
)

add_custom_target(wgpu_backend_build ALL DEPENDS ${WGPU_LIB})

add_library(wgpu_backend STATIC IMPORTED)
set_target_properties(wgpu_backend PROPERTIES
IMPORTED_LOCATION ${WGPU_LIB}
)

add_dependencies(wgpu_backend wgpu_backend_build)

set(HAVE_WGPU ON)
else()
message(STATUS "[multibeam_sonar] WGPU backend DISABLED (cargo not found)")
set(HAVE_WGPU OFF)
endif()

add_library(${PROJECT_NAME}
SHARED
MultibeamSonarSensor.cc
sonar_calculation_cuda.cu
sonar_compute_wgpu.cc
)

set_target_properties(${PROJECT_NAME}
Expand Down Expand Up @@ -92,6 +119,21 @@ if(CUDAToolkit_FOUND)
${CUBLAS_LIB}
)

# Link wgpu static lib if built
if(HAVE_WGPU)
target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_WGPU_BACKEND)

target_include_directories(${PROJECT_NAME}
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/wgpu_backend/include
)

target_link_libraries(${PROJECT_NAME}
wgpu_backend
pthread
dl
)
endif()

install(TARGETS ${PROJECT_NAME}
DESTINATION lib/${PROJECT_NAME}
)
Expand Down Expand Up @@ -120,4 +162,4 @@ else()
"Skipping CUDA-specific targets")
endif()

ament_package()
ament_package()
Loading