Skip to content
Draft
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
13 changes: 13 additions & 0 deletions clang/lib/Headers/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -636,6 +636,19 @@ install(
DESTINATION ${header_install_dir}/zos_wrappers
COMPONENT clang-resource-headers)


# Install clang resource headers for the sycl-jit component
install(
FILES ${files} ${generated_files}
DESTINATION ${header_install_dir}
COMPONENT sycl-jit-resources)

install(
FILES ${llvm_offload_wrapper_files}
DESTINATION ${header_install_dir}/llvm_offload_wrappers
COMPONENT sycl-jit-resources)


#############################################################
# Install rules for separate header lists
install(
Expand Down
5 changes: 5 additions & 0 deletions libclc/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -634,6 +634,11 @@ install(DIRECTORY ${LIBCLC_LIBRARY_OUTPUT_INTDIR}
COMPONENT libspirv-builtins
FILES_MATCHING PATTERN "libspirv-*")

install(DIRECTORY ${LIBCLC_LIBRARY_OUTPUT_INTDIR}
DESTINATION lib${LLVM_LIBDIR_SUFFIX}
COMPONENT sycl-jit-resources
FILES_MATCHING PATTERN "*.bc")

if( LIBCLC_GENERATE_REMANGLED_VARIANTS )
install(DIRECTORY ${LIBCLC_LIBRARY_OUTPUT_INTDIR}
DESTINATION lib${LLVM_LIBDIR_SUFFIX}
Expand Down
4 changes: 4 additions & 0 deletions libdevice/cmake/modules/SYCLLibdevice.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,10 @@ function(compile_lib_ext filename)
install( FILES ${devicelib-file}
DESTINATION ${install_dest_${ARG_FILETYPE}}
COMPONENT libsycldevice)

install( FILES ${devicelib-file}
DESTINATION ${install_dest_${ARG_FILETYPE}}
COMPONENT sycl-jit-resources)
endfunction()

# Links together one or more bytecode files
Expand Down
92 changes: 92 additions & 0 deletions sycl-jit/jit-compiler/BuildSyclJitAtInstall.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# BuildSyclJitAtInstall.cmake.in
# This script is EXECUTED AT INSTALL TIME by 'ninja install'

set(INSTALL_ROOT_DIR "${CMAKE_INSTALL_PREFIX}")
set(INSTALL_INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/include")
set(INSTALL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib")
set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin")

# These variables are baked in from configure_file
set(PYTHON_EXE "@PYTHON_EXE_FOR_INSTALL@")
set(GENERATE_SCRIPT "@GENERATE_SCRIPT_PATH@")
set(SCRIPT_SOURCE_DIR "@SCRIPT_SOURCE_DIR_FOR_INSTALL@")
set(COMPILE_FLAGS_LIST "@JIT_INSTALL_COMPILE_FLAGS@")
set(LINK_FLAGS_LIST "@JIT_INSTALL_LINK_FLAGS@")

# We use the *installed* clang++, which must be present.
set(COMPILER_EXE "@COMPILER_PATH_FOR_INSTALL@")

# Define a temporary build directory
set(TEMP_BUILD_DIR "${CMAKE_BINARY_DIR}/sycl-jit-install-build")
file(MAKE_DIRECTORY ${TEMP_BUILD_DIR})
set(RESOURCE_CPP "${TEMP_BUILD_DIR}/resource.cpp")

# Generate resource.cpp using generate.py
if(NOT EXISTS ${PYTHON_EXE})
message(FATAL_ERROR " -- Python executable not found at: ${PYTHON_EXE}")
endif()
if(NOT EXISTS ${GENERATE_SCRIPT})
message(FATAL_ERROR " -- Generate script not found at: ${GENERATE_SCRIPT}")
endif()

# This is the key: We call the *same script* but change
# --toolchain-dir from ${CMAKE_BINARY_DIR} to ${INSTALL_ROOT_DIR}
execute_process(
COMMAND ${PYTHON_EXE} ${GENERATE_SCRIPT}
--toolchain-dir ${INSTALL_ROOT_DIR}
--output ${RESOURCE_CPP}
--prefix "/sycl-jit-toolchain/"
RESULT_VARIABLE GEN_RESULT
OUTPUT_VARIABLE GEN_OUTPUT
ERROR_VARIABLE GEN_OUTPUT
)
if(NOT GEN_RESULT EQUAL 0)
message(FATAL_ERROR " Failed to generate resource.cpp at install time:\n RESULT: ${GEN_RESULT}\n OUTPUT: ${GEN_OUTPUT}")
endif()

# Compile and link the new, clean sycl-jit.so
set(JIT_SOURCES "@JIT_SOURCES_STRING_LIST@")

# Add our newly generated *clean* resource.cpp to the list
list(APPEND JIT_SOURCES ${RESOURCE_CPP})
set(OUTPUT_FILE "${INSTALL_LIB_DIR}/libsycl-jit.so")

message(STATUS " Compiling and linking ${OUTPUT_FILE}...")
if(NOT EXISTS ${COMPILER_EXE})
message(FATAL_ERROR " -- clang++ not found at expected install path: ${COMPILER_EXE}")
endif()

# Build include paths list
set(INCLUDE_FLAGS_LIST "")
list(APPEND INCLUDE_FLAGS_LIST "-I${INSTALL_INCLUDE_DIR}")
list(APPEND INCLUDE_FLAGS_LIST "-I${INSTALL_INCLUDE_DIR}/LLVMSPIRVLib")
list(APPEND INCLUDE_FLAGS_LIST "-I@LLVM_INCLUDE_DIR_FOR_INSTALL@")
list(APPEND INCLUDE_FLAGS_LIST "-I@SPIRV_INCLUDE_DIRS_FOR_INSTALL@")
list(APPEND INCLUDE_FLAGS_LIST "-I@CLANG_SOURCE_INCLUDE_DIR_FOR_INSTALL@")
list(APPEND INCLUDE_FLAGS_LIST "-I@CLANG_BUILD_INCLUDE_DIR_FOR_INSTALL@")
list(APPEND INCLUDE_FLAGS_LIST "-I@LLVM_BUILD_INCLUDE_DIR_FOR_INSTALL@") # Config
list(APPEND INCLUDE_FLAGS_LIST "-I@SYCL_JIT_PASSES_DIR_FOR_INSTALL@")
list(APPEND INCLUDE_FLAGS_LIST "-I@SYCL_JIT_LOCAL_INCLUDE_DIR_FOR_INSTALL@")
list(APPEND INCLUDE_FLAGS_LIST "-I@SYCL_JIT_LOCAL_LIB_DIR_FOR_INSTALL@")

set(JIT_LOCAL_SOURCE_DIRS "@JIT_INCLUDE_DIRS_STRING_LIST@")
foreach(include_dir ${JIT_LOCAL_SOURCE_DIRS})
list(APPEND INCLUDE_FLAGS_LIST "-I${include_dir}")
endforeach()


execute_process(
COMMAND ${COMPILER_EXE}
${COMPILE_FLAGS_LIST}
${INCLUDE_FLAGS_LIST} # <-- Use the new full list
-o ${OUTPUT_FILE}
${JIT_SOURCES}
${LINK_FLAGS_LIST}
RESULT_VARIABLE COMPILE_RESULT
OUTPUT_VARIABLE COMPILE_OUTPUT
ERROR_VARIABLE COMPILE_OUTPUT
)

if(NOT COMPILE_RESULT EQUAL 0)
message(FATAL_ERROR " Failed to build sycl-jit.so at install time:\n${COMPILE_OUTPUT}")
endif()
114 changes: 102 additions & 12 deletions sycl-jit/jit-compiler/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,9 @@ set(SYCL_JIT_VIRTUAL_TOOLCHAIN_ROOT "/sycl-jit-toolchain/")
endif()

set(SYCL_JIT_RESOURCE_DEPS
sycl-headers # include/sycl
clang # lib/clang/N/include
sycl-headers # include/sycl
clang # lib/clang/N/include
opencl-resource-headers # fixes build race. not actually used.
${CMAKE_CURRENT_SOURCE_DIR}/utils/generate.py)

if ("libclc" IN_LIST LLVM_ENABLE_PROJECTS)
Expand Down Expand Up @@ -70,17 +71,21 @@ add_custom_command(
${CMAKE_CURRENT_SOURCE_DIR}/include/Resource.h
)

set(SYCL_JIT_SOURCES_LIST
lib/translation/JITContext.cpp
lib/translation/SPIRVLLVMTranslation.cpp
lib/translation/Translation.cpp
lib/materializer/MaterializerPipeline.cpp
lib/materializer/Materializer.cpp
lib/rtc/DeviceCompilation.cpp
lib/rtc/ESIMD.cpp
lib/rtc/RTC.cpp
lib/helper/ConfigHelper.cpp
lib/helper/ErrorHelper.cpp
)

add_llvm_library(sycl-jit
lib/translation/JITContext.cpp
lib/translation/SPIRVLLVMTranslation.cpp
lib/translation/Translation.cpp
lib/materializer/MaterializerPipeline.cpp
lib/materializer/Materializer.cpp
lib/rtc/DeviceCompilation.cpp
lib/rtc/ESIMD.cpp
lib/rtc/RTC.cpp
lib/helper/ConfigHelper.cpp
lib/helper/ErrorHelper.cpp
${SYCL_JIT_SOURCES_LIST}

${SYCL_JIT_RESOURCE_OBJ}

Expand Down Expand Up @@ -120,6 +125,8 @@ add_llvm_library(sycl-jit
clangSerialization
)



if(WIN32)
target_link_libraries(sycl-jit PRIVATE Shlwapi)
endif()
Expand Down Expand Up @@ -170,3 +177,86 @@ if(NOT MSVC AND NOT APPLE)
sycl-jit PRIVATE "-Wl,--version-script=${linker_script}")
set_target_properties(sycl-jit PROPERTIES LINK_DEPENDS ${linker_script})
endif()


# These variables for the install script
set(PYTHON_EXE_FOR_INSTALL "${Python3_EXECUTABLE}")
set(GENERATE_SCRIPT_PATH "${CMAKE_CURRENT_LIST_DIR}/utils/generate.py")
set(SCRIPT_SOURCE_DIR_FOR_INSTALL "${CMAKE_CURRENT_LIST_DIR}")
set(COMPILER_PATH_FOR_INSTALL "${CMAKE_INSTALL_PREFIX}/bin/clang++")
set(LLVM_INCLUDE_DIR_FOR_INSTALL ${LLVM_MAIN_INCLUDE_DIR})
set(SPIRV_INCLUDE_DIRS_FOR_INSTALL ${LLVM_SPIRV_INCLUDE_DIRS})
set(CLANG_SOURCE_INCLUDE_DIR_FOR_INSTALL "${LLVM_EXTERNAL_CLANG_SOURCE_DIR}/include")
set(CLANG_BUILD_INCLUDE_DIR_FOR_INSTALL "${CMAKE_BINARY_DIR}/tools/clang/include")
set(SYCL_JIT_PASSES_DIR_FOR_INSTALL "${CMAKE_CURRENT_LIST_DIR}/../passes")
set(SYCL_JIT_LOCAL_INCLUDE_DIR_FOR_INSTALL "${CMAKE_CURRENT_SOURCE_DIR}/include")
set(SYCL_JIT_LOCAL_LIB_DIR_FOR_INSTALL "${CMAKE_CURRENT_SOURCE_DIR}/lib")
set(LLVM_BUILD_INCLUDE_DIR_FOR_INSTALL "${LLVM_BINARY_DIR}/include")
set(JIT_INSTALL_COMPILE_FLAGS "-std=c++17;-fPIC;-Wno-c23-extensions")
set(JIT_INSTALL_LINK_FLAGS "-shared") # Add other link flags

# Create a new list for the install script
set(JIT_SOURCES_FOR_INSTALL "")
foreach(src_file ${SYCL_JIT_SOURCES_LIST})
list(APPEND JIT_SOURCES_FOR_INSTALL "${CMAKE_CURRENT_LIST_DIR}/${src_file}")
endforeach()

# Create a list of local include paths based on the source list
set(JIT_INCLUDE_DIRS_FOR_INSTALL "")
foreach(src_file ${SYCL_JIT_SOURCES_LIST})
get_filename_component(src_dir "${CMAKE_CURRENT_LIST_DIR}/${src_file}" DIRECTORY)
list(APPEND JIT_INCLUDE_DIRS_FOR_INSTALL ${src_dir})
endforeach()

list(APPEND JIT_INCLUDE_DIRS_FOR_INSTALL "${CMAKE_CURRENT_LIST_DIR}/include")

# Remove duplicates and pass to the script
list(REMOVE_DUPLICATES JIT_INCLUDE_DIRS_FOR_INSTALL)
set(JIT_INCLUDE_DIRS_STRING_LIST "${JIT_INCLUDE_DIRS_FOR_INSTALL}")
set(JIT_SOURCES_STRING_LIST "${JIT_SOURCES_FOR_INSTALL}")

set(INSTALL_SCRIPT_TEMPLATE "${CMAKE_CURRENT_LIST_DIR}/BuildSyclJitAtInstall.cmake.in")
set(INSTALL_SCRIPT_GENERATED "${CMAKE_CURRENT_BINARY_DIR}/BuildSyclJitAtInstall.cmake")

# Use configure_file to pass the variables
configure_file(
${INSTALL_SCRIPT_TEMPLATE}
${INSTALL_SCRIPT_GENERATED}
@ONLY
)

install(SCRIPT "${INSTALL_SCRIPT_GENERATED}" COMPONENT sycl-jit)
set(CPACK_COMPONENT_SYCL_JIT_DEPENDS
"sycl-jit-resources"
# From LINK_COMPONENTS
"BitReader"
"BitWriter"
"Core"
"Support"
"Option"
"Analysis"
"IPO"
"TransformUtils"
"Passes"
"IRReader"
"Linker"
"ScalarOpts"
"InstCombine"
"Target"
"TargetParser"
"MC"
"SYCLLowerIR"
"SYCLPostLink"
"SPIRVLib"
${LLVM_TARGETS_TO_BUILD}
# From LINK_LIBS
"clangBasic"
"clangDriver"
"clangFrontend"
"clangCodeGen"
"clangTooling"
"clangSerialization"
# Also add the main header component
"LLVMHeaders"
"clangHeaders"
)
11 changes: 11 additions & 0 deletions sycl/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -297,6 +297,7 @@ add_custom_command(
COMMAND ${CMAKE_COMMAND} -E copy ${UR_HEADERS_TO_COPY} ${SYCL_INCLUDE_BUILD_DIR}
COMMENT "Copying SYCL headers ...")


# Copy SYCL headers from source to install directory
install(DIRECTORY "${sycl_inc_dir}/sycl" DESTINATION ${SYCL_INCLUDE_DIR} COMPONENT sycl-headers)
install(DIRECTORY "${sycl_inc_dir}/CL" DESTINATION ${SYCL_INCLUDE_DIR}/ COMPONENT sycl-headers)
Expand All @@ -310,6 +311,16 @@ install(FILES "${UNIFIED_RUNTIME_INCLUDE_DIR}/ur_api_funcs.def" DESTINATION ${SY
install(FILES "${UNIFIED_RUNTIME_INCLUDE_DIR}/ur_print.hpp" DESTINATION ${SYCL_INCLUDE_DIR}
COMPONENT sycl-headers)

# Also install SYCL headers for the sycl-jit component
install(DIRECTORY "${sycl_inc_dir}/sycl" DESTINATION ${SYCL_INCLUDE_DIR} COMPONENT sycl-jit-resources)
install(DIRECTORY "${sycl_inc_dir}/CL" DESTINATION ${SYCL_INCLUDE_DIR}/ COMPONENT sycl-jit-resources)
install(DIRECTORY "${sycl_inc_dir}/std" DESTINATION ${SYCL_INCLUDE_DIR} COMPONENT sycl-jit-resources)
install(DIRECTORY "${sycl_inc_dir}/syclcompat" DESTINATION ${SYCL_INCLUDE_DIR} COMPONENT sycl-jit-resources)
install(FILES "${sycl_inc_dir}/syclcompat.hpp" DESTINATION ${SYCL_INCLUDE_DIR} COMPONENT sycl-jit-resources)
install(FILES "${UNIFIED_RUNTIME_INCLUDE_DIR}/ur_api.h" DESTINATION ${SYCL_INCLUDE_DIR} COMPONENT sycl-jit-resources)
install(FILES "${UNIFIED_RUNTIME_INCLUDE_DIR}/ur_api_funcs.def" DESTINATION ${SYCL_INCLUDE_DIR} COMPONENT sycl-jit-resources)
install(FILES "${UNIFIED_RUNTIME_INCLUDE_DIR}/ur_print.hpp" DESTINATION ${SYCL_INCLUDE_DIR} COMPONENT sycl-jit-resources)

if (WIN32)
set(SYCL_RT_LIBS sycl${SYCL_MAJOR_VERSION})
if(SYCL_ENABLE_MAJOR_RELEASE_PREVIEW_LIB)
Expand Down
2 changes: 0 additions & 2 deletions sycl/source/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -211,8 +211,6 @@ function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME)
add_dependencies(${LIB_NAME} sycl-jit)
add_dependencies(${LIB_OBJ_NAME} sycl-jit)
target_include_directories(${LIB_OBJ_NAME} PRIVATE ${SYCL_JIT_INCLUDE_DIRS})
set_property(GLOBAL APPEND PROPERTY SYCL_TOOLCHAIN_INSTALL_COMPONENTS
sycl-jit)
target_compile_definitions(${LIB_NAME} PRIVATE SYCL_EXT_JIT_ENABLE)
target_compile_definitions(${LIB_OBJ_NAME} PRIVATE SYCL_EXT_JIT_ENABLE)
endif(SYCL_ENABLE_EXTENSION_JIT)
Expand Down
Loading