Skip to content

Commit 5dc0de8

Browse files
authored
[Robotics][orb-extractor] Initial support for both Humble and Jazzy ROS2 distros. (#1522)
1 parent 25da5d1 commit 5dc0de8

File tree

93 files changed

+9997
-4019
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

93 files changed

+9997
-4019
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Copyright (C) 2025 Intel Corporation
2+
#
3+
# SPDX-License-Identifier: Apache-2.0
4+
5+
# Aligned with https://github.com/ament/ament_lint/blob/jazzy/ament_clang_format/ament_clang_format/configuration/.clang-format
6+
---
7+
Language: Cpp
8+
BasedOnStyle: Google
9+
10+
AccessModifierOffset: -2
11+
AlignAfterOpenBracket: AlwaysBreak
12+
BraceWrapping:
13+
AfterClass: true
14+
AfterFunction: true
15+
AfterNamespace: true
16+
AfterStruct: true
17+
AfterEnum: true
18+
BreakBeforeBraces: Custom
19+
ColumnLimit: 100
20+
ConstructorInitializerIndentWidth: 0
21+
ContinuationIndentWidth: 2
22+
DerivePointerAlignment: false
23+
PointerAlignment: Middle
24+
ReflowComments: false
25+
...
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Copyright (C) 2025 Intel Corporation
2+
#
3+
# SPDX-License-Identifier: Apache-2.0
4+
5+
CLANG_FORMAT_FILE_NAME=.clang-format
6+
DEFAULT_BRANCH=main
7+
GITHUB_ACTIONS_CONFIG_FILE=actionlint.yml
8+
GITHUB_WORKSPACE=/tmp/lint
9+
LINTER_RULES_PATH=.github/linters
10+
VALIDATE_ALL_CODEBASE=false
11+
YAML_CONFIG_FILE=yamllint.yml
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Copyright (C) 2025 Intel Corporation
2+
#
3+
# SPDX-License-Identifier: Apache-2.0
4+
5+
---
6+
extends: default
7+
8+
rules:
9+
truthy: disable
10+
comments: disable
11+
comments-indentation: disable
12+
line-length: disable
Lines changed: 82 additions & 126 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
# SPDX-License-Identifier: Apache-2.0
21
# Copyright (C) 2025 Intel Corporation
2+
#
3+
# SPDX-License-Identifier: Apache-2.0
4+
35
cmake_minimum_required(VERSION 3.10)
46

57
set(CMAKE_CXX_STANDARD 17)
@@ -11,161 +13,111 @@ project(orblze CXX)
1113
set(APP "gpu_orb_ocvfree")
1214
set(APP_CV "gpu_orb")
1315

16+
string(APPEND CMAKE_CXX_FLAGS " -fsycl")
17+
18+
if(WIN32)
19+
set(CMAKE_GENERATOR_TOOLSET "Intel(R) oneAPI DPC++ Compiler 2024")
20+
set(CMAKE_CXX_FLAGS_RELEASE "-O3 /EHa")
21+
else()
22+
set(CMAKE_CXX_COMPILER icpx)
23+
string(APPEND CMAKE_CXX_FLAGS " -fPIC")
24+
25+
# Simple Intel LLVM/SYCL compatibility: Remove -fcf-protection flags
26+
if(CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM" OR CMAKE_CXX_COMPILER MATCHES ".*icpx.*")
27+
message(STATUS "Intel LLVM compiler detected - filtering incompatible flags")
28+
29+
# Simple function to remove -fcf-protection flags
30+
macro(remove_fcf_protection_from_var var_name)
31+
if(${var_name})
32+
string(REGEX REPLACE "-fcf-protection[^ ]*" "" ${var_name} "${${var_name}}")
33+
string(STRIP "${${var_name}}" ${var_name})
34+
endif()
35+
endmacro()
36+
37+
# Apply to all relevant CMAKE variables
38+
remove_fcf_protection_from_var(CMAKE_CXX_FLAGS)
39+
remove_fcf_protection_from_var(CMAKE_CXX_FLAGS_DEBUG)
40+
remove_fcf_protection_from_var(CMAKE_CXX_FLAGS_RELEASE)
41+
remove_fcf_protection_from_var(CMAKE_CXX_FLAGS_RELWITHDEBINFO)
42+
remove_fcf_protection_from_var(CMAKE_CXX_FLAGS_MINSIZEREL)
43+
44+
# Clean environment variables if they exist
45+
if(DEFINED ENV{CXXFLAGS})
46+
set(ENV{CXXFLAGS} "")
47+
message(STATUS "Cleared CXXFLAGS environment variable")
48+
endif()
49+
if(DEFINED ENV{CPPFLAGS})
50+
set(ENV{CPPFLAGS} "")
51+
message(STATUS "Cleared CPPFLAGS environment variable")
52+
endif()
53+
endif()
54+
endif()
55+
1456
option(BUILD_ZEBIN_INSTALL_DIR "ZE Binary GENX ouput path")
1557
set(ORBLZE_KERNEL_PATH_STRING ${BUILD_ZEBIN_INSTALL_DIR})
1658
if (NOT BUILD_ZEBIN_INSTALL_DIR)
1759
set (ORBLZE_KERNEL_PATH_STRING "/usr/lib/x86_64-linux-gnu")
1860
endif()
19-
set (ORBLZE_VERSION_MAJOR 2023)
20-
set (ORBLZE_VERSION_MINOR 1)
61+
set (ORBLZE_VERSION_MAJOR 2025)
62+
set (ORBLZE_VERSION_MINOR 12)
2163
set (ORBLZE_VERSION_PATCH 1)
2264
set (ORBLZE_VERSION_STRING "${ORBLZE_VERSION_MAJOR}.${ORBLZE_VERSION_MINOR}.${ORBLZE_VERSION_PATCH}")
2365

2466
message(${CMAKE_CURRENT_LIST_DIR})
2567

26-
file(GLOB_RECURSE KERNEL_SRC "src/*_genx.cpp")
2768
file(GLOB_RECURSE HOST_SRC "src/*.cpp" "src/gpu/*.cpp")
2869

29-
foreach(kernel ${KERNEL_SRC})
30-
list(REMOVE_ITEM HOST_SRC "${kernel}")
31-
endforeach()
32-
3370
add_compile_options(-Wpedantic -Werror)
3471

72+
# Handle Intel LLVM compiler specific warnings for SYCL compilation
73+
if(CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM" OR CMAKE_CXX_COMPILER MATCHES ".*icpx.*")
74+
add_compile_options(-Wno-option-ignored)
75+
message(STATUS "Added -Wno-option-ignored for Intel LLVM/SYCL compatibility")
76+
endif()
77+
78+
# Handle ROS Jazzy compatibility
79+
if(DEFINED ENV{ROS_DISTRO})
80+
if($ENV{ROS_DISTRO} STREQUAL "jazzy")
81+
message(STATUS "Detected ROS Jazzy - applying SYCL compatibility fixes")
82+
endif()
83+
endif()
84+
3585
#add_definitions("-Wall -Wextra")
3686

3787
include_directories (
3888
${CMAKE_CURRENT_LIST_DIR}/include
3989
${RUNTIME_INC}
4090
)
4191

42-
find_program(OCLOC ocloc REQUIRED)
43-
find_program(CMC cmc REQUIRED)
44-
4592
if(DEFINED ENV{LD_LIBRARY_PATH})
4693
string(COMPARE EQUAL "$ENV{LD_LIBRARY_PATH}" "" RESULT)
4794
if (NOT RESULT)
4895
string(REPLACE ":" ";" SEARCH_LIB_PATH $ENV{LD_LIBRARY_PATH})
4996
endif()
5097
endif()
5198

52-
find_library(L0_LIB_PATH
53-
NAMES ze_loader
54-
PATHS ${SEARCH_LIB_PATH})
55-
if(NOT L0_LIB_PATH)
56-
message(FATAL_ERROR
57-
"Level Zero loader is not found. "
58-
"You may need to install oneAPI Level Zero loader to fix this issue.")
59-
else()
60-
message(STATUS
61-
"Level Zero loader is found at ${L0_LIB_PATH}")
62-
endif()
6399

64100
if(CMAKE_INCLUDE_PATH)
65101
set(CMAKE_REQUIRED_INCLUDES ${CMAKE_INCLUDE_PATH})
66102
endif()
67103

68-
include(CheckIncludeFileCXX)
69-
check_include_file_cxx(level_zero/ze_api.h LO_CORE_INC_FOUND)
70-
check_include_file_cxx(level_zero/zet_api.h LO_TOOLS_INC_FOUND)
71-
check_include_file_cxx(level_zero/zes_api.h LO_SYSMAN_INC_FOUND)
72-
check_include_file_cxx(level_zero/layers/zel_tracing_api.h LO_LAYERS_INC_FOUND)
73-
if ((NOT LO_CORE_INC_FOUND) OR (NOT LO_TOOLS_INC_FOUND) OR (NOT LO_LAYERS_INC_FOUND) OR (NOT LO_SYSMAN_INC_FOUND))
74-
message(STATUS "Level Zero headers are not found, will be downloaded automatically")
75-
endif()
76104
set(CMAKE_REQUIRED_INCLUDES)
77105

78106
# OpenCV
79107
find_package(OpenCV 4.2 REQUIRED)
80108
include_directories(${OpenCV_INCLUDE_DIRS})
81109

82-
option(BUILD_TARGET_PLATFORM "ZE Binary GENX Target platform")
83-
if (NOT BUILD_TARGET_PLATFORM)
84-
set(GPU gen12lp)
85-
else()
86-
set(GPU "${BUILD_TARGET_PLATFORM}")
87-
endif()
88-
89-
option(BIN "generate kernel Intermediate file" OFF)
110+
add_subdirectory ("${CMAKE_SOURCE_DIR}/src/sycl_utils")
90111

91-
option(TARGET_PLATFORM_LIST "Spirv GENX Target platform list")
92-
if (NOT TARGET_PLATFORM_LIST)
93-
set(MARCHLIST "gen9;gen11lp;gen12lp;mtl;dg2")
94-
else()
95-
string(REPLACE "," ";" MARCHLIST ${TARGET_PLATFORM_LIST})
112+
# Re-apply Intel LLVM flag filtering after dependencies (in case they added flags)
113+
if(CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM" OR CMAKE_CXX_COMPILER MATCHES ".*icpx.*")
114+
message(STATUS "Re-applying Intel LLVM flag filtering after dependencies")
115+
remove_fcf_protection_from_var(CMAKE_CXX_FLAGS)
116+
remove_fcf_protection_from_var(CMAKE_CXX_FLAGS_DEBUG)
117+
remove_fcf_protection_from_var(CMAKE_CXX_FLAGS_RELEASE)
118+
string(APPEND CMAKE_CXX_FLAGS " -Wno-option-ignored")
96119
endif()
97120

98-
foreach(kernel ${KERNEL_SRC})
99-
100-
get_filename_component(kernelfilename ${kernel} NAME_WE)
101-
102-
foreach(genx ${MARCHLIST})
103-
104-
# SPIRV need to match ocloc acronyms
105-
if (genx STREQUAL gen9)
106-
set(oclocacronym gen9)
107-
elseif (genx STREQUAL gen11lp)
108-
set(oclocacronym gen11)
109-
elseif (genx STREQUAL gen12lp)
110-
set(oclocacronym gen12lp)
111-
elseif (genx STREQUAL dg2)
112-
set(oclocacronym xehpg)
113-
elseif (genx STREQUAL mtl)
114-
set(oclocacronym xelpg)
115-
else()
116-
set(oclocacronym genXe)
117-
endif()
118-
119-
list(APPEND KERNEL_SPV "${CMAKE_CURRENT_BINARY_DIR}/${kernelfilename}_${oclocacronym}.spv")
120-
121-
if(oclocacronym STREQUAL genXe)
122-
123-
add_custom_command(
124-
OUTPUT ${kernelfilename}_${oclocacronym}.spv
125-
COMMAND ${CMC} -emit-spirv -binary-format ze -march=gen12lp -o ${kernelfilename}_${oclocacronym}.spv -- ${kernel}
126-
DEPENDS ${kernel}
127-
COMMENT "Generate ${kernel} .spv"
128-
)
129-
130-
message(STATUS "Fat ${kernelfilename} level-zero binary for ALL intel GPU ")
131-
list(APPEND KERNEL_BIN "${CMAKE_CURRENT_BINARY_DIR}/${kernelfilename}.bin")
132-
133-
add_custom_command(
134-
OUTPUT ${kernelfilename}.bin
135-
COMMAND ${OCLOC} compile -spirv_input -file ${kernelfilename}_${oclocacronym}.spv -output ${kernelfilename}.bin -force_stos_opt -device :xe -output_no_suffix
136-
DEPENDS ${kernelfilename}_${oclocacronym}.spv
137-
COMMENT "Generate ${kernel} level-zero binary"
138-
)
139-
140-
else()
141-
142-
add_custom_command(
143-
OUTPUT ${kernelfilename}_${oclocacronym}.spv
144-
COMMAND ${CMC} -emit-spirv -binary-format ze -march=${genx} -o ${kernelfilename}_${oclocacronym}.spv -- ${kernel}
145-
DEPENDS ${kernel}
146-
COMMENT "Generate ${kernel} .spv"
147-
)
148-
149-
if (genx STREQUAL ${GPU})
150-
151-
message(STATUS "Individual ${kernelfilename} level-zero binary for: ${GPU}")
152-
list(APPEND KERNEL_BIN "${CMAKE_CURRENT_BINARY_DIR}/${kernelfilename}.bin")
153-
154-
add_custom_command(
155-
OUTPUT ${kernelfilename}.bin
156-
COMMAND ${OCLOC} compile -spirv_input -file ${kernelfilename}_${oclocacronym}.spv -output ${kernelfilename}.bin -force_stos_opt -device ${oclocacronym} -output_no_suffix
157-
DEPENDS ${kernelfilename}_${oclocacronym}.spv
158-
COMMENT "Generate ${kernel} level-zero binary"
159-
)
160-
161-
endif()
162-
163-
endif()
164-
165-
endforeach()
166-
167-
endforeach()
168-
169121
set(config_h ${CMAKE_SOURCE_DIR}/include/config.h)
170122
configure_file(
171123
cmake/config.h.in
@@ -176,29 +128,31 @@ if (CMAKE_BUILD_TYPE STREQUAL "Debug")
176128
add_definitions(-DDEBUG_LOG=1)
177129
endif()
178130

179-
add_library(${APP} SHARED ${HOST_SRC} ${KERNEL_BIN} ${KERNEL_SPV} )
180-
add_library(${APP_CV} SHARED ${HOST_SRC} ${KERNEL_BIN} )
131+
add_library(${APP} SHARED ${HOST_SRC})
132+
add_library(${APP_CV} SHARED ${HOST_SRC})
181133

182134
target_compile_definitions(${APP} PUBLIC -DOPENCV_FREE)
183135

136+
# Add -Wno-option-ignored for Intel LLVM builds to suppress warnings
137+
if(CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM" OR CMAKE_CXX_COMPILER MATCHES ".*icpx.*")
138+
target_compile_options(${APP} PRIVATE -Wno-option-ignored)
139+
target_compile_options(${APP_CV} PRIVATE -Wno-option-ignored)
140+
endif()
141+
184142
message("Install path ${CMAKE_INSTALL_LIBDIR}")
185143

186-
install(TARGETS ${APP} ${APP_CV}
144+
145+
install(TARGETS ${APP} ${APP_CV} SyclUtils
187146
EXPORT orblzeTargets
188147
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} )
189148

190-
install(FILES ${KERNEL_BIN} DESTINATION ${CMAKE_INSTALL_LIBDIR})
191-
192149
install(DIRECTORY ${CMAKE_SOURCE_DIR}/include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} FILES_MATCHING PATTERN "*.h*" )
193150

194-
if(MSVC)
195-
target_include_directories(${APP} PRIVATE $ENV{CSDK_DIR}\\runtime\\level_zero\\include $ENV{SYCL_BUNDLE_ROOT}\\compiler\\include)
196-
endif()
197-
198-
target_link_libraries(${APP} ${CMAKE_DL_LIBS} ${L0_LIB_PATH})
151+
target_link_libraries(${APP} ${CMAKE_DL_LIBS} SyclUtils)
199152
target_link_libraries(${APP} -lpthread -lstdc++fs)
153+
#target_link_libraries(${APP} ${OpenCV_LIBS})
200154

201-
target_link_libraries(${APP_CV} ${CMAKE_DL_LIBS} ${L0_LIB_PATH})
155+
target_link_libraries(${APP_CV} ${CMAKE_DL_LIBS} SyclUtils)
202156
target_link_libraries(${APP_CV} -lpthread -lstdc++fs)
203157
target_link_libraries(${APP_CV} ${OpenCV_LIBS})
204158

@@ -256,7 +210,7 @@ install(
256210
)
257211

258212
# Configure 'Targets.cmake' for a build tree
259-
export(TARGETS ${APP}
213+
export(TARGETS ${APP} ${APP_CV} SyclUtils
260214
FILE ${PROJECT_BINARY_DIR}/orblzeTargets.cmake
261215
)
262216

@@ -279,3 +233,5 @@ install(
279233
FILES ${config_version_file}
280234
DESTINATION ${INSTALL_CMAKE_DIR} COMPONENT Development
281235
)
236+
237+

0 commit comments

Comments
 (0)