diff options
Diffstat (limited to 'final/runtime/CMakeLists.txt')
-rw-r--r-- | final/runtime/CMakeLists.txt | 397 |
1 files changed, 397 insertions, 0 deletions
diff --git a/final/runtime/CMakeLists.txt b/final/runtime/CMakeLists.txt new file mode 100644 index 0000000..447b3cd --- /dev/null +++ b/final/runtime/CMakeLists.txt @@ -0,0 +1,397 @@ +# +#//===----------------------------------------------------------------------===// +#// +#// 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. +#// +#//===----------------------------------------------------------------------===// +# + +if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}") + message(FATAL_ERROR "Direct configuration not supported, please use parent directory!") +endif() + +# Add cmake directory to search for custom cmake functions +set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) + +# Set libomp version +set(LIBOMP_VERSION_MAJOR 5) +set(LIBOMP_VERSION_MINOR 0) + +# These include files are in the cmake/ subdirectory +include(LibompUtils) +include(LibompGetArchitecture) +include(LibompHandleFlags) +include(LibompDefinitions) + +# Determine the target architecture +if(${OPENMP_STANDALONE_BUILD}) + # If adding a new architecture, take a look at cmake/LibompGetArchitecture.cmake + libomp_get_architecture(LIBOMP_DETECTED_ARCH) + set(LIBOMP_ARCH ${LIBOMP_DETECTED_ARCH} CACHE STRING + "The architecture to build for (x86_64/i386/arm/ppc64/ppc64le/aarch64/mic/mips/mips64).") + # Should assertions be enabled? They are on by default. + set(LIBOMP_ENABLE_ASSERTIONS TRUE CACHE BOOL + "enable assertions?") +else() # Part of LLVM build + # Determine the native architecture from LLVM. + string(TOLOWER "${LLVM_TARGET_ARCH}" LIBOMP_NATIVE_ARCH) + if( LIBOMP_NATIVE_ARCH STREQUAL "host" ) + string(REGEX MATCH "^[^-]*" LIBOMP_NATIVE_ARCH ${LLVM_HOST_TRIPLE}) + endif () + if(LIBOMP_NATIVE_ARCH MATCHES "i[2-6]86") + set(LIBOMP_ARCH i386) + elseif(LIBOMP_NATIVE_ARCH STREQUAL "x86") + set(LIBOMP_ARCH i386) + elseif(LIBOMP_NATIVE_ARCH STREQUAL "amd64") + set(LIBOMP_ARCH x86_64) + elseif(LIBOMP_NATIVE_ARCH STREQUAL "x86_64") + set(LIBOMP_ARCH x86_64) + elseif(LIBOMP_NATIVE_ARCH MATCHES "powerpc64le") + set(LIBOMP_ARCH ppc64le) + elseif(LIBOMP_NATIVE_ARCH MATCHES "powerpc") + set(LIBOMP_ARCH ppc64) + elseif(LIBOMP_NATIVE_ARCH MATCHES "aarch64") + set(LIBOMP_ARCH aarch64) + elseif(LIBOMP_NATIVE_ARCH MATCHES "arm64") + set(LIBOMP_ARCH aarch64) + elseif(LIBOMP_NATIVE_ARCH MATCHES "arm") + set(LIBOMP_ARCH arm) + else() + # last ditch effort + libomp_get_architecture(LIBOMP_ARCH) + endif () + set(LIBOMP_ENABLE_ASSERTIONS ${LLVM_ENABLE_ASSERTIONS}) +endif() +libomp_check_variable(LIBOMP_ARCH 32e x86_64 32 i386 arm ppc64 ppc64le aarch64 mic mips mips64) + +set(LIBOMP_LIB_TYPE normal CACHE STRING + "Performance,Profiling,Stubs library (normal/profile/stubs)") +libomp_check_variable(LIBOMP_LIB_TYPE normal profile stubs) +set(LIBOMP_OMP_VERSION 50 CACHE STRING + "The OpenMP version (50/45/40/30)") +libomp_check_variable(LIBOMP_OMP_VERSION 50 45 40 30) +# Set the OpenMP Year and Month assiociated with version +if(${LIBOMP_OMP_VERSION} GREATER 50 OR ${LIBOMP_OMP_VERSION} EQUAL 50) + set(LIBOMP_OMP_YEAR_MONTH 201611) +elseif(${LIBOMP_OMP_VERSION} GREATER 45 OR ${LIBOMP_OMP_VERSION} EQUAL 45) + set(LIBOMP_OMP_YEAR_MONTH 201511) +elseif(${LIBOMP_OMP_VERSION} GREATER 40 OR ${LIBOMP_OMP_VERSION} EQUAL 40) + set(LIBOMP_OMP_YEAR_MONTH 201307) +elseif(${LIBOMP_OMP_VERSION} GREATER 30 OR ${LIBOMP_OMP_VERSION} EQUAL 30) + set(LIBOMP_OMP_YEAR_MONTH 201107) +else() + set(LIBOMP_OMP_YEAR_MONTH 200505) +endif() +set(LIBOMP_MIC_ARCH knc CACHE STRING + "Intel(R) Many Integrated Core Architecture (Intel(R) MIC Architecture) (knf/knc). Ignored if not Intel(R) MIC Architecture build.") +if("${LIBOMP_ARCH}" STREQUAL "mic") + libomp_check_variable(LIBOMP_MIC_ARCH knf knc) +endif() +set(LIBOMP_FORTRAN_MODULES FALSE CACHE BOOL + "Create Fortran module files? (requires fortran compiler)") + +# - Support for universal fat binary builds on Mac +# - Having this extra variable allows people to build this library as a universal library +# without forcing a universal build of the llvm/clang compiler. +set(LIBOMP_OSX_ARCHITECTURES "${CMAKE_OSX_ARCHITECTURES}" CACHE STRING + "For Mac builds, semicolon separated list of architectures to build for universal fat binary.") +set(CMAKE_OSX_ARCHITECTURES ${LIBOMP_OSX_ARCHITECTURES}) + +# Should @rpath be used for dynamic libraries on Mac? +# The if(NOT DEFINED) is there to guard a cached value of the variable if one +# exists so there is no interference with what the user wants. Also, no cache entry +# is created so there are no inadvertant effects on other parts of LLVM. +if(NOT DEFINED CMAKE_MACOSX_RPATH) + set(CMAKE_MACOSX_RPATH TRUE) +endif() + +# User specified flags. These are appended to the configured flags. +set(LIBOMP_CFLAGS "" CACHE STRING + "Appended user specified C compiler flags.") +set(LIBOMP_CXXFLAGS "" CACHE STRING + "Appended user specified C++ compiler flags.") +set(LIBOMP_CPPFLAGS "" CACHE STRING + "Appended user specified C preprocessor flags.") +set(LIBOMP_ASMFLAGS "" CACHE STRING + "Appended user specified assembler flags.") +set(LIBOMP_LDFLAGS "" CACHE STRING + "Appended user specified linker flags.") +set(LIBOMP_LIBFLAGS "" CACHE STRING + "Appended user specified linked libs flags. (e.g., -lm)") +set(LIBOMP_FFLAGS "" CACHE STRING + "Appended user specified Fortran compiler flags. These are only used if LIBOMP_FORTRAN_MODULES==TRUE.") + +# Should the libomp library and generated headers be copied into the original source exports/ directory +# Turning this to FALSE aids parallel builds to not interfere with each other. +# Currently, the testsuite module expects the just built OpenMP library to be located inside the exports/ +# directory. TODO: have testsuite run under llvm-lit directly. We can then get rid of copying to exports/ +set(LIBOMP_COPY_EXPORTS TRUE CACHE STRING + "Should exports be copied into source exports/ directory?") + +# HWLOC-support +set(LIBOMP_USE_HWLOC FALSE CACHE BOOL + "Use Hwloc (http://www.open-mpi.org/projects/hwloc/) library for affinity?") +set(LIBOMP_HWLOC_INSTALL_DIR /usr/local CACHE PATH + "Install path for hwloc library") + +# Get the build number from kmp_version.cpp +libomp_get_build_number("${CMAKE_CURRENT_SOURCE_DIR}" LIBOMP_VERSION_BUILD) +math(EXPR LIBOMP_VERSION_BUILD_YEAR "${LIBOMP_VERSION_BUILD}/10000") +math(EXPR LIBOMP_VERSION_BUILD_MONTH_DAY "${LIBOMP_VERSION_BUILD}%10000") + +# Currently don't record any timestamps +set(LIBOMP_BUILD_DATE "No_Timestamp") + +# Architecture +set(IA32 FALSE) +set(INTEL64 FALSE) +set(ARM FALSE) +set(AARCH64 FALSE) +set(PPC64BE FALSE) +set(PPC64LE FALSE) +set(PPC64 FALSE) +set(MIC FALSE) +set(MIPS64 FALSE) +set(MIPS FALSE) +if("${LIBOMP_ARCH}" STREQUAL "i386" OR "${LIBOMP_ARCH}" STREQUAL "32") # IA-32 architecture + set(IA32 TRUE) +elseif("${LIBOMP_ARCH}" STREQUAL "x86_64" OR "${LIBOMP_ARCH}" STREQUAL "32e") # Intel(R) 64 architecture + set(INTEL64 TRUE) +elseif("${LIBOMP_ARCH}" STREQUAL "arm") # ARM architecture + set(ARM TRUE) +elseif("${LIBOMP_ARCH}" STREQUAL "ppc64") # PPC64BE architecture + set(PPC64BE TRUE) + set(PPC64 TRUE) +elseif("${LIBOMP_ARCH}" STREQUAL "ppc64le") # PPC64LE architecture + set(PPC64LE TRUE) + set(PPC64 TRUE) +elseif("${LIBOMP_ARCH}" STREQUAL "aarch64") # AARCH64 architecture + set(AARCH64 TRUE) +elseif("${LIBOMP_ARCH}" STREQUAL "mic") # Intel(R) Many Integrated Core Architecture + set(MIC TRUE) +elseif("${LIBOMP_ARCH}" STREQUAL "mips") # MIPS architecture + set(MIPS TRUE) +elseif("${LIBOMP_ARCH}" STREQUAL "mips64") # MIPS64 architecture + set(MIPS64 TRUE) +endif() + +# Set some flags based on build_type +set(RELEASE_BUILD FALSE) +set(DEBUG_BUILD FALSE) +set(RELWITHDEBINFO_BUILD FALSE) +set(MINSIZEREL_BUILD FALSE) +string(TOLOWER "${CMAKE_BUILD_TYPE}" libomp_build_type_lowercase) +if("${libomp_build_type_lowercase}" STREQUAL "release") + set(RELEASE_BUILD TRUE) +elseif("${libomp_build_type_lowercase}" STREQUAL "debug") + set(DEBUG_BUILD TRUE) +elseif("${libomp_build_type_lowercase}" STREQUAL "relwithdebinfo") + set(RELWITHDEBINFO_BUILD TRUE) +elseif("${libomp_build_type_lowercase}" STREQUAL "minsizerel") + set(MINSIZEREL_BUILD TRUE) +endif() + +# Include itt notify interface? +set(LIBOMP_USE_ITT_NOTIFY TRUE CACHE BOOL + "Enable ITT notify?") + +# normal, profile, stubs library. +set(NORMAL_LIBRARY FALSE) +set(STUBS_LIBRARY FALSE) +set(PROFILE_LIBRARY FALSE) +if("${LIBOMP_LIB_TYPE}" STREQUAL "normal") + set(NORMAL_LIBRARY TRUE) +elseif("${LIBOMP_LIB_TYPE}" STREQUAL "profile") + set(PROFILE_LIBRARY TRUE) +elseif("${LIBOMP_LIB_TYPE}" STREQUAL "stubs") + set(STUBS_LIBRARY TRUE) +endif() + +# Setting directory names +set(LIBOMP_BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) +set(LIBOMP_SRC_DIR ${LIBOMP_BASE_DIR}/src) +set(LIBOMP_TOOLS_DIR ${LIBOMP_BASE_DIR}/tools) +set(LIBOMP_INC_DIR ${LIBOMP_SRC_DIR}/include/${LIBOMP_OMP_VERSION}) +set(LIBOMP_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) + +# Enabling Fortran if it is needed +if(${LIBOMP_FORTRAN_MODULES}) + enable_language(Fortran) +endif() +# Enable MASM Compiler if it is needed (Windows only) +if(WIN32) + enable_language(ASM_MASM) +endif() + +# Getting legal type/arch +libomp_get_legal_type(LIBOMP_LEGAL_TYPE) +libomp_get_legal_arch(LIBOMP_LEGAL_ARCH) + +# Compiler flag checks, library checks, threading check, etc. +include(config-ix) + +# Is there a quad precision data type available? +# TODO: Make this a real feature check +set(LIBOMP_USE_QUAD_PRECISION "${LIBOMP_HAVE_QUAD_PRECISION}" CACHE BOOL + "Should 128-bit precision entry points be built?") +if(LIBOMP_USE_QUAD_PRECISION AND (NOT LIBOMP_HAVE_QUAD_PRECISION)) + libomp_error_say("128-bit quad precision functionality requested but not available") +endif() + +# libgomp drop-in compatibility requires versioned symbols +set(LIBOMP_USE_VERSION_SYMBOLS "${LIBOMP_HAVE_VERSION_SYMBOLS}" CACHE BOOL + "Should version symbols be used? These provide binary compatibility with libgomp.") +if(LIBOMP_USE_VERSION_SYMBOLS AND (NOT LIBOMP_HAVE_VERSION_SYMBOLS)) + libomp_error_say("Version symbols functionality requested but not available") +endif() + +# On multinode systems, larger alignment is desired to avoid false sharing +set(LIBOMP_USE_INTERNODE_ALIGNMENT FALSE CACHE BOOL + "Should larger alignment (4096 bytes) be used for some locks and data structures?") + +# Build code that allows the OpenMP library to conveniently interface with debuggers +set(LIBOMP_USE_DEBUGGER FALSE CACHE BOOL + "Enable debugger interface code?") + +# Should we link to C++ library? +set(LIBOMP_USE_STDCPPLIB FALSE CACHE BOOL + "Should we link to C++ library?") + +# Intel(R) Transactional Synchronization Extensions (Intel(R) TSX) based locks have +# __asm code which can be troublesome for some compilers. This feature is also x86 specific. +# TODO: Make this a real feature check +set(LIBOMP_USE_ADAPTIVE_LOCKS "${LIBOMP_HAVE_ADAPTIVE_LOCKS}" CACHE BOOL + "Should Intel(R) TSX lock be compiled (adaptive lock in kmp_lock.cpp). These are x86 specific.") +if(LIBOMP_USE_ADAPTIVE_LOCKS AND (NOT LIBOMP_HAVE_ADAPTIVE_LOCKS)) + libomp_error_say("Adaptive locks (Intel(R) TSX) functionality is only supported on x86 Architecture") +endif() + +# - stats-gathering enables OpenMP stats where things like the number of +# parallel regions, clock ticks spent in particular openmp regions are recorded. +set(LIBOMP_STATS FALSE CACHE BOOL + "Stats-Gathering functionality?") +if(LIBOMP_STATS AND (NOT LIBOMP_HAVE_STATS)) + libomp_error_say("Stats-gathering functionality requested but not available") +endif() +# The stats functionality requires the std c++ library +if(LIBOMP_STATS) + set(LIBOMP_USE_STDCPPLIB TRUE) +endif() + +# Shared library can be switched to a static library +set(LIBOMP_ENABLE_SHARED TRUE CACHE BOOL + "Shared library instead of static library?") + +if(WIN32 AND NOT LIBOMP_ENABLE_SHARED) + libomp_error_say("Static libraries requested but not available on Windows") +endif() + +if(LIBOMP_USE_ITT_NOTIFY AND NOT LIBOMP_ENABLE_SHARED) + message(STATUS "ITT Notify not supported for static libraries - forcing ITT Notify off") + set(LIBOMP_USE_ITT_NOTIFY FALSE) +endif() + +if(LIBOMP_USE_VERSION_SYMBOLS AND (NOT LIBOMP_ENABLE_SHARED) ) + message(STATUS "Version symbols not supported for static libraries - forcing Version symbols functionality off") + set (LIBOMP_USE_VERSION_SYMBOLS FALSE) +endif() + +# OMPT-support defaults to ON for OpenMP 5.0+ and if the requirements in +# cmake/config-ix.cmake are fulfilled. +set(OMPT_DEFAULT FALSE) +if ((${LIBOMP_OMP_VERSION} GREATER 49) AND (LIBOMP_HAVE_OMPT_SUPPORT) AND (NOT WIN32)) + set(OMPT_DEFAULT TRUE) +endif() +set(LIBOMP_OMPT_SUPPORT ${OMPT_DEFAULT} CACHE BOOL + "OMPT-support?") + +set(LIBOMP_OMPT_DEBUG FALSE CACHE BOOL + "Trace OMPT initialization?") +set(LIBOMP_OMPT_OPTIONAL TRUE CACHE BOOL + "OMPT-optional?") +if(LIBOMP_OMPT_SUPPORT AND (NOT LIBOMP_HAVE_OMPT_SUPPORT)) + libomp_error_say("OpenMP Tools Interface requested but not available in this implementation") +endif() +if(LIBOMP_OMPT_SUPPORT AND (${LIBOMP_OMP_VERSION} LESS 50)) + libomp_error_say("OpenMP Tools Interface only available with OpenMP 5.0, LIBOMP_OMP_VERSION is ${LIBOMP_OMP_VERSION}") +endif() + +# TSAN-support +set(LIBOMP_TSAN_SUPPORT FALSE CACHE BOOL + "TSAN-support?") +if(LIBOMP_TSAN_SUPPORT AND (NOT LIBOMP_HAVE_TSAN_SUPPORT)) + libomp_error_say("TSAN functionality requested but not available") +endif() + +# Error check hwloc support after config-ix has run +if(LIBOMP_USE_HWLOC AND (NOT LIBOMP_HAVE_HWLOC)) + libomp_error_say("Hwloc requested but not available") +endif() + +# Hierarchical scheduling support +set(LIBOMP_USE_HIER_SCHED FALSE CACHE BOOL + "Hierarchical scheduling support?") + +# Setting final library name +set(LIBOMP_DEFAULT_LIB_NAME libomp) +if(${PROFILE_LIBRARY}) + set(LIBOMP_DEFAULT_LIB_NAME ${LIBOMP_DEFAULT_LIB_NAME}prof) +endif() +if(${STUBS_LIBRARY}) + set(LIBOMP_DEFAULT_LIB_NAME ${LIBOMP_DEFAULT_LIB_NAME}stubs) +endif() +set(LIBOMP_LIB_NAME ${LIBOMP_DEFAULT_LIB_NAME} CACHE STRING "Base OMP library name") + +if(${LIBOMP_ENABLE_SHARED}) + set(LIBOMP_LIBRARY_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX}) + set(LIBOMP_LIBRARY_KIND SHARED) + set(LIBOMP_INSTALL_KIND LIBRARY) +else() + set(LIBOMP_LIBRARY_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX}) + set(LIBOMP_LIBRARY_KIND STATIC) + set(LIBOMP_INSTALL_KIND ARCHIVE) +endif() + +set(LIBOMP_LIB_FILE ${LIBOMP_LIB_NAME}${LIBOMP_LIBRARY_SUFFIX}) + +# Optional backwards compatibility aliases. +set(LIBOMP_INSTALL_ALIASES TRUE CACHE BOOL + "Install libgomp and libiomp5 library aliases for backwards compatibility") + +# Print configuration after all variables are set. +if(${OPENMP_STANDALONE_BUILD}) + libomp_say("Operating System -- ${CMAKE_SYSTEM_NAME}") + libomp_say("Target Architecture -- ${LIBOMP_ARCH}") + if(${MIC}) + libomp_say("Intel(R) MIC Architecture -- ${LIBOMP_MIC_ARCH}") + endif() + libomp_say("Build Type -- ${CMAKE_BUILD_TYPE}") + libomp_say("OpenMP Version -- ${LIBOMP_OMP_VERSION}") + libomp_say("Library Kind -- ${LIBOMP_LIBRARY_KIND}") + libomp_say("Library Type -- ${LIBOMP_LIB_TYPE}") + libomp_say("Fortran Modules -- ${LIBOMP_FORTRAN_MODULES}") + # will say development if all zeros + if(${LIBOMP_VERSION_BUILD} STREQUAL 00000000) + set(LIBOMP_BUILD Development) + else() + set(LIBOMP_BUILD ${LIBOMP_VERSION_BUILD}) + endif() + libomp_say("Build -- ${LIBOMP_BUILD}") + libomp_say("Use Stats-gathering -- ${LIBOMP_STATS}") + libomp_say("Use Debugger-support -- ${LIBOMP_USE_DEBUGGER}") + libomp_say("Use ITT notify -- ${LIBOMP_USE_ITT_NOTIFY}") + libomp_say("Use OMPT-support -- ${LIBOMP_OMPT_SUPPORT}") + if(${LIBOMP_OMPT_SUPPORT}) + libomp_say("Use OMPT-optional -- ${LIBOMP_OMPT_OPTIONAL}") + endif() + libomp_say("Use Adaptive locks -- ${LIBOMP_USE_ADAPTIVE_LOCKS}") + libomp_say("Use quad precision -- ${LIBOMP_USE_QUAD_PRECISION}") + libomp_say("Use TSAN-support -- ${LIBOMP_TSAN_SUPPORT}") + libomp_say("Use Hwloc library -- ${LIBOMP_USE_HWLOC}") +endif() + +add_subdirectory(src) +add_subdirectory(test) |