blob: 206b85681cb84d3fcb5fe379aeff874344d7b40c [file] [log] [blame]
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
$<$<STREQUAL:${CMAKE_SYSTEM_NAME},Windows>:_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
$<TARGET_OBJECTS:${LIB_OBJ_NAME}>)
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}$<$<CONFIG:Debug>: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)