list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../runtimes/cmake/Modules") include(WarningFlags) function(add_sycl_rt_library LIB_TARGET_NAME LIB_OBJ_NAME LIB_OUTPUT_NAME) if (NOT LLVM_ENABLE_PIC) message( FATAL_ERROR "Position-Independent Code generation is required for libsycl shared library" ) endif() cmake_parse_arguments(ARG "" "" "COMPILE_OPTIONS;SOURCES" ${ARGN}) add_library(${LIB_OBJ_NAME} OBJECT ${ARG_SOURCES}) # Common compilation step setup target_compile_definitions(${LIB_OBJ_NAME} PRIVATE $<$:_LIBSYCL_BUILDING_LIBRARY>) cxx_add_warning_flags(${LIB_OBJ_NAME} ${LIBSYCL_ENABLE_WERROR} ${LIBSYCL_ENABLE_PEDANTIC}) target_include_directories( ${LIB_OBJ_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${LIBSYCL_BUILD_INCLUDE_DIR} ) add_library(${LIB_TARGET_NAME} SHARED $) add_dependencies(${LIB_OBJ_NAME} sycl-headers ) set_target_properties(${LIB_TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX) if (CMAKE_SYSTEM_NAME STREQUAL Windows) # Install stripped PDB set(PDB_FILENAME "${LIB_TARGET_NAME}$<$:d>") check_linker_flag(CXX "LINKER:/PDBSTRIPPED:${PDB_FILENAME}.stripped.pdb" LINKER_SUPPORTS_PDBSTRIPPED) if(LINKER_SUPPORTS_PDBSTRIPPED) target_link_options(${LIB_TARGET_NAME} PRIVATE "LINKER:/PDBSTRIPPED:${PDB_FILENAME}.stripped.pdb") install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PDB_FILENAME}.stripped.pdb" DESTINATION ${CMAKE_INSTALL_PREFIX}/bin RENAME "${PDB_FILENAME}.pdb" COMPONENT ${LIB_TARGET_NAME} OPTIONAL) endif() target_compile_options(${LIB_OBJ_NAME} PUBLIC /EHsc) else() target_compile_options(${LIB_OBJ_NAME} PUBLIC -fvisibility=hidden -fvisibility-inlines-hidden) if (UNIX AND NOT APPLE) set(linker_script "${CMAKE_CURRENT_SOURCE_DIR}/ld-version-script.txt") target_link_libraries( ${LIB_TARGET_NAME} PRIVATE "-Wl,--version-script=${linker_script}") set_target_properties(${LIB_TARGET_NAME} PROPERTIES LINK_DEPENDS ${linker_script}) endif() endif() find_package(Threads REQUIRED) target_link_libraries(${LIB_TARGET_NAME} PRIVATE ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} ) set_target_properties(${LIB_TARGET_NAME} PROPERTIES VERSION ${LIBSYCL_VERSION_STRING} SOVERSION ${LIBSYCL_VERSION_STRING}) set_target_properties(${LIB_TARGET_NAME} PROPERTIES OUTPUT_NAME ${LIB_OUTPUT_NAME}) endfunction(add_sycl_rt_library) set(LIBSYCL_SOURCES "platform.cpp" ) set(LIB_NAME "sycl") set(LIB_OUTPUT_NAME "${LIB_NAME}") if (CMAKE_SYSTEM_NAME STREQUAL Windows) if (CMAKE_MSVC_RUNTIME_LIBRARY AND (NOT CMAKE_MSVC_RUNTIME_LIBRARY MATCHES "DLL$")) message(FATAL_ERROR "libsycl requires a DLL version of the MSVC CRT.") endif() if ((NOT CMAKE_MSVC_RUNTIME_LIBRARY AND uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG") OR (CMAKE_MSVC_RUNTIME_LIBRARY STREQUAL "MultiThreadedDebugDLL")) set(LIB_OUTPUT_NAME "${LIB_OUTPUT_NAME}d") endif() endif() add_sycl_rt_library(${LIB_NAME} sycl_object ${LIB_OUTPUT_NAME} SOURCES ${LIBSYCL_SOURCES}) install(TARGETS ${LIBSYCL_RT_LIBS} ARCHIVE DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT libsycl LIBRARY DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT libsycl RUNTIME DESTINATION "bin" COMPONENT libsycl)