diff --git a/buildbot/configure.py b/buildbot/configure.py index 0b2a464ceb36d..c602221a991f5 100644 --- a/buildbot/configure.py +++ b/buildbot/configure.py @@ -251,16 +251,9 @@ def do_configure(args, passthrough_args): cmake_cmd.append(llvm_dir) if args.use_libcxx: - if not (args.libcxx_include and args.libcxx_library): - sys.exit( - "Please specify include and library path of libc++ when building sycl " - "runtime with it" - ) cmake_cmd.extend( [ - "-DSYCL_USE_LIBCXX=ON", - "-DSYCL_LIBCXX_INCLUDE_PATH={}".format(args.libcxx_include), - "-DSYCL_LIBCXX_LIBRARY_PATH={}".format(args.libcxx_library), + "-DLLVM_ENABLE_LIBCXX=ON", ] ) @@ -383,15 +376,7 @@ def main(): help="Additional CMake option not configured via script parameters", ) parser.add_argument("--cmake-gen", default="Ninja", help="CMake generator") - parser.add_argument( - "--use-libcxx", action="store_true", help="build sycl runtime with libcxx" - ) - parser.add_argument( - "--libcxx-include", metavar="LIBCXX_INCLUDE_PATH", help="libcxx include path" - ) - parser.add_argument( - "--libcxx-library", metavar="LIBCXX_LIBRARY_PATH", help="libcxx library path" - ) + parser.add_argument("--use-libcxx", action="store_true", help="build with libcxx") parser.add_argument( "--use-lld", action="store_true", help="Use LLD linker for build" ) diff --git a/libdevice/cmake/modules/SYCLLibdevice.cmake b/libdevice/cmake/modules/SYCLLibdevice.cmake index 11ac0448fcf05..747717de66166 100644 --- a/libdevice/cmake/modules/SYCLLibdevice.cmake +++ b/libdevice/cmake/modules/SYCLLibdevice.cmake @@ -55,9 +55,17 @@ set(compile_opts set(SYCL_LIBDEVICE_GCC_TOOLCHAIN "" CACHE PATH "Path to GCC installation") +set(SYCL_LIBDEVICE_CXX_FLAGS "" CACHE STRING "C++ compiler flags for SYCL libdevice") if (NOT SYCL_LIBDEVICE_GCC_TOOLCHAIN STREQUAL "") list(APPEND compile_opts "--gcc-install-dir=${SYCL_LIBDEVICE_GCC_TOOLCHAIN}") endif() +if(NOT SYCL_LIBDEVICE_CXX_FLAGS STREQUAL "") + separate_arguments(SYCL_LIBDEVICE_CXX_FLAGS NATIVE_COMMAND ${SYCL_LIBDEVICE_CXX_FLAGS}) + list(APPEND compile_opts ${SYCL_LIBDEVICE_CXX_FLAGS}) +endif() +if(LLVM_LIBCXX_USED) + list(APPEND compile_opts "-stdlib=libc++") +endif() if (WIN32) list(APPEND compile_opts -D_ALLOW_RUNTIME_LIBRARY_MISMATCH) @@ -644,6 +652,10 @@ if (NOT SYCL_LIBDEVICE_GCC_TOOLCHAIN STREQUAL "") list(APPEND imf_host_cxx_flags "--gcc-install-dir=${SYCL_LIBDEVICE_GCC_TOOLCHAIN}") endif() +if(LLVM_LIBCXX_USED) + list(APPEND imf_host_cxx_flags "-stdlib=libc++") +endif() + macro(mangle_name str output) string(STRIP "${str}" strippedStr) string(REGEX REPLACE "^/" "" strippedStr "${strippedStr}") diff --git a/sycl/CMakeLists.txt b/sycl/CMakeLists.txt index cd6daaaa89446..a02ff64ae6ec8 100644 --- a/sycl/CMakeLists.txt +++ b/sycl/CMakeLists.txt @@ -303,37 +303,18 @@ endif() # This function allows building multiple libraries with the same options. # Currently used by add_sycl_library and add_sycl_rt_library. -# Currently handles linking with libcxx support and gcc workaround +# Currently handles a gcc workaround function( add_common_options LIB_NAME) - if (SYCL_USE_LIBCXX) - if ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") OR - (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")) - if ((NOT (DEFINED SYCL_LIBCXX_INCLUDE_PATH)) OR (NOT (DEFINED SYCL_LIBCXX_LIBRARY_PATH))) - message(FATAL_ERROR "When building with libc++ SYCL_LIBCXX_INCLUDE_PATHS and" - "SYCL_LIBCXX_LIBRARY_PATH should be set") - endif() - target_link_libraries(${LIB_NAME} PRIVATE "-L${SYCL_LIBCXX_LIBRARY_PATH}" -Wl,-rpath,${SYCL_LIBCXX_LIBRARY_PATH} -nodefaultlibs -lc++ -lc++abi -lm -lc -lgcc_s -lgcc) - target_compile_options(${LIB_NAME} PRIVATE -nostdinc++) - target_include_directories(${LIB_NAME} PRIVATE "${SYCL_LIBCXX_INCLUDE_PATH}") - if (ARGC EQUAL 2) - target_compile_options(${ARGV1} PRIVATE -nostdinc++) - target_include_directories(${ARGV1} PRIVATE "${SYCL_LIBCXX_INCLUDE_PATH}") - endif() - else() - message(FATAL_ERROR "Build with libc++ is not yet supported for this compiler") - endif() - else() # Workaround for bug in GCC version 5 and higher. # More information https://bugs.launchpad.net/ubuntu/+source/gcc-5/+bug/1568899 if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.0) target_link_libraries(${ARGV0} PRIVATE gcc_s gcc) endif() - endif() endfunction(add_common_options) if (LLVM_ENABLE_ASSERTIONS AND NOT SYCL_DISABLE_STL_ASSERTIONS AND NOT WIN32) - if(SYCL_USE_LIBCXX) + if(LLVM_LIBCXX_USED) add_definitions(-D_LIBCPP_DEBUG=1) set(SYCL_CLANG_EXTRA_FLAGS "${SYCL_CLANG_EXTRA_FLAGS} -D_LIBCPP_DEBUG=1") else() diff --git a/sycl/cmake/modules/AddSYCLExecutable.cmake b/sycl/cmake/modules/AddSYCLExecutable.cmake index 4aa3ffbbf5119..3cb636771e848 100644 --- a/sycl/cmake/modules/AddSYCLExecutable.cmake +++ b/sycl/cmake/modules/AddSYCLExecutable.cmake @@ -20,7 +20,7 @@ macro(add_sycl_executable ARG_TARGET_NAME) endforeach() if (LLVM_ENABLE_ASSERTIONS AND NOT SYCL_DISABLE_STL_ASSERTIONS) - if(SYCL_USE_LIBCXX) + if(LLVM_ENABLE_LIBCXX) set(_SYCL_EXTRA_FLAGS -D_LIBCPP_DEBUG=1) else() set(_SYCL_EXTRA_FLAGS -D_GLIBCXX_ASSERTIONS=1) diff --git a/sycl/doc/GetStartedGuide.md b/sycl/doc/GetStartedGuide.md index e90bd6e8cbb9f..e5eb7b154f6d1 100644 --- a/sycl/doc/GetStartedGuide.md +++ b/sycl/doc/GetStartedGuide.md @@ -150,23 +150,19 @@ needed at the moment. ### Build DPC++ toolchain with libc++ library There is experimental support for building and linking DPC++ runtime with libc++ -library instead of libstdc++. To enable it the following CMake options should be +library instead of libstdc++. To enable it the following CMake option should be used. **Linux**: ```sh --DSYCL_USE_LIBCXX=ON \ --DSYCL_LIBCXX_INCLUDE_PATH= \ --DSYCL_LIBCXX_LIBRARY_PATH= +-DLLVM_ENABLE_LIBCXX=ON ``` You can also use configure script to enable: ```sh -python %DPCPP_HOME%\llvm\buildbot\configure.py --use-libcxx \ ---libcxx-include \ ---libcxx-library +python %DPCPP_HOME%\llvm\buildbot\configure.py --use-libcxx python %DPCPP_HOME%\llvm\buildbot\compile.py ``` diff --git a/sycl/source/builtins/common_functions.cpp b/sycl/source/builtins/common_functions.cpp index 770a4d9bd6db6..fb27b77ef47b0 100644 --- a/sycl/source/builtins/common_functions.cpp +++ b/sycl/source/builtins/common_functions.cpp @@ -34,7 +34,7 @@ BUILTIN_COMMON(ONE_ARG, radians, BUILTIN_COMMON(ONE_ARG, sign, [](auto x) -> decltype(x) { using T = decltype(x); - if (std::isnan(x)) + if (std::isnan(sycl::detail::cast_if_host_half(x))) return T(0.0); if (x > 0) return T(1.0); diff --git a/sycl/test/lit.site.cfg.py.in b/sycl/test/lit.site.cfg.py.in index cc9043f71bf3e..249fdd165f512 100644 --- a/sycl/test/lit.site.cfg.py.in +++ b/sycl/test/lit.site.cfg.py.in @@ -26,7 +26,7 @@ config.test_include_path = "@TEST_INCLUDE_PATH@" config.llvm_enable_projects = "@LLVM_ENABLE_PROJECTS@" config.sycl_threads_lib = '@SYCL_THREADS_LIB@' -config.sycl_use_libcxx = '@SYCL_USE_LIBCXX@' +config.sycl_use_libcxx = '@LLVM_LIBCXX_USEDX@' config.extra_environment = lit_config.params.get("extra_environment", "@LIT_EXTRA_ENVIRONMENT@") config.cuda = '@SYCL_BUILD_BACKEND_CUDA@' config.hip = '@SYCL_BUILD_BACKEND_HIP@' diff --git a/unified-runtime/source/loader/CMakeLists.txt b/unified-runtime/source/loader/CMakeLists.txt index a36ff4f6988a7..15dc3127d3d0a 100644 --- a/unified-runtime/source/loader/CMakeLists.txt +++ b/unified-runtime/source/loader/CMakeLists.txt @@ -211,21 +211,10 @@ if(UR_ENABLE_SANITIZER) # In in-tree build, if LLVM is built with libc++, we also need to build # symbolizer.cpp with libc++ abi and link libc++ in. if(NOT UR_STANDALONE_BUILD AND LLVM_LIBCXX_USED) - execute_process( - COMMAND ${CMAKE_CXX_COMPILER} --print-file-name=libc++.a - OUTPUT_VARIABLE LIBCXX_PATH - OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process( - COMMAND ${CMAKE_CXX_COMPILER} --print-file-name=libc++abi.a - OUTPUT_VARIABLE LIBCXX_ABI_PATH - OUTPUT_STRIP_TRAILING_WHITESPACE) set_property(SOURCE ${symbolizer_sources} APPEND_STRING PROPERTY COMPILE_FLAGS " -stdlib=libc++ ") - if(NOT EXISTS ${LIBCXX_PATH} OR NOT EXISTS ${LIBCXX_ABI_PATH}) - message(FATAL_ERROR "libc++ is required but can't find the libraries") - endif() # Link with gcc_s fisrt to avoid some symbols resolve to libc++/libc++abi/libunwind's one target_link_libraries(ur_loader PRIVATE gcc_s ${LIBCXX_PATH} ${LIBCXX_ABI_PATH}) endif() diff --git a/unified-runtime/source/loader/layers/sanitizer/msan/msan_libdevice.hpp b/unified-runtime/source/loader/layers/sanitizer/msan/msan_libdevice.hpp index 575655fe99af6..d57d0c8553446 100644 --- a/unified-runtime/source/loader/layers/sanitizer/msan/msan_libdevice.hpp +++ b/unified-runtime/source/loader/layers/sanitizer/msan/msan_libdevice.hpp @@ -14,6 +14,7 @@ #pragma once #include "sanitizer_common/sanitizer_libdevice.hpp" +#include #if !defined(__SPIR__) && !defined(__SPIRV__) namespace ur_sanitizer_layer { diff --git a/xpti/CMakeLists.txt b/xpti/CMakeLists.txt index 6433e39c94c70..1cf74b98a5386 100644 --- a/xpti/CMakeLists.txt +++ b/xpti/CMakeLists.txt @@ -57,18 +57,6 @@ if (MSVC) set(CMAKE_CXX_FLAGS_DEBUG "") endif() -if (SYCL_USE_LIBCXX) - if ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") OR - (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")) - if ((NOT (DEFINED SYCL_LIBCXX_INCLUDE_PATH)) OR (NOT (DEFINED SYCL_LIBCXX_LIBRARY_PATH))) - message(FATAL_ERROR "When building with libc++ SYCL_LIBCXX_INCLUDE_PATHS and" - "SYCL_LIBCXX_LIBRARY_PATH should be set") - endif() - set(CMAKE_CXX_FLAGS "-nostdinc++ -I ${SYCL_LIBCXX_INCLUDE_PATH} ${CMAKE_CXX_FLAGS}") - else() - message(FATAL_ERROR "Build with libc++ is not yet supported for this compiler") - endif() -endif() set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/lib/${CMAKE_BUILD_TYPE}) set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}) set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}) diff --git a/xptifw/CMakeLists.txt b/xptifw/CMakeLists.txt index d860705b03a9c..00a9c71ba2892 100644 --- a/xptifw/CMakeLists.txt +++ b/xptifw/CMakeLists.txt @@ -41,19 +41,6 @@ endif() if(MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc") endif() -if (SYCL_USE_LIBCXX) - if ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") OR - (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")) - if ((NOT (DEFINED SYCL_LIBCXX_INCLUDE_PATH)) OR (NOT (DEFINED SYCL_LIBCXX_LIBRARY_PATH))) - message(FATAL_ERROR "When building with libc++ SYCL_LIBCXX_INCLUDE_PATHS and" - "SYCL_LIBCXX_LIBRARY_PATH should be set") - endif() - set(CMAKE_CXX_FLAGS "-nostdinc++ -I ${SYCL_LIBCXX_INCLUDE_PATH} ${CMAKE_CXX_FLAGS}") - else() - message(FATAL_ERROR "Build with libc++ is not yet supported for this compiler") - endif() -endif() - set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/lib/${CMAKE_BUILD_TYPE}) set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}) set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}) diff --git a/xptifw/src/CMakeLists.txt b/xptifw/src/CMakeLists.txt index de22741295826..d3abd2944845f 100644 --- a/xptifw/src/CMakeLists.txt +++ b/xptifw/src/CMakeLists.txt @@ -51,10 +51,6 @@ function(add_xpti_library LIB_NAME) target_link_libraries(${LIB_NAME} PUBLIC $) endif() - if (SYCL_USE_LIBCXX) - target_link_libraries(${LIB_NAME} PRIVATE "-L${SYCL_LIBCXX_LIBRARY_PATH}" -Wl,-rpath,${SYCL_LIBCXX_LIBRARY_PATH} -nodefaultlibs -lc++ -lc++abi -lm -lc -lgcc_s -lgcc) - endif() - # Set the location of the library installation include(GNUInstallDirs) install(TARGETS ${LIB_NAME}