1- # SPDX-License-Identifier: Apache-2.0
21# Copyright (C) 2025 Intel Corporation
2+ #
3+ # SPDX-License-Identifier: Apache-2.0
4+
35cmake_minimum_required (VERSION 3.10)
46
57set (CMAKE_CXX_STANDARD 17)
@@ -11,161 +13,111 @@ project(orblze CXX)
1113set (APP "gpu_orb_ocvfree" )
1214set (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+
1456option (BUILD_ZEBIN_INSTALL_DIR "ZE Binary GENX ouput path" )
1557set (ORBLZE_KERNEL_PATH_STRING ${BUILD_ZEBIN_INSTALL_DIR} )
1658if (NOT BUILD_ZEBIN_INSTALL_DIR)
1759 set (ORBLZE_KERNEL_PATH_STRING "/usr/lib/x86_64-linux-gnu" )
1860endif ()
19- set (ORBLZE_VERSION_MAJOR 2023 )
20- set (ORBLZE_VERSION_MINOR 1 )
61+ set (ORBLZE_VERSION_MAJOR 2025 )
62+ set (ORBLZE_VERSION_MINOR 12 )
2163set (ORBLZE_VERSION_PATCH 1)
2264set (ORBLZE_VERSION_STRING "${ORBLZE_VERSION_MAJOR} .${ORBLZE_VERSION_MINOR} .${ORBLZE_VERSION_PATCH} " )
2365
2466message (${CMAKE_CURRENT_LIST_DIR} )
2567
26- file (GLOB_RECURSE KERNEL_SRC "src/*_genx.cpp" )
2768file (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-
3370add_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
3787include_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-
4592if (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 ()
5097endif ()
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
64100if (CMAKE_INCLUDE_PATH )
65101 set (CMAKE_REQUIRED_INCLUDES ${CMAKE_INCLUDE_PATH} )
66102endif ()
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 ()
76104set (CMAKE_REQUIRED_INCLUDES)
77105
78106# OpenCV
79107find_package (OpenCV 4.2 REQUIRED)
80108include_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" )
96119endif ()
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-
169121set (config_h ${CMAKE_SOURCE_DIR} /include /config.h)
170122configure_file (
171123 cmake/config.h.in
@@ -176,29 +128,31 @@ if (CMAKE_BUILD_TYPE STREQUAL "Debug")
176128 add_definitions (-DDEBUG_LOG=1)
177129endif ()
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
182134target_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+
184142message ("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-
192149install (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)
199152target_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 )
202156target_link_libraries (${APP_CV} -lpthread -lstdc++fs)
203157target_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