From 26a20f386c34ae9c628fb84f5f548fe56b8d81ae Mon Sep 17 00:00:00 2001 From: Chris Perkins Date: Mon, 6 Oct 2025 17:43:03 -0700 Subject: [PATCH 1/9] use opencl-resource-headers from clang headers as dependency rather than all-of-clang to avoid race condition that causes generate to race with building/renaming --- sycl-jit/jit-compiler/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sycl-jit/jit-compiler/CMakeLists.txt b/sycl-jit/jit-compiler/CMakeLists.txt index d0f63e27cda63..d6b3850ae4ed1 100644 --- a/sycl-jit/jit-compiler/CMakeLists.txt +++ b/sycl-jit/jit-compiler/CMakeLists.txt @@ -10,8 +10,8 @@ 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 + opencl-resource-headers # lib/clang/N/include ${CMAKE_CURRENT_SOURCE_DIR}/utils/generate.py) if ("libclc" IN_LIST LLVM_ENABLE_PROJECTS) From 42c6e60fd2c609b6cf19e8ec2e1b8a904877938a Mon Sep 17 00:00:00 2001 From: Chris Perkins Date: Fri, 17 Oct 2025 10:32:35 -0700 Subject: [PATCH 2/9] interim. needs formatting --- clang/lib/Headers/CMakeLists.txt | 24 +++++++++++++++++++++ libclc/CMakeLists.txt | 5 +++++ libdevice/cmake/modules/SYCLLibdevice.cmake | 4 ++++ sycl-jit/jit-compiler/CMakeLists.txt | 15 +++++++++++-- sycl/CMakeLists.txt | 11 ++++++++++ 5 files changed, 57 insertions(+), 2 deletions(-) diff --git a/clang/lib/Headers/CMakeLists.txt b/clang/lib/Headers/CMakeLists.txt index dd52498bbef4c..47267f7200105 100644 --- a/clang/lib/Headers/CMakeLists.txt +++ b/clang/lib/Headers/CMakeLists.txt @@ -636,6 +636,30 @@ 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) + +# CP - TODO - remove these next two +install( + FILES ${cuda_wrapper_files} + DESTINATION ${header_install_dir}/cuda_wrappers + COMPONENT sycl-jit-resources) + +install( + FILES ${openmp_wrapper_files} + DESTINATION ${header_install_dir}/openmp_wrappers + 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( diff --git a/libclc/CMakeLists.txt b/libclc/CMakeLists.txt index 8458f4f242348..2818df8022114 100644 --- a/libclc/CMakeLists.txt +++ b/libclc/CMakeLists.txt @@ -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} diff --git a/libdevice/cmake/modules/SYCLLibdevice.cmake b/libdevice/cmake/modules/SYCLLibdevice.cmake index 8b7eaa3a723a4..ccbd62b80cb78 100644 --- a/libdevice/cmake/modules/SYCLLibdevice.cmake +++ b/libdevice/cmake/modules/SYCLLibdevice.cmake @@ -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 diff --git a/sycl-jit/jit-compiler/CMakeLists.txt b/sycl-jit/jit-compiler/CMakeLists.txt index d6b3850ae4ed1..5fccc681cac28 100644 --- a/sycl-jit/jit-compiler/CMakeLists.txt +++ b/sycl-jit/jit-compiler/CMakeLists.txt @@ -25,9 +25,18 @@ endif() add_custom_command( OUTPUT ${SYCL_JIT_RESOURCE_CPP} - COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/utils/generate.py --toolchain-dir ${CMAKE_BINARY_DIR} --output ${SYCL_JIT_RESOURCE_CPP} --prefix ${SYCL_JIT_VIRTUAL_TOOLCHAIN_ROOT} + # COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/utils/generate.py --toolchain-dir ${CMAKE_BINARY_DIR} --output ${SYCL_JIT_RESOURCE_CPP} --prefix ${SYCL_JIT_VIRTUAL_TOOLCHAIN_ROOT} + COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/utils/generate.py + --toolchain-dir ${CMAKE_INSTALL_PREFIX} + --output ${SYCL_JIT_RESOURCE_CPP} + --prefix ${SYCL_JIT_VIRTUAL_TOOLCHAIN_ROOT} DEPENDS - ${SYCL_JIT_RESOURCE_DEPS} + # ${SYCL_JIT_RESOURCE_DEPS} + # This fixes the race condition by forcing the partial install to run first. + install-sycl-jit-resources + ${CMAKE_CURRENT_SOURCE_DIR}/utils/generate.py + COMMENT "Generating sycl-jit resources by globbing the install directory..." + VERBATIM ) # We use C23/C++26's `#embed` to implement this resource creation, and "current" @@ -120,6 +129,8 @@ add_llvm_library(sycl-jit clangSerialization ) +add_dependencies(sycl-jit install-sycl-jit-resources) + if(WIN32) target_link_libraries(sycl-jit PRIVATE Shlwapi) endif() diff --git a/sycl/CMakeLists.txt b/sycl/CMakeLists.txt index ae3fa0335ab17..34d1c204f6dac 100644 --- a/sycl/CMakeLists.txt +++ b/sycl/CMakeLists.txt @@ -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) @@ -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) From 576066891403ccc10663b48286abe93387907ee3 Mon Sep 17 00:00:00 2001 From: Chris Perkins Date: Mon, 20 Oct 2025 16:47:33 -0700 Subject: [PATCH 3/9] configures, builds, installs, but sycl-jit needs to be built separately --- sycl-jit/jit-compiler/CMakeLists.txt | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/sycl-jit/jit-compiler/CMakeLists.txt b/sycl-jit/jit-compiler/CMakeLists.txt index 5fccc681cac28..6ed8997d1f776 100644 --- a/sycl-jit/jit-compiler/CMakeLists.txt +++ b/sycl-jit/jit-compiler/CMakeLists.txt @@ -25,18 +25,10 @@ endif() add_custom_command( OUTPUT ${SYCL_JIT_RESOURCE_CPP} - # COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/utils/generate.py --toolchain-dir ${CMAKE_BINARY_DIR} --output ${SYCL_JIT_RESOURCE_CPP} --prefix ${SYCL_JIT_VIRTUAL_TOOLCHAIN_ROOT} - COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/utils/generate.py - --toolchain-dir ${CMAKE_INSTALL_PREFIX} - --output ${SYCL_JIT_RESOURCE_CPP} - --prefix ${SYCL_JIT_VIRTUAL_TOOLCHAIN_ROOT} + COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/utils/generate.py --toolchain-dir ${CMAKE_BINARY_DIR} --output ${SYCL_JIT_RESOURCE_CPP} --prefix ${SYCL_JIT_VIRTUAL_TOOLCHAIN_ROOT} + DEPENDS - # ${SYCL_JIT_RESOURCE_DEPS} - # This fixes the race condition by forcing the partial install to run first. - install-sycl-jit-resources - ${CMAKE_CURRENT_SOURCE_DIR}/utils/generate.py - COMMENT "Generating sycl-jit resources by globbing the install directory..." - VERBATIM + ${SYCL_JIT_RESOURCE_DEPS} ) # We use C23/C++26's `#embed` to implement this resource creation, and "current" @@ -129,7 +121,7 @@ add_llvm_library(sycl-jit clangSerialization ) -add_dependencies(sycl-jit install-sycl-jit-resources) + if(WIN32) target_link_libraries(sycl-jit PRIVATE Shlwapi) From 811c52dc47c5a19debdcc93a38f19c3ea7e2e7e0 Mon Sep 17 00:00:00 2001 From: Chris Perkins Date: Tue, 21 Oct 2025 11:29:07 -0700 Subject: [PATCH 4/9] not working, beginning to thrash. configures but build now tries to deploy/install and things go amiss --- .../BuildSyclJitAtInstall.cmake.in | 96 +++++++++++++++++++ sycl-jit/jit-compiler/CMakeLists.txt | 39 ++++++++ 2 files changed, 135 insertions(+) create mode 100644 sycl-jit/jit-compiler/BuildSyclJitAtInstall.cmake.in diff --git a/sycl-jit/jit-compiler/BuildSyclJitAtInstall.cmake.in b/sycl-jit/jit-compiler/BuildSyclJitAtInstall.cmake.in new file mode 100644 index 0000000000000..7caa9dbb87c60 --- /dev/null +++ b/sycl-jit/jit-compiler/BuildSyclJitAtInstall.cmake.in @@ -0,0 +1,96 @@ +# This script is EXECUTED AT INSTALL TIME by 'ninja install' + +# --- 1. Manually install our 'sycl-jit-resources' dependencies --- +message(STATUS " Checking and installing 'sycl-jit-resources' dependencies...") +set(MAIN_INSTALL_SCRIPT "${CMAKE_BINARY_DIR}/cmake_install.cmake") +execute_process( + COMMAND ${CMAKE_COMMAND} + -DCMAKE_INSTALL_COMPONENT=sycl-jit-resources + -P ${MAIN_INSTALL_SCRIPT} + RESULT_VARIABLE DEP_INSTALL_RESULT +) +if(NOT DEP_INSTALL_RESULT EQUAL 0) + message(FATAL_ERROR " Failed to manually install 'sycl-jit-resources' dependencies.") +endif() +message(STATUS " Dependencies are now installed.") + +# --- 2. Define paths --- +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") + +# --- 3. Generate resource.cpp using generate.py --- +message(STATUS " Generating ${RESOURCE_CPP} using clean headers from ${INSTALL_ROOT_DIR}...") +message(STATUS " -- Python: ${PYTHON_EXE}") +message(STATUS " -- Script: ${GENERATE_SCRIPT}") + +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/" # Copied from the original command + 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() + +# --- 4. Compile and link the new, clean sycl-jit.so --- +set(JIT_SOURCES "${SCRIPT_SOURCE_DIR}/sycl-jit.cpp" "${RESOURCE_CPP}") +set(OUTPUT_FILE "${INSTALL_LIB_DIR}/libsycl-jit.so") # Match the name in the install log + +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() + +execute_process( + COMMAND ${COMPILER_EXE} + ${COMPILE_FLAGS_LIST} + -I${INSTALL_INCLUDE_DIR} + -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() + +# --- 5. Manually install the other .so links --- +# The log shows "libsycl-jit.so.22.0git" and "libsycl-jit.so" +# Our command created the second one. We need to create the first one +# and the symlink. (This logic may need adjusting). +# Let's just create the main file for now and see if it passes. +# We can add symlinking later if needed. + +message(STATUS "Clean sycl-jit for installation built successfully.") \ No newline at end of file diff --git a/sycl-jit/jit-compiler/CMakeLists.txt b/sycl-jit/jit-compiler/CMakeLists.txt index 6ed8997d1f776..3880d42eefd4f 100644 --- a/sycl-jit/jit-compiler/CMakeLists.txt +++ b/sycl-jit/jit-compiler/CMakeLists.txt @@ -173,3 +173,42 @@ 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() + +# --- In sycl-jit/jit-compiler/CMakeLists.txt --- + +# --- Add these variables for the install script --- +# This variable is set by FindPython.cmake +set(PYTHON_EXE_FOR_INSTALL "${Python3_EXECUTABLE}") + +# This is the path to the generate.py script itself +set(GENERATE_SCRIPT_PATH "${CMAKE_CURRENT_LIST_DIR}/utils/generate.py") + +# This is the path to the sycl-jit.cpp file +set(SCRIPT_SOURCE_DIR_FOR_INSTALL "${CMAKE_CURRENT_LIST_DIR}") + +# This variable points to the *build* directory, where clang++ exists +set(COMPILER_PATH_FOR_INSTALL "${LLVM_BINARY_DIR}/bin/clang++") + +# These are the flags for the *new* compile at install time +set(JIT_INSTALL_COMPILE_FLAGS "-std=c++17;-fPIC") # Add other necessary flags +set(JIT_INSTALL_LINK_FLAGS "-shared") # Add other link flags + +# --- Configure the template file --- +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 +) + +# --- Add the install rules (these should be the only ones) --- +install(SCRIPT "${INSTALL_SCRIPT_GENERATED}" COMPONENT sycl-jit) +set(CPACK_COMPONENT_SYCL_JIT_DEPENDS "sycl-jit-resources") + +# --- Add debug messages --- +message(STATUS "sycl-jit: Python exe for install: ${PYTHON_EXE_FOR_INSTALL}") +message(STATUS "sycl-jit: Generate script for install: ${GENERATE_SCRIPT_PATH}") +message(STATUS "sycl-jit: Compiler path for install: ${COMPILER_PATH_FOR_INSTALL}") From 59104e63a5a53d8bb7a033fe2a41198a2e72d875 Mon Sep 17 00:00:00 2001 From: Chris Perkins Date: Tue, 21 Oct 2025 12:17:04 -0700 Subject: [PATCH 5/9] configures, builds, tests, and ALMOST installs --- .../jit-compiler/BuildSyclJitAtInstall.cmake.in | 14 -------------- sycl-jit/jit-compiler/CMakeLists.txt | 4 ++-- sycl/source/CMakeLists.txt | 3 +-- 3 files changed, 3 insertions(+), 18 deletions(-) diff --git a/sycl-jit/jit-compiler/BuildSyclJitAtInstall.cmake.in b/sycl-jit/jit-compiler/BuildSyclJitAtInstall.cmake.in index 7caa9dbb87c60..0bcb062761df3 100644 --- a/sycl-jit/jit-compiler/BuildSyclJitAtInstall.cmake.in +++ b/sycl-jit/jit-compiler/BuildSyclJitAtInstall.cmake.in @@ -1,19 +1,5 @@ # This script is EXECUTED AT INSTALL TIME by 'ninja install' -# --- 1. Manually install our 'sycl-jit-resources' dependencies --- -message(STATUS " Checking and installing 'sycl-jit-resources' dependencies...") -set(MAIN_INSTALL_SCRIPT "${CMAKE_BINARY_DIR}/cmake_install.cmake") -execute_process( - COMMAND ${CMAKE_COMMAND} - -DCMAKE_INSTALL_COMPONENT=sycl-jit-resources - -P ${MAIN_INSTALL_SCRIPT} - RESULT_VARIABLE DEP_INSTALL_RESULT -) -if(NOT DEP_INSTALL_RESULT EQUAL 0) - message(FATAL_ERROR " Failed to manually install 'sycl-jit-resources' dependencies.") -endif() -message(STATUS " Dependencies are now installed.") - # --- 2. Define paths --- set(INSTALL_ROOT_DIR "${CMAKE_INSTALL_PREFIX}") set(INSTALL_INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/include") diff --git a/sycl-jit/jit-compiler/CMakeLists.txt b/sycl-jit/jit-compiler/CMakeLists.txt index 3880d42eefd4f..ef34be1c75d23 100644 --- a/sycl-jit/jit-compiler/CMakeLists.txt +++ b/sycl-jit/jit-compiler/CMakeLists.txt @@ -187,7 +187,7 @@ set(GENERATE_SCRIPT_PATH "${CMAKE_CURRENT_LIST_DIR}/utils/generate.py") set(SCRIPT_SOURCE_DIR_FOR_INSTALL "${CMAKE_CURRENT_LIST_DIR}") # This variable points to the *build* directory, where clang++ exists -set(COMPILER_PATH_FOR_INSTALL "${LLVM_BINARY_DIR}/bin/clang++") +set(COMPILER_PATH_FOR_INSTALL "${CMAKE_INSTALL_PREFIX}/bin/clang++") # These are the flags for the *new* compile at install time set(JIT_INSTALL_COMPILE_FLAGS "-std=c++17;-fPIC") # Add other necessary flags @@ -206,7 +206,7 @@ configure_file( # --- Add the install rules (these should be the only ones) --- install(SCRIPT "${INSTALL_SCRIPT_GENERATED}" COMPONENT sycl-jit) -set(CPACK_COMPONENT_SYCL_JIT_DEPENDS "sycl-jit-resources") +set(CPACK_COMPONENT_SYCL_JIT_DEPENDS "sycl-jit-resources;clang") # --- Add debug messages --- message(STATUS "sycl-jit: Python exe for install: ${PYTHON_EXE_FOR_INSTALL}") diff --git a/sycl/source/CMakeLists.txt b/sycl/source/CMakeLists.txt index 4159303f87d19..95f5c1a548249 100644 --- a/sycl/source/CMakeLists.txt +++ b/sycl/source/CMakeLists.txt @@ -211,8 +211,7 @@ 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) + # 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) From ad16e9aa18b135718731ed0d60e543773046212c Mon Sep 17 00:00:00 2001 From: Chris Perkins Date: Tue, 21 Oct 2025 13:16:28 -0700 Subject: [PATCH 6/9] working better, but stumbling on headers --- .../BuildSyclJitAtInstall.cmake.in | 6 +++- sycl-jit/jit-compiler/CMakeLists.txt | 32 +++++++++++++------ 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/sycl-jit/jit-compiler/BuildSyclJitAtInstall.cmake.in b/sycl-jit/jit-compiler/BuildSyclJitAtInstall.cmake.in index 0bcb062761df3..e7cd49335edf4 100644 --- a/sycl-jit/jit-compiler/BuildSyclJitAtInstall.cmake.in +++ b/sycl-jit/jit-compiler/BuildSyclJitAtInstall.cmake.in @@ -49,7 +49,11 @@ if(NOT GEN_RESULT EQUAL 0) endif() # --- 4. Compile and link the new, clean sycl-jit.so --- -set(JIT_SOURCES "${SCRIPT_SOURCE_DIR}/sycl-jit.cpp" "${RESOURCE_CPP}") +# This is the full list of .cpp files with absolute paths +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") # Match the name in the install log message(STATUS " Compiling and linking ${OUTPUT_FILE}...") diff --git a/sycl-jit/jit-compiler/CMakeLists.txt b/sycl-jit/jit-compiler/CMakeLists.txt index ef34be1c75d23..d02a6ba19343b 100644 --- a/sycl-jit/jit-compiler/CMakeLists.txt +++ b/sycl-jit/jit-compiler/CMakeLists.txt @@ -71,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} @@ -193,6 +197,14 @@ set(COMPILER_PATH_FOR_INSTALL "${CMAKE_INSTALL_PREFIX}/bin/clang++") set(JIT_INSTALL_COMPILE_FLAGS "-std=c++17;-fPIC") # Add other necessary flags set(JIT_INSTALL_LINK_FLAGS "-shared") # Add other link flags +# Create a new list with absolute paths 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() + +set(JIT_SOURCES_STRING_LIST "${JIT_SOURCES_FOR_INSTALL}") + # --- Configure the template file --- set(INSTALL_SCRIPT_TEMPLATE "${CMAKE_CURRENT_LIST_DIR}/BuildSyclJitAtInstall.cmake.in") set(INSTALL_SCRIPT_GENERATED "${CMAKE_CURRENT_BINARY_DIR}/BuildSyclJitAtInstall.cmake") From c07e6843cebd2e953f4cbecca35390b7fcf851e6 Mon Sep 17 00:00:00 2001 From: Chris Perkins Date: Tue, 21 Oct 2025 18:01:20 -0700 Subject: [PATCH 7/9] finally working. nightmare --- .../BuildSyclJitAtInstall.cmake.in | 35 +++++- sycl-jit/jit-compiler/CMakeLists.txt | 102 +++++++++++++++++- 2 files changed, 134 insertions(+), 3 deletions(-) diff --git a/sycl-jit/jit-compiler/BuildSyclJitAtInstall.cmake.in b/sycl-jit/jit-compiler/BuildSyclJitAtInstall.cmake.in index e7cd49335edf4..4b52776369f21 100644 --- a/sycl-jit/jit-compiler/BuildSyclJitAtInstall.cmake.in +++ b/sycl-jit/jit-compiler/BuildSyclJitAtInstall.cmake.in @@ -1,3 +1,4 @@ +# BuildSyclJitAtInstall.cmake.in # This script is EXECUTED AT INSTALL TIME by 'ninja install' # --- 2. Define paths --- @@ -61,10 +62,41 @@ if(NOT EXISTS ${COMPILER_EXE}) message(FATAL_ERROR " -- clang++ not found at expected install path: ${COMPILER_EXE}") endif() +# --- Build the full list of include paths --- +set(INCLUDE_FLAGS_LIST "") + +# 1. Add the main install directory +list(APPEND INCLUDE_FLAGS_LIST "-I${INSTALL_INCLUDE_DIR}") + +# 1a. Add the specific subdir for LLVMSPIRVOpts.h +list(APPEND INCLUDE_FLAGS_LIST "-I${INSTALL_INCLUDE_DIR}/LLVMSPIRVLib") + +# 2. Add the captured LLVM, SPIRV, and Clang include directories from CMakeLists.txt +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@") + +# 3. Add the captured sycl-jit local include and lib directories from CMakeLists.txt +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@") + +# 4. Add all the specific local source directories (like lib/translation) +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() + +message(STATUS " -- Include Flags being passed to clang++:") +message(STATUS " ${INCLUDE_FLAGS_LIST}") + +# --- Run the compile command --- execute_process( COMMAND ${COMPILER_EXE} ${COMPILE_FLAGS_LIST} - -I${INSTALL_INCLUDE_DIR} + ${INCLUDE_FLAGS_LIST} # <-- Use the new full list -o ${OUTPUT_FILE} ${JIT_SOURCES} ${LINK_FLAGS_LIST} @@ -72,6 +104,7 @@ execute_process( 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() diff --git a/sycl-jit/jit-compiler/CMakeLists.txt b/sycl-jit/jit-compiler/CMakeLists.txt index d02a6ba19343b..d13103afcc663 100644 --- a/sycl-jit/jit-compiler/CMakeLists.txt +++ b/sycl-jit/jit-compiler/CMakeLists.txt @@ -193,8 +193,44 @@ set(SCRIPT_SOURCE_DIR_FOR_INSTALL "${CMAKE_CURRENT_LIST_DIR}") # This variable points to the *build* directory, where clang++ exists set(COMPILER_PATH_FOR_INSTALL "${CMAKE_INSTALL_PREFIX}/bin/clang++") +# Main LLVM source include (for llvm/IR/Module.h etc.) +#set(LLVM_MAIN_INCLUDE_DIR "${LLVM_MAIN_SRC_DIR}/include") +# Main LLVM build include (for generated headers like Options.h) +#set(LLVM_MAIN_BINARY_DIR "${LLVM_MAIN_BUILD_DIR}/include") + +#--- + +set(LLVM_INCLUDE_DIR_FOR_INSTALL "") +if(DEFINED LLVM_MAIN_INCLUDE_DIR) + list(APPEND LLVM_INCLUDE_DIR_FOR_INSTALL ${LLVM_MAIN_INCLUDE_DIR}) +endif() + +set(SPIRV_INCLUDE_DIRS_FOR_INSTALL "") +if(DEFINED LLVM_SPIRV_INCLUDE_DIRS) + list(APPEND SPIRV_INCLUDE_DIRS_FOR_INSTALL ${LLVM_SPIRV_INCLUDE_DIRS}) +endif() + +set(CLANG_SOURCE_INCLUDE_DIR_FOR_INSTALL "") +if(DEFINED LLVM_EXTERNAL_CLANG_SOURCE_DIR) + set(CLANG_SOURCE_INCLUDE_DIR_FOR_INSTALL "${LLVM_EXTERNAL_CLANG_SOURCE_DIR}/include") +endif() + +set(CLANG_BUILD_INCLUDE_DIR_FOR_INSTALL "") +if(DEFINED CMAKE_BINARY_DIR) + set(CLANG_BUILD_INCLUDE_DIR_FOR_INSTALL "${CMAKE_BINARY_DIR}/tools/clang/include") +endif() + +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") + +# Main LLVM build include (for generated headers like abi-breaking.h) +set(LLVM_BUILD_INCLUDE_DIR_FOR_INSTALL "${LLVM_BINARY_DIR}/include") + +#--- + # These are the flags for the *new* compile at install time -set(JIT_INSTALL_COMPILE_FLAGS "-std=c++17;-fPIC") # Add other necessary flags +set(JIT_INSTALL_COMPILE_FLAGS "-std=c++17;-fPIC;-Wno-c23-extensions") # Add other necessary flags set(JIT_INSTALL_LINK_FLAGS "-shared") # Add other link flags # Create a new list with absolute paths for the install script @@ -203,6 +239,20 @@ 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() + +# Add the main 'include' dir for headers like Resource.h +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}") # --- Configure the template file --- @@ -218,9 +268,57 @@ configure_file( # --- Add the install rules (these should be the only ones) --- install(SCRIPT "${INSTALL_SCRIPT_GENERATED}" COMPONENT sycl-jit) -set(CPACK_COMPONENT_SYCL_JIT_DEPENDS "sycl-jit-resources;clang") +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" + ) # --- Add debug messages --- message(STATUS "sycl-jit: Python exe for install: ${PYTHON_EXE_FOR_INSTALL}") message(STATUS "sycl-jit: Generate script for install: ${GENERATE_SCRIPT_PATH}") message(STATUS "sycl-jit: Compiler path for install: ${COMPILER_PATH_FOR_INSTALL}") + +message(STATUS "DEBUG Install Script Paths:") +message(STATUS " CMAKE_INSTALL_PREFIX = ${CMAKE_INSTALL_PREFIX}") + +message(STATUS " LLVM includes = ${LLVM_INCLUDE_DIR_FOR_INSTALL}") +message(STATUS " SPIRV includes = ${SPIRV_INCLUDE_DIRS_FOR_INSTALL}") +message(STATUS " Clang Source includes = ${CLANG_SOURCE_INCLUDE_DIR_FOR_INSTALL}") +message(STATUS " Clang Build includes = ${CLANG_BUILD_INCLUDE_DIR_FOR_INSTALL}") +message(STATUS " SYCL JIT Local include = ${SYCL_JIT_LOCAL_INCLUDE_DIR_FOR_INSTALL}") +message(STATUS " SYCL JIT Local lib = ${SYCL_JIT_LOCAL_LIB_DIR_FOR_INSTALL}") +message(STATUS " LLVM_BUILD_INCLUDE_DIR_FOR_INSTALL = ${LLVM_BUILD_INCLUDE_DIR_FOR_INSTALL}") + +message(STATUS " INSTALL_INCLUDE_DIR/LLVMSPIRVLib = ${CMAKE_INSTALL_PREFIX}/include/LLVMSPIRVLib") +message(STATUS " SYCL JIT Passes dir = ${SYCL_JIT_PASSES_DIR_FOR_INSTALL}") +message(STATUS " Local includes = ${JIT_INCLUDE_DIRS_STRING_LIST}") \ No newline at end of file From 83be25194beb59db648b8882657d0ae3221f7649 Mon Sep 17 00:00:00 2001 From: Chris Perkins Date: Tue, 21 Oct 2025 18:35:14 -0700 Subject: [PATCH 8/9] tidy --- .../BuildSyclJitAtInstall.cmake.in | 37 ++------- sycl-jit/jit-compiler/CMakeLists.txt | 80 +++---------------- 2 files changed, 14 insertions(+), 103 deletions(-) diff --git a/sycl-jit/jit-compiler/BuildSyclJitAtInstall.cmake.in b/sycl-jit/jit-compiler/BuildSyclJitAtInstall.cmake.in index 4b52776369f21..359b10e07aec9 100644 --- a/sycl-jit/jit-compiler/BuildSyclJitAtInstall.cmake.in +++ b/sycl-jit/jit-compiler/BuildSyclJitAtInstall.cmake.in @@ -1,7 +1,6 @@ # BuildSyclJitAtInstall.cmake.in # This script is EXECUTED AT INSTALL TIME by 'ninja install' -# --- 2. Define paths --- set(INSTALL_ROOT_DIR "${CMAKE_INSTALL_PREFIX}") set(INSTALL_INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/include") set(INSTALL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") @@ -22,11 +21,7 @@ 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") -# --- 3. Generate resource.cpp using generate.py --- -message(STATUS " Generating ${RESOURCE_CPP} using clean headers from ${INSTALL_ROOT_DIR}...") -message(STATUS " -- Python: ${PYTHON_EXE}") -message(STATUS " -- Script: ${GENERATE_SCRIPT}") - +# Generate resource.cpp using generate.py if(NOT EXISTS ${PYTHON_EXE}) message(FATAL_ERROR " -- Python executable not found at: ${PYTHON_EXE}") endif() @@ -40,7 +35,7 @@ execute_process( COMMAND ${PYTHON_EXE} ${GENERATE_SCRIPT} --toolchain-dir ${INSTALL_ROOT_DIR} --output ${RESOURCE_CPP} - --prefix "/sycl-jit-toolchain/" # Copied from the original command + --prefix "/sycl-jit-toolchain/" RESULT_VARIABLE GEN_RESULT OUTPUT_VARIABLE GEN_OUTPUT ERROR_VARIABLE GEN_OUTPUT @@ -49,50 +44,37 @@ 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() -# --- 4. Compile and link the new, clean sycl-jit.so --- -# This is the full list of .cpp files with absolute paths +# 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") # Match the name in the install log +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 the full list of include paths --- +# Build include paths list set(INCLUDE_FLAGS_LIST "") - -# 1. Add the main install directory list(APPEND INCLUDE_FLAGS_LIST "-I${INSTALL_INCLUDE_DIR}") - -# 1a. Add the specific subdir for LLVMSPIRVOpts.h list(APPEND INCLUDE_FLAGS_LIST "-I${INSTALL_INCLUDE_DIR}/LLVMSPIRVLib") - -# 2. Add the captured LLVM, SPIRV, and Clang include directories from CMakeLists.txt 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@") - -# 3. Add the captured sycl-jit local include and lib directories from CMakeLists.txt 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@") -# 4. Add all the specific local source directories (like lib/translation) 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() -message(STATUS " -- Include Flags being passed to clang++:") -message(STATUS " ${INCLUDE_FLAGS_LIST}") -# --- Run the compile command --- execute_process( COMMAND ${COMPILER_EXE} ${COMPILE_FLAGS_LIST} @@ -108,12 +90,3 @@ execute_process( if(NOT COMPILE_RESULT EQUAL 0) message(FATAL_ERROR " Failed to build sycl-jit.so at install time:\n${COMPILE_OUTPUT}") endif() - -# --- 5. Manually install the other .so links --- -# The log shows "libsycl-jit.so.22.0git" and "libsycl-jit.so" -# Our command created the second one. We need to create the first one -# and the symlink. (This logic may need adjusting). -# Let's just create the main file for now and see if it passes. -# We can add symlinking later if needed. - -message(STATUS "Clean sycl-jit for installation built successfully.") \ No newline at end of file diff --git a/sycl-jit/jit-compiler/CMakeLists.txt b/sycl-jit/jit-compiler/CMakeLists.txt index d13103afcc663..20c6ea57f418d 100644 --- a/sycl-jit/jit-compiler/CMakeLists.txt +++ b/sycl-jit/jit-compiler/CMakeLists.txt @@ -11,7 +11,8 @@ endif() set(SYCL_JIT_RESOURCE_DEPS sycl-headers # include/sycl - opencl-resource-headers # lib/clang/N/include + 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) @@ -26,7 +27,6 @@ endif() add_custom_command( OUTPUT ${SYCL_JIT_RESOURCE_CPP} COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/utils/generate.py --toolchain-dir ${CMAKE_BINARY_DIR} --output ${SYCL_JIT_RESOURCE_CPP} --prefix ${SYCL_JIT_VIRTUAL_TOOLCHAIN_ROOT} - DEPENDS ${SYCL_JIT_RESOURCE_DEPS} ) @@ -178,62 +178,24 @@ if(NOT MSVC AND NOT APPLE) set_target_properties(sycl-jit PROPERTIES LINK_DEPENDS ${linker_script}) endif() -# --- In sycl-jit/jit-compiler/CMakeLists.txt --- -# --- Add these variables for the install script --- -# This variable is set by FindPython.cmake +# These variables for the install script set(PYTHON_EXE_FOR_INSTALL "${Python3_EXECUTABLE}") - -# This is the path to the generate.py script itself set(GENERATE_SCRIPT_PATH "${CMAKE_CURRENT_LIST_DIR}/utils/generate.py") - -# This is the path to the sycl-jit.cpp file set(SCRIPT_SOURCE_DIR_FOR_INSTALL "${CMAKE_CURRENT_LIST_DIR}") - -# This variable points to the *build* directory, where clang++ exists set(COMPILER_PATH_FOR_INSTALL "${CMAKE_INSTALL_PREFIX}/bin/clang++") - -# Main LLVM source include (for llvm/IR/Module.h etc.) -#set(LLVM_MAIN_INCLUDE_DIR "${LLVM_MAIN_SRC_DIR}/include") -# Main LLVM build include (for generated headers like Options.h) -#set(LLVM_MAIN_BINARY_DIR "${LLVM_MAIN_BUILD_DIR}/include") - -#--- - -set(LLVM_INCLUDE_DIR_FOR_INSTALL "") -if(DEFINED LLVM_MAIN_INCLUDE_DIR) - list(APPEND LLVM_INCLUDE_DIR_FOR_INSTALL ${LLVM_MAIN_INCLUDE_DIR}) -endif() - -set(SPIRV_INCLUDE_DIRS_FOR_INSTALL "") -if(DEFINED LLVM_SPIRV_INCLUDE_DIRS) - list(APPEND SPIRV_INCLUDE_DIRS_FOR_INSTALL ${LLVM_SPIRV_INCLUDE_DIRS}) -endif() - -set(CLANG_SOURCE_INCLUDE_DIR_FOR_INSTALL "") -if(DEFINED LLVM_EXTERNAL_CLANG_SOURCE_DIR) - set(CLANG_SOURCE_INCLUDE_DIR_FOR_INSTALL "${LLVM_EXTERNAL_CLANG_SOURCE_DIR}/include") -endif() - -set(CLANG_BUILD_INCLUDE_DIR_FOR_INSTALL "") -if(DEFINED CMAKE_BINARY_DIR) - set(CLANG_BUILD_INCLUDE_DIR_FOR_INSTALL "${CMAKE_BINARY_DIR}/tools/clang/include") -endif() - +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") - -# Main LLVM build include (for generated headers like abi-breaking.h) set(LLVM_BUILD_INCLUDE_DIR_FOR_INSTALL "${LLVM_BINARY_DIR}/include") - -#--- - -# These are the flags for the *new* compile at install time -set(JIT_INSTALL_COMPILE_FLAGS "-std=c++17;-fPIC;-Wno-c23-extensions") # Add other necessary flags +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 with absolute paths for the install script +# 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}") @@ -246,16 +208,13 @@ foreach(src_file ${SYCL_JIT_SOURCES_LIST}) list(APPEND JIT_INCLUDE_DIRS_FOR_INSTALL ${src_dir}) endforeach() -# Add the main 'include' dir for headers like Resource.h 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}") -# --- Configure the template file --- set(INSTALL_SCRIPT_TEMPLATE "${CMAKE_CURRENT_LIST_DIR}/BuildSyclJitAtInstall.cmake.in") set(INSTALL_SCRIPT_GENERATED "${CMAKE_CURRENT_BINARY_DIR}/BuildSyclJitAtInstall.cmake") @@ -266,7 +225,6 @@ configure_file( @ONLY ) -# --- Add the install rules (these should be the only ones) --- install(SCRIPT "${INSTALL_SCRIPT_GENERATED}" COMPONENT sycl-jit) set(CPACK_COMPONENT_SYCL_JIT_DEPENDS "sycl-jit-resources" @@ -302,23 +260,3 @@ set(CPACK_COMPONENT_SYCL_JIT_DEPENDS "LLVMHeaders" "clangHeaders" ) - -# --- Add debug messages --- -message(STATUS "sycl-jit: Python exe for install: ${PYTHON_EXE_FOR_INSTALL}") -message(STATUS "sycl-jit: Generate script for install: ${GENERATE_SCRIPT_PATH}") -message(STATUS "sycl-jit: Compiler path for install: ${COMPILER_PATH_FOR_INSTALL}") - -message(STATUS "DEBUG Install Script Paths:") -message(STATUS " CMAKE_INSTALL_PREFIX = ${CMAKE_INSTALL_PREFIX}") - -message(STATUS " LLVM includes = ${LLVM_INCLUDE_DIR_FOR_INSTALL}") -message(STATUS " SPIRV includes = ${SPIRV_INCLUDE_DIRS_FOR_INSTALL}") -message(STATUS " Clang Source includes = ${CLANG_SOURCE_INCLUDE_DIR_FOR_INSTALL}") -message(STATUS " Clang Build includes = ${CLANG_BUILD_INCLUDE_DIR_FOR_INSTALL}") -message(STATUS " SYCL JIT Local include = ${SYCL_JIT_LOCAL_INCLUDE_DIR_FOR_INSTALL}") -message(STATUS " SYCL JIT Local lib = ${SYCL_JIT_LOCAL_LIB_DIR_FOR_INSTALL}") -message(STATUS " LLVM_BUILD_INCLUDE_DIR_FOR_INSTALL = ${LLVM_BUILD_INCLUDE_DIR_FOR_INSTALL}") - -message(STATUS " INSTALL_INCLUDE_DIR/LLVMSPIRVLib = ${CMAKE_INSTALL_PREFIX}/include/LLVMSPIRVLib") -message(STATUS " SYCL JIT Passes dir = ${SYCL_JIT_PASSES_DIR_FOR_INSTALL}") -message(STATUS " Local includes = ${JIT_INCLUDE_DIRS_STRING_LIST}") \ No newline at end of file From e8058f90f3d3ddd65e678e6d1ed9f7f2ddd4fd5e Mon Sep 17 00:00:00 2001 From: Chris Perkins Date: Tue, 21 Oct 2025 18:56:40 -0700 Subject: [PATCH 9/9] last cleanup --- clang/lib/Headers/CMakeLists.txt | 11 ----------- sycl/source/CMakeLists.txt | 1 - 2 files changed, 12 deletions(-) diff --git a/clang/lib/Headers/CMakeLists.txt b/clang/lib/Headers/CMakeLists.txt index 47267f7200105..25f67220557b7 100644 --- a/clang/lib/Headers/CMakeLists.txt +++ b/clang/lib/Headers/CMakeLists.txt @@ -643,17 +643,6 @@ install( DESTINATION ${header_install_dir} COMPONENT sycl-jit-resources) -# CP - TODO - remove these next two -install( - FILES ${cuda_wrapper_files} - DESTINATION ${header_install_dir}/cuda_wrappers - COMPONENT sycl-jit-resources) - -install( - FILES ${openmp_wrapper_files} - DESTINATION ${header_install_dir}/openmp_wrappers - COMPONENT sycl-jit-resources) - install( FILES ${llvm_offload_wrapper_files} DESTINATION ${header_install_dir}/llvm_offload_wrappers diff --git a/sycl/source/CMakeLists.txt b/sycl/source/CMakeLists.txt index 95f5c1a548249..ce0e8aa82fc59 100644 --- a/sycl/source/CMakeLists.txt +++ b/sycl/source/CMakeLists.txt @@ -211,7 +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)