| ##===----------------------------------------------------------------------===## |
| # |
| # The LLVM Compiler Infrastructure |
| # |
| # This file is dual licensed under the MIT and the University of Illinois Open |
| # Source Licenses. See LICENSE.txt for details. |
| # |
| ##===----------------------------------------------------------------------===## |
| # |
| # Build offloading library libomptarget.so. |
| # |
| ##===----------------------------------------------------------------------===## |
| |
| # CMAKE libomptarget |
| cmake_minimum_required(VERSION 2.8 FATAL_ERROR) |
| |
| # Add cmake directory to search for custom cmake functions. |
| set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules ${CMAKE_MODULE_PATH}) |
| |
| # Standalone build or part of LLVM? |
| set(LIBOMPTARGET_STANDALONE_BUILD FALSE) |
| if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}" OR |
| "${CMAKE_SOURCE_DIR}/libomptarget" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}") |
| project(libomptarget C CXX) |
| set(LIBOMPTARGET_STANDALONE_BUILD TRUE) |
| endif() |
| |
| |
| if(${LIBOMPTARGET_STANDALONE_BUILD}) |
| set(LIBOMPTARGET_ENABLE_WERROR FALSE CACHE BOOL |
| "Enable -Werror flags to turn warnings into errors for supporting compilers.") |
| # CMAKE_BUILD_TYPE was not defined, set default to Release |
| if(NOT CMAKE_BUILD_TYPE) |
| set(CMAKE_BUILD_TYPE Release) |
| endif() |
| set(LIBOMPTARGET_LIBDIR_SUFFIX "" CACHE STRING |
| "suffix of lib installation directory, e.g. 64 => lib64") |
| else() |
| set(LIBOMPTARGET_ENABLE_WERROR ${LLVM_ENABLE_WERROR}) |
| # If building in tree, we honor the same install suffix LLVM uses. |
| set(LIBOMPTARGET_LIBDIR_SUFFIX ${LLVM_LIBDIR_SUFFIX}) |
| endif() |
| |
| # Compiler flag checks. |
| include(config-ix) |
| |
| # Message utilities. |
| include(LibomptargetUtils) |
| |
| # Get dependencies for the different components of the project. |
| include(LibomptargetGetDependencies) |
| |
| # This is a list of all the targets that are supported/tested right now. |
| set (LIBOMPTARGET_ALL_TARGETS "${LIBOMPTARGET_ALL_TARGETS} aarch64-unknown-linux-gnu") |
| set (LIBOMPTARGET_ALL_TARGETS "${LIBOMPTARGET_ALL_TARGETS} powerpc64le-ibm-linux-gnu") |
| set (LIBOMPTARGET_ALL_TARGETS "${LIBOMPTARGET_ALL_TARGETS} powerpc64-ibm-linux-gnu") |
| set (LIBOMPTARGET_ALL_TARGETS "${LIBOMPTARGET_ALL_TARGETS} x86_64-pc-linux-gnu") |
| set (LIBOMPTARGET_ALL_TARGETS "${LIBOMPTARGET_ALL_TARGETS} nvptx64-nvidia-cuda") |
| |
| # Once the plugins for the different targets are validated, they will be added to |
| # the list of supported targets in the current system. |
| set (LIBOMPTARGET_SYSTEM_TARGETS "") |
| |
| # Set base directories - required for lit to locate the tests. |
| set(LIBOMPTARGET_BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) |
| set(LIBOMPTARGET_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) |
| |
| # We need C++11 support. |
| if(LIBOMPTARGET_HAVE_STD_CPP11_FLAG) |
| |
| libomptarget_say("Building offloading runtime library libomptarget.") |
| |
| # Enable support for C++11. |
| add_definitions(-std=c++11) |
| |
| if(LIBOMPTARGET_ENABLE_WERROR AND LIBOMPTARGET_HAVE_WERROR_FLAG) |
| add_definitions(-Werror) |
| endif() |
| |
| # If building this library in debug mode, we define a macro to enable |
| # dumping progress messages at runtime. |
| string( TOLOWER "${CMAKE_BUILD_TYPE}" LIBOMPTARGET_CMAKE_BUILD_TYPE) |
| if(LIBOMPTARGET_CMAKE_BUILD_TYPE MATCHES debug) |
| add_definitions(-DOMPTARGET_DEBUG) |
| add_definitions(-g) |
| add_definitions(-O0) |
| endif() |
| |
| set(src_files |
| src/omptarget.cpp |
| ) |
| |
| include_directories(src/) |
| |
| # Build libomptarget library with libdl dependency. |
| add_library(omptarget SHARED ${src_files}) |
| target_link_libraries(omptarget |
| ${CMAKE_DL_LIBS} |
| "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/exports") |
| |
| # Install libomptarget under the lib destination folder. |
| install(TARGETS omptarget LIBRARY DESTINATION lib${LIBOMPTARGET_LIBDIR_SUFFIX}) |
| |
| # Retrieve the path to the resulting library so that it can be used for |
| # testing. |
| get_target_property(LIBOMPTARGET_LIBRARY_DIR omptarget LIBRARY_OUTPUT_DIRECTORY) |
| if(NOT LIBOMPTARGET_LIBRARY_DIR) |
| set(LIBOMPTARGET_LIBRARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) |
| endif() |
| |
| # Build offloading plugins and device RTLs if they are available. |
| add_subdirectory(plugins) |
| |
| # Add tests. |
| add_subdirectory(test) |
| |
| else(LIBOMPTARGET_HAVE_STD_CPP11_FLAG) |
| libomptarget_say("Not building offloading runtime library libomptarget: host compiler must have c++11 support.") |
| endif(LIBOMPTARGET_HAVE_STD_CPP11_FLAG) |