Skip to content

Commit 8a2bba7

Browse files
committed
[AdaptiveCpp] Add adaptivecpp
1 parent 86a433b commit 8a2bba7

File tree

4 files changed

+151
-0
lines changed

4 files changed

+151
-0
lines changed

cmake/modules/RootBuildOptions.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ ROOT_BUILD_OPTION(davix ON "Enable support for Davix (HTTP/WebDAV access)")
128128
ROOT_BUILD_OPTION(dcache OFF "Enable support for dCache (requires libdcap from DESY)")
129129
ROOT_BUILD_OPTION(dev OFF "Enable recommended developer compilation flags, reduce exposed includes")
130130
ROOT_BUILD_OPTION(distcc OFF "Enable distcc usage for speeding up builds (ccache is called first if enabled)")
131+
ROOT_BUILD_OPTION(experimental_adaptivecpp OFF "Build AdaptiveCPP for SYCL support")
131132
ROOT_BUILD_OPTION(fcgi OFF "Enable FastCGI support in HTTP server")
132133
ROOT_BUILD_OPTION(fftw3 OFF "Enable support for FFTW3 [GPL]")
133134
ROOT_BUILD_OPTION(fitsio ON "Enable support for reading FITS images")

cmake/modules/SearchInstalledSoftware.cmake

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1643,6 +1643,33 @@ if (vecgeom)
16431643
endif()
16441644
endif()
16451645

1646+
if(experimental_adaptivecpp)
1647+
# Building adaptivecpp requires an internet connection, if we're not side-loading the source directory
1648+
if(NOT DEFINED ADAPTIVECPP_SOURCE_DIR)
1649+
ROOT_CHECK_CONNECTION_AND_DISABLE_OPTION("experimental_adaptivecpp")
1650+
endif()
1651+
include(SetupAdaptiveCpp)
1652+
set(HIPSYCL_NO_FIBERS ON)
1653+
set(WITH_OPENCL_BACKEND OFF)
1654+
set(WITH_LEVEL_ZERO_BACKEND OFF)
1655+
1656+
find_package(AdaptiveCpp REQUIRED)
1657+
if (AdaptiveCpp_FOUND)
1658+
set(sycl ON)
1659+
set(SYCL_COMPILER_FLAGS "-ffast-math ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${_BUILD_TYPE_UPPER}}")
1660+
message(STATUS "SYCL compiler flags: ${SYCL_COMPILER_FLAGS}")
1661+
separate_arguments(SYCL_COMPILER_FLAGS NATIVE_COMMAND ${SYCL_COMPILER_FLAGS})
1662+
message(STATUS "AdaptiveCpp sycl enabled")
1663+
else()
1664+
if(fail-on-missing)
1665+
message(FATAL_ERROR "AdaptiveCpp library not found")
1666+
else()
1667+
message(STATUS "AdaptiveCpp library not found")
1668+
set(sycl OFF CACHE BOOL "Disabled because no SYCL implementation is not found" FORCE)
1669+
endif()
1670+
endif()
1671+
endif()
1672+
16461673
#---Check for protobuf-------------------------------------------------------------------
16471674

16481675
if(tmva-sofie)
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
message(STATUS "Building AdaptiveCpp for SYCL support.")
2+
3+
include(FetchContent)
4+
5+
if(NOT DEFINED ADAPTIVE_CPP_SOURCE_DIR)
6+
FetchContent_Declare(
7+
AdaptiveCpp
8+
GIT_REPOSITORY https://github.com/root-project/AdaptiveCpp.git
9+
GIT_TAG ROOT-acpp-v25.02.0-20250615-01)
10+
FetchContent_GetProperties(AdaptiveCpp)
11+
if(NOT AdaptiveCpp_POPULATED)
12+
FetchContent_Populate(AdaptiveCpp)
13+
endif()
14+
set(ADAPTIVE_CPP_SOURCE_DIR ${adaptivecpp_SOURCE_DIR})
15+
message(STATUS "Fetched AdaptiveCpp source to: ${ADAPTIVE_CPP_SOURCE_DIR}")
16+
else()
17+
message(
18+
STATUS "ADAPTIVE_CPP_SOURCE_DIR already defined: ${ADAPTIVE_CPP_SOURCE_DIR}"
19+
)
20+
endif()
21+
22+
set(LLVM_BINARY_DIR ${CMAKE_BINARY_DIR}/interpreter/llvm-project/llvm)
23+
set(CLANG_EXECUTABLE_PATH ${LLVM_BINARY_DIR}/bin/clang${CMAKE_EXECUTABLE_SUFFIX})
24+
25+
set(ACPP_CLANG
26+
${CLANG_EXECUTABLE_PATH}
27+
CACHE STRING "Clang compiler executable used for compilation." FORCE)
28+
29+
set(ADAPTIVE_CPP_BINARY_DIR ${CMAKE_BINARY_DIR})
30+
message(STATUS "AdaptiveCpp will be built in: ${ADAPTIVE_CPP_BINARY_DIR}")
31+
32+
set(ADAPTIVECPP_INSTALL_CMAKE_DIR
33+
lib/cmake/AdaptiveCpp
34+
CACHE PATH "Install path for CMake config files")
35+
36+
# Set relative paths for install root in the following variables so that
37+
# configure_package_config_file will generate paths relative whatever is the
38+
# future install root
39+
set(ADAPTIVECPP_INSTALL_COMPILER_DIR bin)
40+
set(ACPP_CONFIG_FILE_INSTALL_DIR etc/AdaptiveCpp)
41+
set(ADAPTIVECPP_INSTALL_LAUNCHER_DIR ${ADAPTIVECPP_INSTALL_CMAKE_DIR})
42+
set(ADAPTIVECPP_INSTALL_LAUNCHER_RULE_DIR ${ADAPTIVECPP_INSTALL_CMAKE_DIR})
43+
44+
install(FILES ${ADAPTIVE_CPP_BINARY_DIR}/lib/libacpp-rt.so DESTINATION lib)
45+
install(DIRECTORY ${ADAPTIVE_CPP_BINARY_DIR}/lib/hipSYCL/bitcode/
46+
DESTINATION lib/hipSYCL/bitcode)
47+
install(DIRECTORY ${ADAPTIVE_CPP_BINARY_DIR}/include/AdaptiveCpp/
48+
DESTINATION include/AdaptiveCpp)
49+
50+
file(
51+
COPY ${ADAPTIVE_CPP_SOURCE_DIR}/cmake/syclcc-launcher
52+
DESTINATION ${ADAPTIVE_CPP_BINARY_DIR}/${ADAPTIVECPP_INSTALL_LAUNCHER_DIR})
53+
file(
54+
COPY ${ADAPTIVE_CPP_SOURCE_DIR}/cmake/syclcc-launch.rule.in
55+
DESTINATION ${ADAPTIVE_CPP_BINARY_DIR}/${ADAPTIVECPP_INSTALL_LAUNCHER_RULE_DIR})
56+
57+
list(APPEND CMAKE_PREFIX_PATH ${ADAPTIVE_CPP_BINARY_DIR}/${ADAPTIVECPP_INSTALL_CMAKE_DIR})
58+
message(STATUS "Added ${ADAPTIVE_CPP_BINARY_DIR}/${ADAPTIVECPP_INSTALL_CMAKE_DIR} to CMAKE_PREFIX_PATH.")
59+
60+
install(PROGRAMS ${ADAPTIVE_CPP_BINARY_DIR}/bin/acpp
61+
DESTINATION ${ADAPTIVECPP_INSTALL_COMPILER_DIR})
62+
install(FILES ${ADAPTIVE_CPP_SOURCE_DIR}/cmake/syclcc-launcher
63+
DESTINATION ${ADAPTIVECPP_INSTALL_LAUNCHER_DIR})
64+
install(FILES ${ADAPTIVE_CPP_SOURCE_DIR}/cmake/syclcc-launch.rule.in
65+
DESTINATION ${ADAPTIVECPP_INSTALL_LAUNCHER_RULE_DIR})
66+
67+
file(GLOB CLANG_EXECUTABLES "${LLVM_BINARY_DIR}/bin/clang*")
68+
install(PROGRAMS ${CLANG_EXECUTABLES}
69+
DESTINATION ${ADAPTIVECPP_INSTALL_COMPILER_DIR})
70+
71+
file(GLOB CONFIG_FILES "${ADAPTIVE_CPP_BINARY_DIR}/etc/AdaptiveCpp/*")
72+
install(FILES ${CONFIG_FILES} DESTINATION ${ACPP_CONFIG_FILE_INSTALL_DIR})
73+
74+
# Create imported target AdaptiveCpp::acpp-common
75+
add_library(AdaptiveCpp::acpp-common STATIC IMPORTED)
76+
77+
set_target_properties(AdaptiveCpp::acpp-common PROPERTIES
78+
INTERFACE_INCLUDE_DIRECTORIES "${ADAPTIVE_CPP_BINARY_DIR}/include;${ADAPTIVE_CPP_BINARY_DIR}/include/AdaptiveCpp"
79+
INTERFACE_LINK_LIBRARIES "-Wl,-Bsymbolic-functions;\$<LINK_ONLY:dl>"
80+
)
81+
82+
# Create imported target AdaptiveCpp::acpp-rt
83+
add_library(AdaptiveCpp::acpp-rt SHARED IMPORTED)
84+
85+
set_target_properties(AdaptiveCpp::acpp-rt PROPERTIES
86+
INTERFACE_INCLUDE_DIRECTORIES "${ADAPTIVE_CPP_BINARY_DIR}/include;${ADAPTIVE_CPP_BINARY_DIR}/include/AdaptiveCpp"
87+
INTERFACE_LINK_LIBRARIES "AdaptiveCpp::acpp-common"
88+
)
89+
90+
# Import target "AdaptiveCpp::acpp-common" for configuration "Release"
91+
set_property(TARGET AdaptiveCpp::acpp-common APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
92+
set_target_properties(AdaptiveCpp::acpp-common PROPERTIES
93+
IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
94+
IMPORTED_LOCATION_RELEASE "${ADAPTIVE_CPP_BINARY_DIR}/lib/libacpp-common.a"
95+
)
96+
97+
# Import target "AdaptiveCpp::acpp-rt" for configuration "Release"
98+
set_property(TARGET AdaptiveCpp::acpp-rt APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
99+
set_target_properties(AdaptiveCpp::acpp-rt PROPERTIES
100+
IMPORTED_LOCATION_RELEASE "${ADAPTIVE_CPP_BINARY_DIR}/lib/libacpp-rt.so"
101+
IMPORTED_SONAME_RELEASE "libacpp-rt.so"
102+
)
103+
104+
# Make a config file to make this usable as a CMake Package
105+
# Start by adding the version in a CMake understandable way
106+
include(CMakePackageConfigHelpers)
107+
108+
configure_package_config_file(
109+
${ADAPTIVE_CPP_SOURCE_DIR}/cmake/adaptivecpp-config.cmake.in
110+
${ADAPTIVE_CPP_BINARY_DIR}/lib/cmake/AdaptiveCpp/adaptivecpp-config.cmake
111+
INSTALL_DESTINATION ${ADAPTIVECPP_INSTALL_CMAKE_DIR}
112+
PATH_VARS
113+
ADAPTIVECPP_INSTALL_COMPILER_DIR
114+
ADAPTIVECPP_INSTALL_LAUNCHER_DIR
115+
ADAPTIVECPP_INSTALL_LAUNCHER_RULE_DIR
116+
)

interpreter/CMakeLists.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,13 @@ if(builtin_llvm)
220220

221221
set(LLVM_ENABLE_PROJECTS "clang" CACHE STRING "")
222222

223+
if(experimental_adaptivecpp)
224+
# Register AdaptiveCpp as an external project
225+
set(LLVM_EXTERNAL_PROJECTS "AdaptiveCpp" CACHE STRING "")
226+
set(LLVM_EXTERNAL_ADAPTIVECPP_SOURCE_DIR "${ADAPTIVE_CPP_SOURCE_DIR}" CACHE STRING "")
227+
set(LLVM_ADAPTIVECPP_LINK_INTO_TOOLS ON CACHE BOOL "") # To force-link the plugin into clang
228+
endif()
229+
223230
# Always build LLVM with C++17. It is not necessary to compile with the same
224231
# C++ standard as the rest of ROOT and sometimes it doesn't even work.
225232
set(_cxx_standard ${CMAKE_CXX_STANDARD})

0 commit comments

Comments
 (0)