[Openmp-commits] [openmp] r215098 - Update Branch3_5 to include new Cmake code and PowerPC64 buld fixes.
Jim Cownie
james.h.cownie at intel.com
Thu Aug 7 04:17:00 PDT 2014
Author: jimcownie
Date: Thu Aug 7 06:16:59 2014
New Revision: 215098
URL: http://llvm.org/viewvc/llvm-project?rev=215098&view=rev
Log:
Update Branch3_5 to include new Cmake code and PowerPC64 buld fixes.
Branch_35 will then be the same as Rev 215093 on the trunk.
Added:
openmp/branches/release_35/runtime/Build_With_CMake.txt
- copied unchanged from r215096, openmp/trunk/runtime/Build_With_CMake.txt
openmp/branches/release_35/runtime/CMakeLists.txt.old
- copied unchanged from r215096, openmp/trunk/runtime/CMakeLists.txt.old
openmp/branches/release_35/runtime/cmake/
- copied from r215096, openmp/trunk/runtime/cmake/
openmp/branches/release_35/runtime/cmake/BuildPLRules.cmake
- copied unchanged from r215096, openmp/trunk/runtime/cmake/BuildPLRules.cmake
openmp/branches/release_35/runtime/cmake/Clang/
- copied from r215096, openmp/trunk/runtime/cmake/Clang/
openmp/branches/release_35/runtime/cmake/Clang/AsmFlags.cmake
- copied unchanged from r215096, openmp/trunk/runtime/cmake/Clang/AsmFlags.cmake
openmp/branches/release_35/runtime/cmake/Clang/CFlags.cmake
- copied unchanged from r215096, openmp/trunk/runtime/cmake/Clang/CFlags.cmake
openmp/branches/release_35/runtime/cmake/CommonFlags.cmake
- copied unchanged from r215096, openmp/trunk/runtime/cmake/CommonFlags.cmake
openmp/branches/release_35/runtime/cmake/Definitions.cmake
- copied unchanged from r215096, openmp/trunk/runtime/cmake/Definitions.cmake
openmp/branches/release_35/runtime/cmake/GNU/
- copied from r215096, openmp/trunk/runtime/cmake/GNU/
openmp/branches/release_35/runtime/cmake/GNU/AsmFlags.cmake
- copied unchanged from r215096, openmp/trunk/runtime/cmake/GNU/AsmFlags.cmake
openmp/branches/release_35/runtime/cmake/GNU/CFlags.cmake
- copied unchanged from r215096, openmp/trunk/runtime/cmake/GNU/CFlags.cmake
openmp/branches/release_35/runtime/cmake/GNU/FortranFlags.cmake
- copied unchanged from r215096, openmp/trunk/runtime/cmake/GNU/FortranFlags.cmake
openmp/branches/release_35/runtime/cmake/HelperFunctions.cmake
- copied unchanged from r215096, openmp/trunk/runtime/cmake/HelperFunctions.cmake
openmp/branches/release_35/runtime/cmake/Intel/
- copied from r215096, openmp/trunk/runtime/cmake/Intel/
openmp/branches/release_35/runtime/cmake/Intel/AsmFlags.cmake
- copied unchanged from r215096, openmp/trunk/runtime/cmake/Intel/AsmFlags.cmake
openmp/branches/release_35/runtime/cmake/Intel/CFlags.cmake
- copied unchanged from r215096, openmp/trunk/runtime/cmake/Intel/CFlags.cmake
openmp/branches/release_35/runtime/cmake/Intel/FortranFlags.cmake
- copied unchanged from r215096, openmp/trunk/runtime/cmake/Intel/FortranFlags.cmake
openmp/branches/release_35/runtime/cmake/MSVC/
- copied from r215096, openmp/trunk/runtime/cmake/MSVC/
openmp/branches/release_35/runtime/cmake/MSVC/AsmFlags.cmake
- copied unchanged from r215096, openmp/trunk/runtime/cmake/MSVC/AsmFlags.cmake
openmp/branches/release_35/runtime/cmake/MSVC/CFlags.cmake
- copied unchanged from r215096, openmp/trunk/runtime/cmake/MSVC/CFlags.cmake
openmp/branches/release_35/runtime/cmake/MicroTests.cmake
- copied unchanged from r215096, openmp/trunk/runtime/cmake/MicroTests.cmake
openmp/branches/release_35/runtime/cmake/PerlFlags.cmake
- copied unchanged from r215096, openmp/trunk/runtime/cmake/PerlFlags.cmake
openmp/branches/release_35/runtime/cmake/SourceFiles.cmake
- copied unchanged from r215096, openmp/trunk/runtime/cmake/SourceFiles.cmake
Modified:
openmp/branches/release_35/ (props changed)
openmp/branches/release_35/CREDITS.txt
openmp/branches/release_35/runtime/CMakeLists.txt
openmp/branches/release_35/runtime/src/CMakeLists.txt
openmp/branches/release_35/runtime/src/dllexports
openmp/branches/release_35/runtime/src/kmp.h
openmp/branches/release_35/runtime/src/kmp_csupport.c
openmp/branches/release_35/runtime/src/kmp_ftn_entry.h
openmp/branches/release_35/runtime/src/kmp_ftn_os.h
openmp/branches/release_35/runtime/src/kmp_global.c
openmp/branches/release_35/runtime/src/kmp_gsupport.c
openmp/branches/release_35/runtime/src/kmp_lock.h
openmp/branches/release_35/runtime/src/kmp_os.h
openmp/branches/release_35/runtime/src/kmp_runtime.c
openmp/branches/release_35/runtime/src/kmp_settings.c
openmp/branches/release_35/runtime/src/kmp_str.h
openmp/branches/release_35/runtime/src/kmp_version.c
openmp/branches/release_35/runtime/src/makefile.mk
openmp/branches/release_35/runtime/src/thirdparty/ittnotify/ittnotify_config.h
openmp/branches/release_35/runtime/src/z_Linux_asm.s
openmp/branches/release_35/runtime/src/z_Linux_util.c
openmp/branches/release_35/runtime/tools/lib/Platform.pm
openmp/branches/release_35/runtime/tools/lib/Uname.pm
openmp/branches/release_35/runtime/tools/src/common-defs.mk
openmp/branches/release_35/www/content.css (props changed)
openmp/branches/release_35/www/menu.css (props changed)
Propchange: openmp/branches/release_35/
------------------------------------------------------------------------------
svn:mergeinfo = /openmp/trunk:213607-215096
Modified: openmp/branches/release_35/CREDITS.txt
URL: http://llvm.org/viewvc/llvm-project/openmp/branches/release_35/CREDITS.txt?rev=215098&r1=215097&r2=215098&view=diff
==============================================================================
--- openmp/branches/release_35/CREDITS.txt (original)
+++ openmp/branches/release_35/CREDITS.txt Thu Aug 7 06:16:59 2014
@@ -8,6 +8,9 @@ beautification by scripts. The fields a
(W), PGP key ID and fingerprint (P), description (D), and snail-mail address
(S).
+N: Carlo Bertolli
+D: IBM contributor to PowerPC support in CMake files and elsewhere.
+
N: Sunita Chandrasekaran
D: Contributor to testsuite from OpenUH
Modified: openmp/branches/release_35/runtime/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/openmp/branches/release_35/runtime/CMakeLists.txt?rev=215098&r1=215097&r2=215098&view=diff
==============================================================================
--- openmp/branches/release_35/runtime/CMakeLists.txt (original)
+++ openmp/branches/release_35/runtime/CMakeLists.txt Thu Aug 7 06:16:59 2014
@@ -1,8 +1,833 @@
-project(openmp)
-cmake_minimum_required(VERSION 2.8)
+#
+#//===----------------------------------------------------------------------===//
+#//
+#// 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.
+#//
+#//===----------------------------------------------------------------------===//
+#
-set(VERSION 5)
-set(OMP_VERSION "201107")
-set(OMP_VERSION_NUM "40")
+################
+# CMAKE libiomp5
+cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
+project(libiomp C CXX)
+
+#########
+# GLOBALS
+set(GLOBAL_DEBUG 0)
+
+# Add cmake directory to search for custom cmake functions
+set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
+
+# Set base libomp directory (directory with exports/ , src/ , tools/ , etc.)
+# The top-level CMakeLists.txt should define this variable.
+set(LIBOMP_WORK ${CMAKE_CURRENT_SOURCE_DIR})
+
+# These include files are in cmake/ subdirectory except for FindPerl which is a cmake standard module
+include(HelperFunctions)
+include(Definitions) # -D definitions when compiling
+include(CommonFlags) # compiler, assembler, fortran, linker flags common for all compilers
+include(SourceFiles) # source files to compile
+include(PerlFlags) # Perl flags for generate-def.pl and expand-vars.pl
+include(FindPerl) # Standard cmake module to check for Perl
+
+####################################################################
+# CONFIGURATION
+#
+# * Any variable/value that is CACHE-ed can be changed after the initial run of cmake
+# through the file, CMakeCache.txt which is in the build directory.
+# * If you change any value in CMakeCache.txt, then just run cmake ..
+# and the changed will be picked up. One can also use -DVARIABLE=VALUE
+# when calling cmake to changed configuration values.
+# * CMAKE_C_COMPILER, CMAKE_CXX_COMPILER, CMAKE_ASM_MASM_COMPILER, CMAKE_ASM_COMPILER,
+# CMAKE_Fortran_COMPILER can only by specified on the initial run of cmake.
+# This means you cannot specify -DCMAKE_C_COMPILER= on a subsequent run of cmake
+# in the same build directory until that build directory is emptied.
+# If you want to change the compiler, then empty the build directory and rerun cmake.
+
+# Build Configuration
+set(os_possible_values lin mac win mic)
+set(arch_possible_values 32e 32 arm ppc64)
+set(build_type_possible_values release debug relwithdebinfo)
+set(omp_version_possible_values 40 30)
+set(lib_type_possible_values normal profile stubs)
+set(mic_arch_possible_values knf knc)
+set(mic_os_possible_values bsd lin)
+
+# Below, cmake will try and determine the operating system and architecture for you (it assumes Intel architecture)
+# These values are set in CMakeCache.txt when cmake is first run (-Dvar_name=... will take precedence)
+# parameter | default value
+# ----------------------------
+# Right now, this build system considers os=lin to mean "Unix-like that is not MAC"
+if(${APPLE}) # Apple goes first because CMake considers Mac to be a Unix based operating system, while libiomp5 considers it a special case
+ set(os mac CACHE STRING "The operating system to build for (lin/mac/win/mic)")
+elseif(${UNIX})
+ set(os lin CACHE STRING "The operating system to build for (lin/mac/win/mic)")
+elseif(${WIN32})
+ set(os win CACHE STRING "The operating system to build for (lin/mac/win/mic)")
+else()
+ set(os lin CACHE STRING "The operating system to build for (lin/mac/win/mic)")
+endif()
+
+# set to default architecture if the user did not specify an architecture explicitly
+if(NOT arch)
+ if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4")
+ set(arch 32 CACHE STRING "The architecture to build for (32e/32/arm/ppc64). 32e is Intel(R) 64 architecture, 32 is IA-32 architecture")
+ else()
+ set(arch 32e CACHE STRING "The architecture to build for (32e/32/arm/ppc64). 32e is Intel(R) 64 architecture, 32 is IA-32 architecture")
+ endif()
+endif()
+
+set(lib_type normal CACHE STRING "Performance,Profiling,Stubs library (normal/profile/stubs)")
+set(version 5 CACHE STRING "Produce libguide (version 4) or libiomp5 (version 5)")
+set(omp_version 40 CACHE STRING "The OpenMP version (40/30)")
+set(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.")
+set(mic_os lin CACHE STRING "Intel(R) MIC Architecture operating system (bsd/lin). Ignored if not Intel(R) MIC Architecture build.")
+set(create_fortran_modules false CACHE STRING "Create Fortran module files? (requires fortran compiler)")
+
+# - These tests are little tests performed after the library is formed.
+# - The library won't be copied to the exports directory until it has passed/skipped all below tests
+# - To skip these tests, just pass -Dtests=OFF to cmake or change tests value in CMakeCache.txt to OFF after running cmake
+set(test_touch true CACHE BOOL "Perform a small touch test?" )
+set(test_relo true CACHE BOOL "Perform a relocation test for dynamic libraries?" )
+set(test_execstack true CACHE BOOL "Perform a execstack test for linux dynamic libraries?" )
+set(test_instr true CACHE BOOL "Perform an instruction test for Intel(R) MIC Architecture libraries?" )
+set(test_deps true CACHE BOOL "Perform a library dependency test?" )
+set(tests false CACHE BOOL "Perform touch, relo, execstack, instr, and deps tests?" )
+
+# - stats-gathering enables OpenMP stats where things like the number of parallel regions, clock ticks spent in
+# particular openmp regions are recorded.
+set(stats false CACHE BOOL "Stats-Gathering functionality?" )
+
+# User specified flags. These are appended to the predetermined flags found in CommonFlags.cmake and ${CMAKE_C_COMPILER_ID}/*Flags.cmake (i.e., GNU/CFlags.cmake)
+set(USER_C_FLAGS "" CACHE STRING "Appended user specified C compiler flags." )
+set(USER_CXX_FLAGS "" CACHE STRING "Appended user specified C++ compiler flags." )
+set(USER_CPP_FLAGS "" CACHE STRING "Appended user specified C preprocessor flags." )
+set(USER_ASM_FLAGS "" CACHE STRING "Appended user specified assembler flags." )
+set(USER_LD_FLAGS "" CACHE STRING "Appended user specified linker flags." )
+set(USER_LD_LIB_FLAGS "" CACHE STRING "Appended user specified linked libs flags. (i.e., -lm)")
+set(USER_F_FLAGS "" CACHE STRING "Appended user specified Fortran compiler flags. These are only used if create_fortran_modules==true." )
+
+# - Allow three build types: Release, Debug, RelWithDebInfo (these relate to build.pl's release, debug, and diag settings respectively)
+# - default is Release (when CMAKE_BUILD_TYPE is not defined)
+# - CMAKE_BUILD_TYPE affects the -O and -g flags (CMake magically includes correct version of them on per compiler basis)
+# - typical: Release = -O3 -DNDEBUG
+# RelWithDebInfo = -O2 -g -DNDEBUG
+# Debug = -g
+if(CMAKE_BUILD_TYPE)
+ # CMAKE_BUILD_TYPE was defined, check for validity
+ string(TOLOWER "${CMAKE_BUILD_TYPE}" cmake_build_type_lowercase)
+ check_variable(cmake_build_type_lowercase "${build_type_possible_values}")
+else()
+ # CMAKE_BUILD_TYPE was not defined, set default to Release
+ unset(CMAKE_BUILD_TYPE CACHE)
+ set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: Release/Debug/RelWithDebInfo")
+ string(TOLOWER "${CMAKE_BUILD_TYPE}" cmake_build_type_lowercase)
+ check_variable(cmake_build_type_lowercase "${build_type_possible_values}")
+endif()
+
+# Check valid values
+check_variable(os "${os_possible_values}" )
+check_variable(arch "${arch_possible_values}" )
+check_variable(omp_version "${omp_version_possible_values}")
+check_variable(lib_type "${lib_type_possible_values}" )
+if("${os}" STREQUAL "mic")
+ check_variable(mic_arch "${mic_arch_possible_values}" )
+ check_variable(mic_os "${mic_os_possible_values}" )
+endif()
+# Get the build number from kmp_version.c
+get_build_number("${LIBOMP_WORK}" build_number)
+
+# Getting time and date
+# As of now, no timestamp will be created.
+set(date "No Timestamp")
+
+#################################################################
+# Set some useful flags variables for other parts of cmake to use
+# Operating System
+set(LINUX FALSE)
+set(MAC FALSE)
+set(WINDOWS FALSE)
+set(MIC FALSE)
+set(FREEBSD FALSE)
+if("${os}" STREQUAL "lin")
+ set(LINUX TRUE)
+ set(real_os lin)
+elseif("${os}" STREQUAL "mac")
+ set(MAC TRUE)
+ set(real_os mac)
+elseif("${os}" STREQUAL "win")
+ set(WINDOWS TRUE)
+ set(real_os win)
+elseif("${os}" STREQUAL "mic")
+ set(MIC TRUE)
+ set(real_os lrb)
+endif()
+if("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD")
+ set(FREEBSD TRUE)
+endif()
+
+# Architecture
+set(IA32 FALSE)
+set(INTEL64 FALSE)
+set(ARM FALSE)
+set(PPC64 FALSE)
+if("${arch}" STREQUAL "32") # IA-32 architecture
+ set(IA32 TRUE)
+elseif("${arch}" STREQUAL "32e") # Intel(R) 64 architecture
+ set(INTEL64 TRUE)
+elseif("${arch}" STREQUAL "arm") # ARM architecture
+ set(ARM TRUE)
+elseif("${arch}" STREQUAL "ppc64") # PPC64 architecture
+ set(PPC64 TRUE)
+endif()
+
+# Set some flags based on build_type
+# cmake_build_type_lowercase is based off of CMAKE_BUILD_TYPE, just put in lowercase.
+set(RELEASE_BUILD FALSE)
+set(DEBUG_BUILD FALSE)
+set(RELWITHDEBINFO_BUILD FALSE)
+if("${cmake_build_type_lowercase}" STREQUAL "release")
+ set(RELEASE_BUILD TRUE)
+elseif("${cmake_build_type_lowercase}" STREQUAL "debug")
+ set(DEBUG_BUILD TRUE)
+elseif("${cmake_build_type_lowercase}" STREQUAL "relwithdebinfo")
+ set(RELWITHDEBINFO_BUILD TRUE)
+endif()
+
+# Stats-gathering on or off?
+set(STATS_GATHERING FALSE)
+if("${stats}") # string "on" or "ON" is seen as boolean TRUE
+ set(STATS_GATHERING TRUE)
+endif()
+
+# Include itt notify interface? Right now, always.
+set(USE_ITT_NOTIFY TRUE)
+
+# normal, profile, stubs library.
+set(NORMAL_LIBRARY FALSE)
+set(STUBS_LIBRARY FALSE)
+set(PROFILE_LIBRARY FALSE)
+if("${lib_type}" STREQUAL "normal")
+ set(NORMAL_LIBRARY TRUE)
+elseif("${lib_type}" STREQUAL "profile")
+ set(PROFILE_LIBRARY TRUE)
+elseif("${lib_type}" STREQUAL "stubs")
+ set(STUBS_LIBRARY TRUE)
+endif()
+
+###############################################
+# Features for compilation and build in general
+
+# - Does the compiler support a 128-bit floating point data type? Default is false
+# - If a compiler does, then change it in the CMakeCache.txt file (or using the cmake GUI)
+# or send to cmake -DCOMPILER_SUPPORTS_QUAD_PRECISION=true
+# - If COMPILER_SUPPORTS_QUAD_PRECISION is true, then a corresponding COMPILER_QUAD_TYPE must be given
+# This is the compiler's quad-precision data type.
+# ** TODO: This isn't complete yet. Finish it. Requires changing macros in kmp_os.h **
+set(COMPILER_SUPPORTS_QUAD_PRECISION false CACHE BOOL "*INCOMPLETE* Does the compiler support a 128-bit floating point type?")
+set(COMPILER_QUAD_TYPE "" CACHE STRING "*INCOMPLETE* The quad precision data type (i.e., for gcc, __float128)")
+
+# - Should the orignal build rules for builds be used? (cmake/OriginalBuildRules.cmake). This setting is off by default.
+# - This always compiles with -g. And if it is a release build, the debug info is stripped out via objcopy and put into libiomp5.dbg.
+set(USE_BUILDPL_RULES false CACHE BOOL "Should the build follow build.pl rules/recipes?")
+
+# - Should the build use the predefined linker flags (OS-dependent) in CommonFlags.cmake?
+# - these predefined linker flags should work for Windows, Mac, and True Linux for the most popular compilers/linkers
+set(USE_PREDEFINED_LINKER_FLAGS true CACHE BOOL "Should the build use the predefined linker flags in CommonFlags.cmake?")
+
+# - TSX based locks have __asm code which can be troublesome for some compilers. This feature is also x86 specific.
+if({${IA32} OR ${INTEL64})
+ set(USE_ADAPTIVE_LOCKS true CACHE BOOL "Should TSX-based lock be compiled (adaptive lock in kmp_lock.cpp). These are x86 specific.")
+else()
+ set(USE_ADAPTIVE_LOCKS false CACHE BOOL "Should TSX-based lock be compiled (adaptive lock in kmp_lock.cpp). These are x86 specific.")
+endif()
+
+##################################
+# Error checking the configuration
+if(${STATS_GATHERING} AND (${WINDOWS} OR ${MAC}))
+ error_say("Stats-gathering functionality is only supported on x86-Linux and Intel(R) MIC Architecture")
+endif()
+if(${STATS_GATHERING} AND NOT (${IA32} OR ${INTEL64}))
+ error_say("Stats-gathering functionality is only supported on x86-Linux and Intel(R) MIC Architecture")
+endif()
+if(${USE_ADAPTIVE_LOCKS} AND NOT(${IA32} OR ${INTEL64}))
+ error_say("Adaptive locks (TSX) functionality is only supported on x86 Architecture")
+endif()
+
+###############################################
+# - Create the suffix for the export directory
+# - Only add to suffix when not a default value
+# - Example suffix: .deb.30.s1
+# final export directory: exports/lin_32e.deb.30.s1/lib
+# - These suffixes imply the build is a Debug, OpenMP 3.0, Stats-Gathering version of the library
+if(NOT "${cmake_build_type_lowercase}" STREQUAL "release")
+ string(SUBSTRING "${cmake_build_type_lowercase}" 0 3 build_type_suffix)
+ set(suffix "${suffix}.${build_type_suffix}")
+endif()
+if(NOT "${omp_version}" STREQUAL "40")
+ set(suffix "${suffix}.${omp_version}")
+endif()
+if(${STATS_GATHERING})
+ set(suffix "${suffix}.s1")
+endif()
+if(${MIC})
+ if(NOT "${mic_arch}" STREQUAL "knf")
+ set(suffix "${suffix}.${mic_arch}")
+ endif()
+ if(NOT "${mic_os}" STREQUAL "bsd")
+ set(suffix "${suffix}.${mic_os}")
+ endif()
+endif()
+
+####################################
+# Setting file extensions / suffixes
+set(obj ${CMAKE_C_OUTPUT_EXTENSION} )
+set(lib ${CMAKE_STATIC_LIBRARY_SUFFIX})
+set(dll ${CMAKE_SHARED_LIBRARY_SUFFIX})
+set(exe ${CMAKE_EXECUTABLE_SUFFIX} )
+
+######################
+# Find perl executable
+# Perl is used to create omp.h (and other headers) along with kmp_i18n_id.inc and kmp_i18n_default.inc (see below in Rules section)
+if(NOT "${PERL_FOUND}") # variable is defined in FindPerl Standard CMake Module
+ error_say("Error: Could not find valid perl")
+endif()
+
+#########################
+# Setting directory names
+set(platform "${real_os}_${arch}" ) # i.e., lin_32e, mac_32
+set(build_dir "${CMAKE_CURRENT_BINARY_DIR}" ) # build directory (Where CMakeCache.txt is created, build files generated)
+set(src_dir "${LIBOMP_WORK}/src" )
+set(tools_dir "${LIBOMP_WORK}/tools" )
+set(export_dir "${LIBOMP_WORK}/exports" )
+set(export_cmn_dir "${export_dir}/common${suffix}" )
+set(export_ptf_dir "${export_dir}/${platform}${suffix}")
+_export_lib_dir(${platform} export_lib_dir) # set exports directory (relative to build_dir) i.e., ../exports/lin_32e/lib/
+ # or i.e., ../exports/mac_32e/lib.thin/ for mac
+if(${MAC})
+ # macs use lib.thin/ subdirectory for non-fat libraries that only contain one architecture
+ # macs use lib/ subdirectory for fat libraries that contain both IA-32 architecture and Intel(R) 64 architecture code.
+ _export_lib_fat_dir(${platform} export_lib_fat_dir)
+endif()
+set(inc_dir "${LIBOMP_WORK}/src/include/${omp_version}")
+
+############################
+# Setting final library name
+set(lib_item "libiomp")
+if(${PROFILE_LIBRARY})
+ set(lib_item "${lib_item}prof")
+endif()
+if(${STUBS_LIBRARY})
+ set(lib_item "${lib_item}stubs")
+endif()
+set(lib_item "${lib_item}${version}")
+if(${WINDOWS})
+ set(lib_item "${lib_item}md")
+endif()
+set(lib_ext "${dll}")
+# ${lib_file} is real library name:
+# libiomp5.so for Linux
+# libiomp5.dylib for Mac
+# libiomp5md.dll for Windows
+set(lib_file "${lib_item}${lib_ext}")
+
+########################################
+# Setting export file names (full paths)
+if(${WINDOWS})
+ set(imp_file "${lib_item}${lib}") # this is exported (libiomp5md.lib)
+ set(def_file "${lib_item}.def") # this is not exported
+ set(rc_file "${lib_item}.rc") # this is not exported
+ if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug" OR "${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo" OR ${USE_BUILDPL_RULES})
+ set(pdb_file "${lib_file}.pdb") # this is exported if it exists (libiomp5md.dll.pdb)
+ endif()
+endif()
+set(export_lib_files "${lib_file}" "${imp_file}" "${pdb_file}")
+set(export_inc_files "iomp_lib.h")
+set(export_mod_files "omp_lib.mod" "omp_lib_kinds.mod")
+set(export_cmn_files1 "omp.h" "omp_lib.h" "omp_lib.f" "omp_lib.f90")
+set(export_cmn_files2 "iomp.h")
+add_prefix("${export_lib_dir}/" export_lib_files)
+add_prefix("${export_ptf_dir}/include_compat/" export_inc_files)
+add_prefix("${export_ptf_dir}/include/" export_mod_files)
+add_prefix("${export_cmn_dir}/include/" export_cmn_files1)
+add_prefix("${export_cmn_dir}/include_compat/" export_cmn_files2)
+set(export_cmn_files "${export_cmn_files1}" "${export_cmn_files2}")
+if("${export_lib_fat_dir}")
+ set(export_lib_fat_files "${lib_file}" "${imp_file}")
+ add_prefix("${export_lib_fat_dir}/" export_lib_fat_files)
+endif()
+
+#########################
+# Getting legal type/arch
+set_legal_type(legal_type)
+set_legal_arch(legal_arch)
+
+#################################################
+# Preprocessor Definitions (cmake/Definitions.cmake)
+# Preprocessor Includes
+# Compiler (C/C++) Flags (cmake/CommonFlags.cmake)
+# Assembler Flags (cmake/CommonFlags.cmake)
+# Fortran Flags (cmake/CommonFlags.cmake)
+# Linker Flags (cmake/CommonFlags.cmake)
+# Archiver Flags (cmake/CommonFlags.cmake)
+# Helper Perl Script Flags (cmake/PerlFlags.cmake)
+# * Inside the cmake/CommonFlags.cmake file, the USER_*_FLAGS are added.
+# * Cannot use CMAKE_*_FLAGS directly because -x c++ is put in the linker command and mangles the linking phase.
+
+# preprocessor flags (-D definitions and -I includes)
+# Grab environment variable CPPFLAGS and append those to definitions
+set(include_dirs ${CMAKE_CURRENT_BINARY_DIR} ${src_dir} ${src_dir}/i18n ${inc_dir} ${src_dir}/thirdparty/ittnotify)
+include_directories(${include_dirs})
+
+# Grab assembler-dependent flags
+# CMake will look for cmake/${CMAKE_ASM_COMPILER_ID}/AsmFlags.cmake to append additional assembler flags.
+if(${WINDOWS})
+ # Windows based systems use CMAKE_ASM_MASM_COMPILER
+ # The windows assembly files are in MASM format, and they require a tool that can handle MASM syntax (ml.exe or ml64.exe typically)
+ enable_language(ASM_MASM)
+ set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/${CMAKE_ASM_MASM_COMPILER_ID} ${CMAKE_MODULE_PATH})
+ find_file(assembler_specific_include_file_found AsmFlags.cmake ${CMAKE_MODULE_PATH})
+ if(assembler_specific_include_file_found)
+ include(AsmFlags)
+ append_assembler_specific_asm_flags(ASM_FLAGS)
+ else()
+ warning_say("Could not find cmake/${CMAKE_ASM_MASM_COMPILER_ID}/AsmFlags.cmake: will only use default flags")
+ endif()
+else()
+ # Unix (including Mac) based systems use CMAKE_ASM_COMPILER
+ # Unix assembly files can be handled by compiler usually.
+ enable_language(ASM)
+ set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/${CMAKE_ASM_COMPILER_ID} ${CMAKE_MODULE_PATH})
+ find_file(assembler_specific_include_file_found AsmFlags.cmake ${CMAKE_MODULE_PATH})
+ if(assembler_specific_include_file_found)
+ include(AsmFlags)
+ append_assembler_specific_asm_flags(ASM_FLAGS)
+ else()
+ warning_say("Could not find cmake/${CMAKE_ASM_COMPILER_ID}/AsmFlags.cmake: will only use default flags")
+ endif()
+endif()
+# Grab compiler-dependent flags
+# Cmake will look for cmake/${CMAKE_C_COMPILER_ID}/CFlags.cmake to append additional c, cxx, and linker flags.
+set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/${CMAKE_C_COMPILER_ID} ${CMAKE_MODULE_PATH})
+find_file(compiler_specific_include_file_found CFlags.cmake ${CMAKE_MODULE_PATH})
+if(compiler_specific_include_file_found)
+ include(CFlags) # COMPILER_SUPPORTS_QUAD_PRECISION changed in here
+ append_compiler_specific_c_and_cxx_flags(C_FLAGS CXX_FLAGS)
+ append_compiler_specific_linker_flags(LD_FLAGS LD_LIB_FLAGS)
+else()
+ warning_say("Could not find cmake/${CMAKE_C_COMPILER_ID}/CFlags.cmake: will only use default flags")
+endif()
+
+# Grab all the compiler-independent flags
+append_c_and_cxx_flags_common(C_FLAGS CXX_FLAGS)
+append_asm_flags_common(ASM_FLAGS)
+append_fort_flags_common(F_FLAGS)
+append_linker_flags_common(LD_FLAGS LD_LIB_FLAGS)
+append_archiver_flags_common(AR_FLAGS)
+append_cpp_flags(DEFINITIONS_FLAGS)
+
+# Setup the flags correctly for cmake (covert to string)
+# Pretty them up (STRIP any beginning and trailing whitespace)
+list_to_string("${DEFINITIONS_FLAGS}" DEFINITIONS_FLAGS)
+list_to_string("${C_FLAGS}" C_FLAGS )
+list_to_string("${CXX_FLAGS}" CXX_FLAGS )
+list_to_string("${ASM_FLAGS}" ASM_FLAGS )
+list_to_string("${LD_FLAGS}" LD_FLAGS )
+list_to_string("${LD_LIB_FLAGS}" LD_LIB_FLAGS )
+list_to_string("${AR_FLAGS}" AR_FLAGS ) # Windows specific for creating import library
+string(STRIP "${DEFINITIONS_FLAGS}" DEFINITIONS_FLAGS)
+string(STRIP "${C_FLAGS}" C_FLAGS )
+string(STRIP "${CXX_FLAGS}" CXX_FLAGS )
+string(STRIP "${ASM_FLAGS}" ASM_FLAGS )
+string(STRIP "${LD_FLAGS}" LD_FLAGS )
+string(STRIP "${LD_LIB_FLAGS}" LD_LIB_FLAGS )
+string(STRIP "${AR_FLAGS}" AR_FLAGS ) # Windows specific for creating import library
+
+# Grab the Perl flags
+set_ev_flags(ev_flags) # expand-vars.pl flags
+set_gd_flags(gd_flags) # generate-def.pl flags (Windows only)
+set(oa_opts "--os=${real_os}" "--arch=${arch}") # sent to the perl scripts
+
+#########################################################
+# Getting correct source files (cmake/SourceFiles.cmake)
+set_c_files(lib_c_items)
+set_cpp_files(lib_cxx_items)
+set_asm_files(lib_asm_items)
+set_imp_c_files(imp_c_items) # Windows-specific
+
+###################################
+# Setting all source file variables
+set(lib_src_files "${lib_c_items}" "${lib_cxx_items}" "${lib_asm_items}")
+set(imp_src_files "${imp_c_items}")
+add_prefix("${src_dir}/" lib_src_files)
+add_prefix("${src_dir}/" imp_src_files) # Windows-specific
+add_prefix("${src_dir}/" lib_c_items )
+add_prefix("${src_dir}/" lib_cxx_items)
+add_prefix("${src_dir}/" lib_asm_items)
+add_prefix("${src_dir}/" imp_c_items ) # Windows-specific
+
+#####################################################################
+# Debug print outs. Will print "variable = ${variable}" if GLOBAL_DEBUG == 1
+if(GLOBAL_DEBUG)
+ include(CMakePrintSystemInformation)
+endif()
+debug_say_var(CMAKE_ASM_COMPILE_OBJECT)
+debug_say_var(CMAKE_RC_COMPILER)
+debug_say_var(CMAKE_C_COMPILER_ID)
+debug_say_var(LIBOMP_WORK)
+debug_say_var(date)
+debug_say_var(stats)
+debug_say_var(lib_file)
+debug_say_var(export_lib_files)
+debug_say_var(DEFINITIONS_FLAGS)
+debug_say_var(C_FLAGS)
+debug_say_var(CXX_FLAGS)
+debug_say_var(ASM_FLAGS)
+debug_say_var(F_FLAGS)
+debug_say_var(LD_FLAGS)
+debug_say_var(LD_LIB_FLAGS)
+debug_say_var(AR_FLAGS)
+debug_say_var(ev_flags)
+debug_say_var(gd_flags)
+debug_say_var(oa_opts)
+debug_say_var(lib_c_items)
+debug_say_var(lib_cxx_items)
+debug_say_var(lib_asm_items)
+debug_say_var(imp_c_items)
+debug_say_var(lib_src_files)
+debug_say_var(imp_src_files)
+
+####################################################################
+# --------------------- #
+# --- Rules/Recipes --- #
+# --------------------- #
+####################################################################
+# Below, ${ldeps} always stands for "local dependencies" for the
+# next immediate target to be created via add_custom_target() or
+# add_custom_command()
+
+####################
+# --- Create all ---
+add_custom_target(lib ALL DEPENDS ${export_lib_files})
+add_custom_target(inc ALL DEPENDS ${export_inc_files})
+if(${create_fortran_modules})
+add_custom_target(mod ALL DEPENDS ${export_mod_files})
+endif()
+# --- Enforce the tests to be completed/skipped before copying to exports directory ---
+if(${tests})
+ if(${WINDOWS})
+ set(test-dependencies test-touch-mt/.success test-touch-md/.success test-relo/.success test-execstack/.success test-instr/.success test-deps/.success)
+ else()
+ set(test-dependencies test-touch-rt/.success test-relo/.success test-execstack/.success test-instr/.success test-deps/.success)
+ endif()
+ set_source_files_properties(${export_lib_files} PROPERTIES OBJECT_DEPENDS "${test-dependencies}")
+endif()
+
+#############################
+# --- Create Common Files ---
+add_custom_target(common DEPENDS ${export_cmn_files})
+add_custom_target(clean-common COMMAND ${CMAKE_COMMAND} -E remove -f ${export_cmn_files})
+
+##########################################
+# --- Copy files to export directories ---
+# - just a simple copy recipe which acts as an install step
+# - copies out of the src_dir into the dest_dir
+#
+# dest_dir/target : src_dir/target
+# cp src_dir/target dest_dir/target
+macro (simple_copy_recipe target src_dir dest_dir)
+ get_source_file_property(extra_depends ${dest_dir}/${target} OBJECT_DEPENDS)
+ if("${extra_depends}" MATCHES "NOTFOUND")
+ set(extra_depends)
+ endif()
+ set(ldeps ${src_dir}/${target} "${extra_depends}")
+ if(NOT "${target}" STREQUAL "")
+ file(MAKE_DIRECTORY ${dest_dir}) # make sure destination directory exists
+ add_custom_command(
+ OUTPUT ${dest_dir}/${target}
+ COMMAND ${CMAKE_COMMAND} -E copy ${src_dir}/${target} ${dest_dir}/${target}
+ DEPENDS ${ldeps}
+ )
+ endif()
+endmacro()
+# copy from build directory to final resting places in exports directory
+simple_copy_recipe("omp.h" "${build_dir}" "${export_cmn_dir}/include")
+simple_copy_recipe("omp_lib.h" "${build_dir}" "${export_cmn_dir}/include")
+simple_copy_recipe("omp_lib.f" "${build_dir}" "${export_cmn_dir}/include")
+simple_copy_recipe("omp_lib.f90" "${build_dir}" "${export_cmn_dir}/include")
+simple_copy_recipe("iomp.h" "${build_dir}" "${export_cmn_dir}/include_compat")
+simple_copy_recipe("${lib_file}" "${build_dir}" "${export_lib_dir}")
+simple_copy_recipe("${imp_file}" "${build_dir}" "${export_lib_dir}")
+simple_copy_recipe("${pdb_file}" "${build_dir}" "${export_lib_dir}")
+simple_copy_recipe("${dbg_file}" "${build_dir}" "${export_lib_dir}")
+simple_copy_recipe("omp_lib.mod" "${build_dir}" "${export_ptf_dir}/include")
+simple_copy_recipe("omp_lib_kinds.mod" "${build_dir}" "${export_ptf_dir}/include")
+simple_copy_recipe("iomp_lib.h" "${build_dir}" "${export_ptf_dir}/include_compat")
+
+######################################################
+# --- Build the main library ---
+# $(lib_file) <== Main library file to create
+
+# objects depend on : .inc files and omp.h
+# This way the *.inc and omp.h are generated before any compilations take place
+add_custom_target(needed-headers DEPENDS ${build_dir}/kmp_i18n_id.inc ${build_dir}/kmp_i18n_default.inc ${build_dir}/omp.h)
+
+# For Windows, there is a definitions file (.def) and resource file (.res) created using generate-def.pl and rc.exe respectively.
+if(${WINDOWS})
+ add_custom_target(needed-windows-files DEPENDS ${build_dir}/${def_file} ${build_dir}/${rc_file})
+ list(APPEND lib_src_files ${build_dir}/${rc_file})
+ # The windows assembly files are in MASM format, and they require a tool that can handle MASM syntax (ml.exe or ml64.exe typically)
+ enable_language(ASM_MASM)
+else()
+ # Unix assembly files can be handled by compiler.
+ enable_language(ASM)
+endif()
+
+# Remove any cmake-automatic linking of libraries by linker, This is so linux
+# and mac don't include libstdc++ just because we compile c++ files.
+if(${USE_PREDEFINED_LINKER_FLAGS})
+ set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "")
+ set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "")
+ set(CMAKE_ASM_IMPLICIT_LINK_LIBRARIES "")
+endif()
+
+# --- ${lib_file} rule ---
+add_library(iomp5 SHARED ${lib_src_files})
+set_target_properties(iomp5 PROPERTIES
+ PREFIX "" SUFFIX "" # Take control
+ OUTPUT_NAME "${lib_file}" # of output name
+ LINK_FLAGS "${LD_FLAGS}"
+ LINKER_LANGUAGE C # use C Compiler for linking step
+ SKIP_BUILD_RPATH true # have Mac linker -install_name just be "-install_name libiomp5.dylib"
+)
+# Target lib (export files) depend on the library (iomp5) being built
+add_dependencies(lib iomp5)
+
+# Linking command will include libraries in LD_LIB_FLAGS
+target_link_libraries(iomp5 ${LD_LIB_FLAGS})
+
+# Create *.inc and omp.h before compiling any sources
+add_dependencies(iomp5 needed-headers)
+if(${WINDOWS})
+# Create .def and .rc file before compiling any sources
+ add_dependencies(iomp5 needed-windows-files)
+endif()
+
+# Set the compiler flags for each type of source
+set_source_files_properties(${lib_c_items}
+ ${imp_c_items} PROPERTIES COMPILE_FLAGS "${C_FLAGS}" )
+set_source_files_properties(${lib_cxx_items} PROPERTIES COMPILE_FLAGS "${CXX_FLAGS}")
+set_source_files_properties(${lib_asm_items} PROPERTIES COMPILE_FLAGS "${ASM_FLAGS}")
+# Set the -D definitions for all sources
+add_definitions(${DEFINITIONS_FLAGS})
+
+# If creating a build that imitates build.pl's rules then set USE_BUILDPL_RULES to true
+if(${USE_BUILDPL_RULES})
+ include(BuildPLRules)
+endif()
+
+######################################################
+# --- Source file specific flags ---
+# kmp_version.o : -D _KMP_BUILD_TIME="\"$(date)}\""
+set_source_files_properties(${src_dir}/kmp_version.c PROPERTIES COMPILE_DEFINITIONS "_KMP_BUILD_TIME=\"\\\"${date}\\\"\"")
+
+# z_Linux_asm.o : -D KMP_ARCH_*
+if(${ARM})
+ set_source_files_properties(${src_dir}/z_Linux_asm.s PROPERTIES COMPILE_DEFINITIONS "KMP_ARCH_ARM")
+elseif(${INTEL64})
+ set_source_files_properties(${src_dir}/z_Linux_asm.s PROPERTIES COMPILE_DEFINITIONS "KMP_ARCH_X86_64")
+elseif(${IA32})
+ set_source_files_properties(${src_dir}/z_Linux_asm.s PROPERTIES COMPILE_DEFINITIONS "KMP_ARCH_X86")
+elseif(${PPC64})
+ set_source_files_properties(${src_dir}/z_Linux_asm.s PROPERTIES COMPILE_DEFINITIONS "KMP_ARCH_PPC64")
+endif()
+
+if(${WINDOWS})
+ set_source_files_properties(${src_dir}/thirdparty/ittnotify/ittnotify_static.c PROPERTIES COMPILE_DEFINITIONS "UNICODE")
+endif()
+
+######################################################
+# MAC specific build rules
+if(${MAC})
+ # fat library rules
+ if(${INTEL64})
+ _export_lib_fat_dir( "mac_32e" export_fat_mac_32e)
+ _export_lib_dir( "mac_32" export_mac_32 )
+ _export_lib_dir( "mac_32e" export_mac_32e )
+ file(MAKE_DIRECTORY ${export_fat_mac_32e})
+ add_custom_target(fat
+ COMMAND ${CMAKE_COMMAND} -E echo Building 32 and 32e fat libraries from ${export_mac_32}/${lib_file} and ${export_mac_32e}/${lib_file}
+ COMMAND ${CMAKE_COMMAND} -E echo Will put fat library in ${export_fat_mac_32e} directory
+ COMMAND lipo -create -output ${export_fat_mac_32e}/${lib_file} ${export_mac_32}/${lib_file} ${export_mac_32e}/${lib_file}
+ )
+ endif()
+endif()
+
+######################################################
+# Windows specific build rules
+if(${WINDOWS})
+
+ # --- Create $(imp_file) ---
+ # This file is first created in the unstripped/${lib_file} creation step.
+ # It is then "re-linked" to include kmp_import.c which prevents linking of both Visual Studio OpenMP and newly built OpenMP
+ if(NOT "${imp_file}" STREQUAL "")
+ set(generated_import_file ${lib_file}${lib})
+ add_library(iomp5imp STATIC ${generated_import_file} ${imp_src_files})
+ set_source_files_properties(${generated_import_file} PROPERTIES GENERATED TRUE EXTERNAL_OBJECT TRUE)
+ set_target_properties(iomp5imp PROPERTIES
+ PREFIX "" SUFFIX ""
+ OUTPUT_NAME "${imp_file}"
+ STATIC_LIBRARY_FLAGS "${AR_FLAGS}"
+ LINKER_LANGUAGE C
+ SKIP_BUILD_RPATH true
+ )
+ add_custom_command(TARGET iomp5imp PRE_BUILD COMMAND ${CMAKE_COMMAND} -E remove -f ${imp_file})
+ add_dependencies(iomp5imp iomp5)
+ endif()
+
+ # --- Create $(def_file) ---
+ if(NOT "${def_file}" STREQUAL "")
+ string_to_list("${gd_flags}" gd_flags)
+ add_custom_command(
+ OUTPUT ${def_file}
+ COMMAND ${PERL_EXECUTABLE} ${tools_dir}/generate-def.pl ${gd_flags} -o ${def_file} ${src_dir}/dllexports
+ DEPENDS ${src_dir}/dllexports ${tools_dir}/generate-def.pl
+ )
+ endif()
+
+ # --- Create $(rc_file) ---
+ if(NOT "${rc_file}" STREQUAL "")
+ add_custom_command(
+ OUTPUT ${rc_file}
+ COMMAND ${CMAKE_COMMAND} -E copy libiomp.rc ${rc_file}
+ DEPENDS libiomp.rc
+ )
+ endif()
+endif()
+
+######################################################
+# kmp_i18n_id.inc and kmp_i18n_default.inc
+set(perlcmd "${PERL_EXECUTABLE}" "${tools_dir}/message-converter.pl" "${oa_opts}" "--prefix=kmp_i18n" "--enum=kmp_i18n_id.inc" "${src_dir}/i18n/en_US.txt")
+add_custom_command(
+ OUTPUT ${build_dir}/kmp_i18n_id.inc
+ COMMAND ${perlcmd}
+ DEPENDS ${src_dir}/i18n/en_US.txt ${tools_dir}/message-converter.pl
+)
+set(perlcmd "${PERL_EXECUTABLE}" "${tools_dir}/message-converter.pl" "${oa_opts}" "--prefix=kmp_i18n" "--default=kmp_i18n_default.inc" "${src_dir}/i18n/en_US.txt")
+add_custom_command(
+ OUTPUT ${build_dir}/kmp_i18n_default.inc
+ COMMAND ${perlcmd}
+ DEPENDS ${src_dir}/i18n/en_US.txt ${tools_dir}/message-converter.pl
+)
+
+######################################################
+# Micro test rules for after library has been built (cmake/MicroTests.cmake)
+# - Only perform if ${tests} == true (specify when invoking: cmake -Dtests=on ...)
+if(${tests})
+ include(MicroTests)
+endif()
+
+######################################################
+# --- Create Fortran Files ---
+# omp_lib.mod
+if(${create_fortran_modules})
+ # Grab fortran-compiler-dependent flags
+ # Cmake will look for cmake/${CMAKE_Fortran_COMPILER_ID}/FortranFlags.cmake to append additional fortran flags.
+ enable_language(Fortran)
+ set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/${CMAKE_Fortran_COMPILER_ID} ${CMAKE_MODULE_PATH})
+ find_file(fortran_specific_include_file_found FortranFlags.cmake ${CMAKE_MODULE_PATH})
+ if(fortran_specific_include_file_found)
+ include(FortranFlags)
+ append_fortran_compiler_specific_fort_flags(F_FLAGS)
+ else()
+ warning_say("Could not find cmake/${CMAKE_Fortran_COMPILER_ID}/FortranFlags.cmake: will only use default flags in CommonFlags.cmake")
+ endif()
+ set(omp_lib_f "omp_lib.f90" )
+ add_custom_command(
+ OUTPUT "omp_lib.mod"
+ COMMAND ${CMAKE_Fortran_COMPILER} -c ${F_FLAGS} ${omp_lib_f}
+ DEPENDS ${omp_lib_f}
+ )
+ add_custom_command(
+ OUTPUT "omp_lib_kinds.mod"
+ COMMAND ${CMAKE_Fortran_COMPILER} -c ${F_FLAGS} ${omp_lib_f}
+ DEPENDS ${omp_lib_f}
+ )
+ # clean omp_lib.o from build directory when "make clean"
+ set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES omp_lib${obj})
+endif()
+
+###############################################################
+# --- Using expand-vars.pl to generate files ---
+# - 'file' is generated using expand-vars.pl and 'file'.var
+# - Any .h .f .f90 .rc files should be created with this recipe
+macro(expand_vars_recipe filename)
+ get_source_file_property(extra_ev_flags ${filename} COMPILE_DEFINITIONS)
+ if("${extra_ev_flags}" MATCHES "NOTFOUND")
+ set(extra_ev_flags)
+ else()
+ string_to_list("${extra_ev_flags}" extra_ev_flags)
+ endif()
+ find_file(${filename}_path ${filename}.var PATHS ${src_dir}/include/${omp_version} ${src_dir})
+ set(ldeps "${${filename}_path}" "${src_dir}/kmp_version.c" "${tools_dir}/expand-vars.pl")
+ set(expandvarscmd ${PERL_EXECUTABLE} ${tools_dir}/expand-vars.pl --strict ${ev_flags} ${extra_ev_flags} ${${filename}_path} ${filename})
+ if(NOT "${filename}" STREQUAL "")
+ add_custom_command(
+ OUTPUT ${filename}
+ COMMAND ${expandvarscmd}
+ DEPENDS ${ldeps}
+ )
+ endif()
+endmacro()
+string_to_list("${ev_flags}" ev_flags)
+# omp_lib.h : ev-flags += -D KMP_INT_PTR_KIND="int_ptr_kind()"
+set_source_files_properties(omp_lib.h PROPERTIES COMPILE_DEFINITIONS "-D KMP_INT_PTR_KIND=\"int_ptr_kind()\"")
+# iomp_lib.h : ev-flags += -D KMP_INT_PTR_KIND=$(if $(filter 32,$(arch)),4,8)
+if(${IA32}) # 32 bit archs
+ set_source_files_properties(iomp_lib.h PROPERTIES COMPILE_DEFINITIONS "-D KMP_INT_PTR_KIND=4")
+else()
+ set_source_files_properties(iomp_lib.h PROPERTIES COMPILE_DEFINITIONS "-D KMP_INT_PTR_KIND=8")
+endif()
+# libiomp.rc : ev-flags += -D KMP_FILE=$(lib_file)
+set_source_files_properties(libiomp.rc PROPERTIES COMPILE_DEFINITIONS "-D KMP_FILE=${lib_file}")
+expand_vars_recipe(omp.h)
+expand_vars_recipe(omp_lib.h)
+expand_vars_recipe(omp_lib.f)
+expand_vars_recipe(omp_lib.f90)
+expand_vars_recipe(iomp.h)
+expand_vars_recipe(iomp_lib.h)
+expand_vars_recipe(libiomp.rc)
+
+
+####################################################################
+# Print configuration after all variables are set.
+say("")
+say("----------------------- CONFIGURATION -----------------------")
+say("Operating System : ${os}")
+say("Architecture : ${arch}")
+say("Build Type : ${CMAKE_BUILD_TYPE}")
+say("OpenMP Version : ${omp_version}")
+say("Lib Type : ${lib_type}")
+if(${MIC})
+ say("Intel(R) MIC Architecture : ${mic_arch}")
+ say("Intel(R) MIC Architecture OS : ${mic_os}")
+endif()
+say("Fortran Modules : ${create_fortran_modules}")
+# will say development if all zeros
+if("${build_number}" STREQUAL "00000000")
+ set(build "development")
+else()
+ set(build "${build_number}")
+endif()
+say("Build : ${build}")
+say("Stats-Gathering : ${stats}")
+say("Use build.pl rules : ${USE_BUILDPL_RULES}")
+say("Adaptive locks : ${USE_ADAPTIVE_LOCKS}")
+say("Use predefined linker flags : ${USE_PREDEFINED_LINKER_FLAGS}")
+say("Compiler supports quad precision : ${COMPILER_SUPPORTS_QUAD_PRECISION}")
+say("-------------------------------------------------------------")
+say("")
-add_subdirectory(src)
Modified: openmp/branches/release_35/runtime/src/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/openmp/branches/release_35/runtime/src/CMakeLists.txt?rev=215098&r1=215097&r2=215098&view=diff
==============================================================================
--- openmp/branches/release_35/runtime/src/CMakeLists.txt (original)
+++ openmp/branches/release_35/runtime/src/CMakeLists.txt Thu Aug 7 06:16:59 2014
@@ -22,11 +22,17 @@ else()
message(FATAL_ERROR "Unsupported OS")
endif()
-if("${ARCH}" STREQUAL "")
+if(arch)
+ set(ARCH ${arch}) #acquire from command line
+else() #assume default
set(ARCH "32e")
endif()
-set(ARCH_STR "Intel(R) 64")
+if("${arch}" STREQUAL "32e")
+ set(ARCH_STR "Intel(R) 64")
+elseif("${arch}" STREQUAL "ppc64")
+ set(ARCH_STR "PPC64")
+endif()
set(FEATURE_FLAGS "-D USE_ITT_BUILD")
set(FEATURE_FLAGS "${FEATURE_FLAGS} -D NDEBUG")
@@ -36,13 +42,22 @@ set(FEATURE_FLAGS "${FEATURE_FLAGS} -D _
set(FEATURE_FLAGS "${FEATURE_FLAGS} -D KMP_USE_ASSERT")
set(FEATURE_FLAGS "${FEATURE_FLAGS} -D BUILD_I8")
set(FEATURE_FLAGS "${FEATURE_FLAGS} -D BUILD_TV")
+
if(APPLE)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -current_version 5.0")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -compatibility_version 5.0")
endif()
+
set(FEATURE_FLAGS "${FEATURE_FLAGS} -D KMP_LIBRARY_FILE=\\\"libiomp5.${OMP_SHLIBEXT}\\\"")
set(FEATURE_FLAGS "${FEATURE_FLAGS} -D KMP_VERSION_MAJOR=${VERSION}")
-set(FEATURE_FLAGS "${FEATURE_FLAGS} -D CACHE_LINE=64")
+
+# customize cache line size for ppc64 to 128 bytes: 64 in all other cases
+if("${arch}" STREQUAL "ppc64")
+ set(FEATURE_FLAGS "${FEATURE_FLAGS} -D CACHE_LINE=128")
+else()
+ set(FEATURE_FLAGS "${FEATURE_FLAGS} -D CACHE_LINE=64")
+endif()
+
set(FEATURE_FLAGS "${FEATURE_FLAGS} -D KMP_ADJUST_BLOCKTIME=1")
set(FEATURE_FLAGS "${FEATURE_FLAGS} -D BUILD_PARALLEL_ORDERED")
set(FEATURE_FLAGS "${FEATURE_FLAGS} -D KMP_ASM_INTRINS")
@@ -50,8 +65,13 @@ set(FEATURE_FLAGS "${FEATURE_FLAGS} -D U
set(FEATURE_FLAGS "${FEATURE_FLAGS} -D USE_CBLKDATA")
set(FEATURE_FLAGS "${FEATURE_FLAGS} -D GUIDEDLL_EXPORTS")
set(FEATURE_FLAGS "${FEATURE_FLAGS} -D KMP_GOMP_COMPAT")
-set(FEATURE_FLAGS "${FEATURE_FLAGS} -D KMP_USE_ADAPTIVE_LOCKS=1")
-set(FEATURE_FLAGS "${FEATURE_FLAGS} -D KMP_DEBUG_ADAPTIVE_LOCKS=0")
+
+#adaptive locks use x86 assembly - disable for ppc64
+if("${arch}" STREQUAL "32e" OR "${arch}" STREQUAL "32" OR "${arch}" STREQUAL "arm")
+ set(FEATURE_FLAGS "${FEATURE_FLAGS} -D KMP_USE_ADAPTIVE_LOCKS=1")
+ set(FEATURE_FLAGS "${FEATURE_FLAGS} -D KMP_DEBUG_ADAPTIVE_LOCKS=0")
+endif()
+
set(FEATURE_FLAGS "${FEATURE_FLAGS} -D OMP_50_ENABLED=0")
set(FEATURE_FLAGS "${FEATURE_FLAGS} -D OMP_41_ENABLED=0")
set(FEATURE_FLAGS "${FEATURE_FLAGS} -D OMP_40_ENABLED=1")
@@ -122,16 +142,38 @@ add_custom_command(
OUTPUT omp.h
COMMAND perl ${CMAKE_CURRENT_SOURCE_DIR}/../tools/expand-vars.pl --strict -D Revision=\"\\$$Revision\" -D Date=\"\\$$Date\" -D KMP_TYPE=\"Performance\" -D KMP_ARCH=\"\\\"${ARCH_STR}\\\"\" -D KMP_VERSION_MAJOR=${VERSION} -D KMP_VERSION_MINOR=0 -D KMP_VERSION_BUILD=00000000 -D KMP_BUILD_DATE=\"${BUILD_TIME} UTC\" -D KMP_TARGET_COMPILER=12 -D KMP_DIAG=0 -D KMP_DEBUG_INFO=0 -D OMP_VERSION=${OMP_VERSION} ${CMAKE_CURRENT_SOURCE_DIR}/include/${OMP_VERSION_NUM}/omp.h.var omp.h
)
-add_custom_command(
- OUTPUT z_Linux_asm.o
- COMMAND ${CMAKE_CXX_COMPILER} -c -o z_Linux_asm.o -D KMP_ASM_INTRINS -D KMP_GOMP_COMPAT -D KMP_ARCH_X86_64 -x assembler-with-cpp ${CMAKE_CURRENT_SOURCE_DIR}/${ASM_SOURCES}
-)
+
+if("${ARCH}" STREQUAL "ppc64")
+ add_custom_command(
+ OUTPUT z_Linux_asm.o
+ COMMAND ${CMAKE_CXX_COMPILER} -c -o z_Linux_asm.o -D KMP_ASM_INTRINS -D KMP_GOMP_COMPAT -D KMP_ARCH_PPC64 -x assembler-with-cpp ${CMAKE_CURRENT_SOURCE_DIR}/${ASM_SOURCES}
+ )
+else()
+ add_custom_command(
+ OUTPUT z_Linux_asm.o
+ COMMAND ${CMAKE_CXX_COMPILER} -c -o z_Linux_asm.o -D KMP_ASM_INTRINS -D KMP_GOMP_COMPAT -D KMP_ARCH_X86_64 -x assembler-with-cpp ${CMAKE_CURRENT_SOURCE_DIR}/${ASM_SOURCES}
+ )
+endif()
+
add_custom_target(gen_kmp_i18n DEPENDS kmp_i18n_id.inc kmp_i18n_default.inc omp.h z_Linux_asm.o)
if(NOT APPLE)
- set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/exports_so.txt")
+ if(${ARCH} STREQUAL "ppc64" AND ${OS_GEN} STREQUAL "lin")
+ set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/exports_so.txt -ldl")
+ else()
+ set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/exports_so.txt")
+ endif()
endif()
add_library(iomp5 SHARED ${SOURCES} z_Linux_asm.o)
+
+# This is a workaround to a known ppc64 issue about libpthread. For more
+# information see
+# http://ryanarn.blogspot.com/2011/07/curious-case-of-pthreadatfork-on.html
+if("${ARCH}" STREQUAL "ppc64")
+ find_library(PTHREAD NAMES pthread)
+ target_link_libraries(iomp5 ${PTHREAD})
+endif()
+
add_dependencies(iomp5 gen_kmp_i18n)
Modified: openmp/branches/release_35/runtime/src/dllexports
URL: http://llvm.org/viewvc/llvm-project/openmp/branches/release_35/runtime/src/dllexports?rev=215098&r1=215097&r2=215098&view=diff
==============================================================================
--- openmp/branches/release_35/runtime/src/dllexports (original)
+++ openmp/branches/release_35/runtime/src/dllexports Thu Aug 7 06:16:59 2014
@@ -471,7 +471,9 @@ kmp_set_warnings_off
# ATOMIC entries
+ %ifdef HAVE_QUAD
__kmpc_atomic_cmplx16_div 2000
+ %endif
__kmpc_atomic_fixed1_add 2001
__kmpc_atomic_fixed1_andb 2002
@@ -577,6 +579,7 @@ kmp_set_warnings_off
__kmpc_atomic_cmplx10_sub 2094
__kmpc_atomic_cmplx10_mul 2095
__kmpc_atomic_cmplx10_div 2096
+ %ifdef HAVE_QUAD
__kmpc_atomic_cmplx16_add 2097
__kmpc_atomic_cmplx16_sub 2098
__kmpc_atomic_cmplx16_mul 2099
@@ -627,6 +630,7 @@ kmp_set_warnings_off
__kmpc_atomic_float10_sub_fp 2136
__kmpc_atomic_float10_mul_fp 2137
__kmpc_atomic_float10_div_fp 2138
+ %endif
__kmpc_atomic_fixed1_mul_float8 2169
__kmpc_atomic_fixed1_div_float8 2170
@@ -661,6 +665,7 @@ kmp_set_warnings_off
%ifdef arch_32
+ %ifdef HAVE_QUAD
__kmpc_atomic_float16_add_a16 2255
__kmpc_atomic_float16_sub_a16 2256
__kmpc_atomic_float16_mul_a16 2257
@@ -672,6 +677,7 @@ kmp_set_warnings_off
__kmpc_atomic_cmplx16_sub_a16 2262
__kmpc_atomic_cmplx16_mul_a16 2263
__kmpc_atomic_cmplx16_div_a16 2264
+ %endif
%endif
@@ -686,14 +692,18 @@ kmp_set_warnings_off
__kmpc_atomic_float4_rd 2269
__kmpc_atomic_float8_rd 2270
__kmpc_atomic_float10_rd 2271
+ %ifdef HAVE_QUAD
__kmpc_atomic_float16_rd 2272
+ %endif
__kmpc_atomic_cmplx4_rd 2273
__kmpc_atomic_cmplx8_rd 2274
__kmpc_atomic_cmplx10_rd 2275
+ %ifdef HAVE_QUAD
__kmpc_atomic_cmplx16_rd 2276
- %ifdef arch_32
- __kmpc_atomic_float16_a16_rd 2277
- __kmpc_atomic_cmplx16_a16_rd 2278
+ %ifdef arch_32
+ __kmpc_atomic_float16_a16_rd 2277
+ __kmpc_atomic_cmplx16_a16_rd 2278
+ %endif
%endif
__kmpc_atomic_fixed1_wr 2279
__kmpc_atomic_fixed2_wr 2280
@@ -702,15 +712,19 @@ kmp_set_warnings_off
__kmpc_atomic_float4_wr 2283
__kmpc_atomic_float8_wr 2284
__kmpc_atomic_float10_wr 2285
+ %ifdef HAVE_QUAD
__kmpc_atomic_float16_wr 2286
+ %endif
__kmpc_atomic_cmplx4_wr 2287
__kmpc_atomic_cmplx8_wr 2288
__kmpc_atomic_cmplx10_wr 2289
+ %ifdef HAVE_QUAD
__kmpc_atomic_cmplx16_wr 2290
%ifdef arch_32
__kmpc_atomic_float16_a16_wr 2291
__kmpc_atomic_cmplx16_a16_wr 2292
%endif
+ %endif
__kmpc_atomic_fixed1_add_cpt 2293
__kmpc_atomic_fixed1_andb_cpt 2294
__kmpc_atomic_fixed1_div_cpt 2295
@@ -783,8 +797,10 @@ kmp_set_warnings_off
__kmpc_atomic_float4_min_cpt 2362
__kmpc_atomic_float8_max_cpt 2363
__kmpc_atomic_float8_min_cpt 2364
+ %ifdef HAVE_QUAD
__kmpc_atomic_float16_max_cpt 2365
__kmpc_atomic_float16_min_cpt 2366
+ %endif
__kmpc_atomic_fixed1_neqv_cpt 2367
__kmpc_atomic_fixed2_neqv_cpt 2368
__kmpc_atomic_fixed4_neqv_cpt 2369
@@ -797,10 +813,12 @@ kmp_set_warnings_off
__kmpc_atomic_float10_sub_cpt 2376
__kmpc_atomic_float10_mul_cpt 2377
__kmpc_atomic_float10_div_cpt 2378
+ %ifdef HAVE_QUAD
__kmpc_atomic_float16_add_cpt 2379
__kmpc_atomic_float16_sub_cpt 2380
__kmpc_atomic_float16_mul_cpt 2381
__kmpc_atomic_float16_div_cpt 2382
+ %endif
__kmpc_atomic_cmplx4_add_cpt 2383
__kmpc_atomic_cmplx4_sub_cpt 2384
__kmpc_atomic_cmplx4_mul_cpt 2385
@@ -813,13 +831,16 @@ kmp_set_warnings_off
__kmpc_atomic_cmplx10_sub_cpt 2392
__kmpc_atomic_cmplx10_mul_cpt 2393
__kmpc_atomic_cmplx10_div_cpt 2394
+ %ifdef HAVE_QUAD
__kmpc_atomic_cmplx16_add_cpt 2395
__kmpc_atomic_cmplx16_sub_cpt 2396
__kmpc_atomic_cmplx16_mul_cpt 2397
__kmpc_atomic_cmplx16_div_cpt 2398
+ %endif
#__kmpc_atomic_cmplx4_add_cpt_tmp 2409
%ifdef arch_32
+ %ifdef HAVE_QUAD
__kmpc_atomic_float16_add_a16_cpt 2399
__kmpc_atomic_float16_sub_a16_cpt 2400
__kmpc_atomic_float16_mul_a16_cpt 2401
@@ -831,6 +852,7 @@ kmp_set_warnings_off
__kmpc_atomic_cmplx16_mul_a16_cpt 2407
__kmpc_atomic_cmplx16_div_a16_cpt 2408
%endif
+ %endif
__kmpc_atomic_start 2410
__kmpc_atomic_end 2411
@@ -846,16 +868,20 @@ kmp_set_warnings_off
__kmpc_atomic_float4_swp 2416
__kmpc_atomic_float8_swp 2417
__kmpc_atomic_float10_swp 2418
+ %ifdef HAVE_QUAD
__kmpc_atomic_float16_swp 2419
+ %endif
__kmpc_atomic_cmplx4_swp 2420
__kmpc_atomic_cmplx8_swp 2421
__kmpc_atomic_cmplx10_swp 2422
+ %ifdef HAVE_QUAD
__kmpc_atomic_cmplx16_swp 2423
%ifdef arch_32
__kmpc_atomic_float16_a16_swp 2424
__kmpc_atomic_cmplx16_a16_swp 2425
%endif
+ %endif
__kmpc_atomic_fixed1_sub_cpt_rev 2426
__kmpc_atomic_fixed1_div_cpt_rev 2427
@@ -887,14 +913,17 @@ kmp_set_warnings_off
__kmpc_atomic_float8_div_cpt_rev 2453
__kmpc_atomic_float10_sub_cpt_rev 2454
__kmpc_atomic_float10_div_cpt_rev 2455
+ %ifdef HAVE_QUAD
__kmpc_atomic_float16_sub_cpt_rev 2456
__kmpc_atomic_float16_div_cpt_rev 2457
+ %endif
__kmpc_atomic_cmplx4_sub_cpt_rev 2458
__kmpc_atomic_cmplx4_div_cpt_rev 2459
__kmpc_atomic_cmplx8_sub_cpt_rev 2460
__kmpc_atomic_cmplx8_div_cpt_rev 2461
__kmpc_atomic_cmplx10_sub_cpt_rev 2462
__kmpc_atomic_cmplx10_div_cpt_rev 2463
+ %ifdef HAVE_QUAD
__kmpc_atomic_cmplx16_sub_cpt_rev 2464
__kmpc_atomic_cmplx16_div_cpt_rev 2465
@@ -904,6 +933,7 @@ kmp_set_warnings_off
__kmpc_atomic_cmplx16_sub_a16_cpt_rev 2468
__kmpc_atomic_cmplx16_div_a16_cpt_rev 2469
%endif
+ %endif
%endif # OMP_40
Modified: openmp/branches/release_35/runtime/src/kmp.h
URL: http://llvm.org/viewvc/llvm-project/openmp/branches/release_35/runtime/src/kmp.h?rev=215098&r1=215097&r2=215098&view=diff
==============================================================================
--- openmp/branches/release_35/runtime/src/kmp.h (original)
+++ openmp/branches/release_35/runtime/src/kmp.h Thu Aug 7 06:16:59 2014
@@ -459,9 +459,9 @@ typedef int PACKED_REDUCTION_METHOD_T;
/*
* Only Linux* OS and Windows* OS support thread affinity.
*/
-#if KMP_OS_LINUX || KMP_OS_WINDOWS
+#if (KMP_OS_LINUX || KMP_OS_WINDOWS) && !KMP_OS_CNK && !KMP_ARCH_PPC64
# define KMP_AFFINITY_SUPPORTED 1
-#elif KMP_OS_DARWIN || KMP_OS_FREEBSD
+#elif KMP_OS_DARWIN || KMP_OS_FREEBSD || KMP_OS_CNK || KMP_ARCH_PPC64
// affinity not supported
# define KMP_AFFINITY_SUPPORTED 0
#else
@@ -476,7 +476,7 @@ extern size_t __kmp_affin_mask_size;
# if KMP_OS_LINUX
//
-// On Linux* OS, the mask isactually a vector of length __kmp_affin_mask_size
+// On Linux* OS, the mask is actually a vector of length __kmp_affin_mask_size
// (in bytes). It should be allocated on a word boundary.
//
// WARNING!!! We have made the base type of the affinity mask unsigned char,
@@ -946,6 +946,9 @@ extern unsigned int __kmp_place_core_off
#if KMP_OS_WINDOWS
# define KMP_INIT_WAIT 64U /* initial number of spin-tests */
# define KMP_NEXT_WAIT 32U /* susequent number of spin-tests */
+#elif KMP_OS_CNK
+# define KMP_INIT_WAIT 16U /* initial number of spin-tests */
+# define KMP_NEXT_WAIT 8U /* susequent number of spin-tests */
#elif KMP_OS_LINUX
# define KMP_INIT_WAIT 1024U /* initial number of spin-tests */
# define KMP_NEXT_WAIT 512U /* susequent number of spin-tests */
@@ -971,6 +974,11 @@ extern void __kmp_x86_cpuid( int mode, i
extern void __kmp_x86_pause( void );
# endif
# define KMP_CPU_PAUSE() __kmp_x86_pause()
+#elif KMP_ARCH_PPC64
+# define KMP_PPC64_PRI_LOW() __asm__ volatile ("or 1, 1, 1")
+# define KMP_PPC64_PRI_MED() __asm__ volatile ("or 2, 2, 2")
+# define KMP_PPC64_PRI_LOC_MB() __asm__ volatile ("" : : : "memory")
+# define KMP_CPU_PAUSE() do { KMP_PPC64_PRI_LOW(); KMP_PPC64_PRI_MED(); KMP_PPC64_PRI_LOC_MB(); } while (0)
#else
# define KMP_CPU_PAUSE() /* nothing to do */
#endif
Modified: openmp/branches/release_35/runtime/src/kmp_csupport.c
URL: http://llvm.org/viewvc/llvm-project/openmp/branches/release_35/runtime/src/kmp_csupport.c?rev=215098&r1=215097&r2=215098&view=diff
==============================================================================
--- openmp/branches/release_35/runtime/src/kmp_csupport.c (original)
+++ openmp/branches/release_35/runtime/src/kmp_csupport.c Thu Aug 7 06:16:59 2014
@@ -828,7 +828,7 @@ __kmpc_flush(ident_t *loc, ...)
if ( ! __kmp_cpuinfo.sse2 ) {
// CPU cannot execute SSE2 instructions.
} else {
- #if KMP_COMPILER_ICC
+ #if KMP_COMPILER_ICC || KMP_COMPILER_MSVC
_mm_mfence();
#else
__sync_synchronize();
@@ -837,6 +837,19 @@ __kmpc_flush(ident_t *loc, ...)
#endif // KMP_MIC
#elif KMP_ARCH_ARM
// Nothing yet
+ #elif KMP_ARCH_PPC64
+ // Nothing needed here (we have a real MB above).
+ #if KMP_OS_CNK
+ // The flushing thread needs to yield here; this prevents a
+ // busy-waiting thread from saturating the pipeline. flush is
+ // often used in loops like this:
+ // while (!flag) {
+ // #pragma omp flush(flag)
+ // }
+ // and adding the yield here is good for at least a 10x speedup
+ // when running >2 threads per core (on the NAS LU benchmark).
+ __kmp_yield(TRUE);
+ #endif
#else
#error Unknown or unsupported architecture
#endif
Modified: openmp/branches/release_35/runtime/src/kmp_ftn_entry.h
URL: http://llvm.org/viewvc/llvm-project/openmp/branches/release_35/runtime/src/kmp_ftn_entry.h?rev=215098&r1=215097&r2=215098&view=diff
==============================================================================
--- openmp/branches/release_35/runtime/src/kmp_ftn_entry.h (original)
+++ openmp/branches/release_35/runtime/src/kmp_ftn_entry.h Thu Aug 7 06:16:59 2014
@@ -263,7 +263,7 @@ FTN_GET_AFFINITY_MAX_PROC( void )
#if KMP_OS_WINDOWS && KMP_ARCH_X86_64
if ( __kmp_num_proc_groups <= 1 ) {
- return KMP_CPU_SETSIZE;
+ return (int)KMP_CPU_SETSIZE;
}
#endif /* KMP_OS_WINDOWS && KMP_ARCH_X86_64 */
return __kmp_xproc;
@@ -412,7 +412,7 @@ xexpand(FTN_GET_THREAD_NUM)( void )
gtid = __kmp_entry_gtid();
#elif KMP_OS_WINDOWS
if (!__kmp_init_parallel ||
- (gtid = ((kmp_intptr_t)TlsGetValue( __kmp_gtid_threadprivate_key ))) == 0) {
+ (gtid = (int)((kmp_intptr_t)TlsGetValue( __kmp_gtid_threadprivate_key ))) == 0) {
// Either library isn't initialized or thread is not registered
// 0 is the correct TID in this case
return 0;
@@ -463,7 +463,6 @@ xexpand(FTN_GET_NUM_PROCS)( void )
#ifdef KMP_STUB
return 1;
#else
- int gtid;
if ( ! TCR_4(__kmp_init_middle) ) {
__kmp_middle_initialize();
}
@@ -1013,7 +1012,7 @@ FTN_SET_DEFAULTS( char const * str
{
#ifndef KMP_STUB
#ifdef PASS_ARGS_BY_VALUE
- int len = strlen( str );
+ int len = (int)strlen( str );
#endif
__kmp_aux_set_defaults( str, len );
#endif
Modified: openmp/branches/release_35/runtime/src/kmp_ftn_os.h
URL: http://llvm.org/viewvc/llvm-project/openmp/branches/release_35/runtime/src/kmp_ftn_os.h?rev=215098&r1=215097&r2=215098&view=diff
==============================================================================
--- openmp/branches/release_35/runtime/src/kmp_ftn_os.h (original)
+++ openmp/branches/release_35/runtime/src/kmp_ftn_os.h Thu Aug 7 06:16:59 2014
@@ -478,7 +478,7 @@
//#define KMP_API_NAME_GOMP_TARGET_UPDATE GOMP_target_update
#define KMP_API_NAME_GOMP_TEAMS GOMP_teams
-#if KMP_OS_LINUX
+#if KMP_OS_LINUX && !KMP_OS_CNK && !KMP_ARCH_PPC64
#define xstr(x) str(x)
#define str(x) #x
Modified: openmp/branches/release_35/runtime/src/kmp_global.c
URL: http://llvm.org/viewvc/llvm-project/openmp/branches/release_35/runtime/src/kmp_global.c?rev=215098&r1=215097&r2=215098&view=diff
==============================================================================
--- openmp/branches/release_35/runtime/src/kmp_global.c (original)
+++ openmp/branches/release_35/runtime/src/kmp_global.c Thu Aug 7 06:16:59 2014
@@ -321,7 +321,11 @@ int __kmp_env_consistency_check
kmp_uint32 __kmp_yield_init = KMP_INIT_WAIT;
kmp_uint32 __kmp_yield_next = KMP_NEXT_WAIT;
kmp_uint32 __kmp_yielding_on = 1;
+#if KMP_OS_CNK
+kmp_uint32 __kmp_yield_cycle = 0;
+#else
kmp_uint32 __kmp_yield_cycle = 1; /* Yield-cycle is on by default */
+#endif
kmp_int32 __kmp_yield_on_count = 10; /* By default, yielding is on for 10 monitor periods. */
kmp_int32 __kmp_yield_off_count = 1; /* By default, yielding is off for 1 monitor periods. */
/* ----------------------------------------------------- */
Modified: openmp/branches/release_35/runtime/src/kmp_gsupport.c
URL: http://llvm.org/viewvc/llvm-project/openmp/branches/release_35/runtime/src/kmp_gsupport.c?rev=215098&r1=215097&r2=215098&view=diff
==============================================================================
--- openmp/branches/release_35/runtime/src/kmp_gsupport.c (original)
+++ openmp/branches/release_35/runtime/src/kmp_gsupport.c Thu Aug 7 06:16:59 2014
@@ -15,7 +15,7 @@
//===----------------------------------------------------------------------===//
-#if defined(__x86_64)
+#if defined(__x86_64) || defined (__powerpc64__)
# define KMP_I8
#endif
#include "kmp.h"
Modified: openmp/branches/release_35/runtime/src/kmp_lock.h
URL: http://llvm.org/viewvc/llvm-project/openmp/branches/release_35/runtime/src/kmp_lock.h?rev=215098&r1=215097&r2=215098&view=diff
==============================================================================
--- openmp/branches/release_35/runtime/src/kmp_lock.h (original)
+++ openmp/branches/release_35/runtime/src/kmp_lock.h Thu Aug 7 06:16:59 2014
@@ -518,7 +518,7 @@ __kmp_destroy_bootstrap_lock( kmp_bootst
// Internal RTL locks are also implemented as ticket locks, for now.
//
// FIXME - We should go through and figure out which lock kind works best for
-// each internal lock, and use the type deeclaration and function calls for
+// each internal lock, and use the type declaration and function calls for
// that explicit lock kind (and get rid of this section).
//
Modified: openmp/branches/release_35/runtime/src/kmp_os.h
URL: http://llvm.org/viewvc/llvm-project/openmp/branches/release_35/runtime/src/kmp_os.h?rev=215098&r1=215097&r2=215098&view=diff
==============================================================================
--- openmp/branches/release_35/runtime/src/kmp_os.h (original)
+++ openmp/branches/release_35/runtime/src/kmp_os.h Thu Aug 7 06:16:59 2014
@@ -46,6 +46,7 @@
#define KMP_COMPILER_ICC 0
#define KMP_COMPILER_GCC 0
#define KMP_COMPILER_CLANG 0
+#define KMP_COMPILER_MSVC 0
#if defined( __INTEL_COMPILER )
# undef KMP_COMPILER_ICC
@@ -56,6 +57,9 @@
#elif defined( __GNUC__ )
# undef KMP_COMPILER_GCC
# define KMP_COMPILER_GCC 1
+#elif defined( _MSC_VER )
+# undef KMP_COMPILER_MSVC
+# define KMP_COMPILER_MSVC 1
#else
# error Unknown compiler
#endif
@@ -66,10 +70,12 @@
#define KMP_OS_FREEBSD 0
#define KMP_OS_DARWIN 0
#define KMP_OS_WINDOWS 0
+#define KMP_OS_CNK 0
#define KMP_OS_UNIX 0 /* disjunction of KMP_OS_LINUX, KMP_OS_DARWIN etc. */
#define KMP_ARCH_X86 0
#define KMP_ARCH_X86_64 0
+#define KMP_ARCH_PPC64 0
#ifdef _WIN32
# undef KMP_OS_WINDOWS
@@ -81,9 +87,14 @@
# define KMP_OS_DARWIN 1
#endif
+// in some ppc64 linux installations, only the second condition is met
#if ( defined __linux )
# undef KMP_OS_LINUX
# define KMP_OS_LINUX 1
+#elif ( defined __linux__)
+# undef KMP_OS_LINUX
+# define KMP_OS_LINUX 1
+#else
#endif
#if ( defined __FreeBSD__ )
@@ -91,6 +102,11 @@
# define KMP_OS_FREEBSD 1
#endif
+#if ( defined __bgq__ )
+# undef KMP_OS_CNK
+# define KMP_OS_CNK 1
+#endif
+
#if (1 != KMP_OS_LINUX + KMP_OS_FREEBSD + KMP_OS_DARWIN + KMP_OS_WINDOWS)
# error Unknown OS
#endif
@@ -117,6 +133,9 @@
# elif defined __i386
# undef KMP_ARCH_X86
# define KMP_ARCH_X86 1
+# elif defined __powerpc64__
+# undef KMP_ARCH_PPC64
+# define KMP_ARCH_PPC64 1
# endif
#endif
@@ -156,7 +175,7 @@
# define KMP_ARCH_ARM 1
#endif
-#if (1 != KMP_ARCH_X86 + KMP_ARCH_X86_64 + KMP_ARCH_ARM)
+#if (1 != KMP_ARCH_X86 + KMP_ARCH_X86_64 + KMP_ARCH_ARM + KMP_ARCH_PPC64)
# error Unknown or unsupported architecture
#endif
@@ -175,6 +194,8 @@
typedef __float128 _Quad;
# undef KMP_HAVE_QUAD
# define KMP_HAVE_QUAD 1
+# elif KMP_COMPILER_MSVC
+ typedef long double _Quad;
# endif
#else
# if __LDBL_MAX_EXP__ >= 16384 && KMP_COMPILER_GCC
@@ -232,7 +253,7 @@
#if KMP_ARCH_X86 || KMP_ARCH_ARM
# define KMP_SIZE_T_SPEC KMP_UINT32_SPEC
-#elif KMP_ARCH_X86_64
+#elif KMP_ARCH_X86_64 || KMP_ARCH_PPC64
# define KMP_SIZE_T_SPEC KMP_UINT64_SPEC
#else
# error "Can't determine size_t printf format specifier."
@@ -657,6 +678,10 @@ extern kmp_real64 __kmp_test_then_add_re
# endif
#endif /* KMP_OS_WINDOWS */
+#if KMP_ARCH_PPC64
+# define KMP_MB() __sync_synchronize()
+#endif
+
#ifndef KMP_MB
# define KMP_MB() /* nothing to do */
#endif
@@ -763,7 +788,7 @@ typedef void (*microtask_t)( int *gti
#endif /* KMP_I8 */
/* Workaround for Intel(R) 64 code gen bug when taking address of static array (Intel(R) 64 Tracker #138) */
-#if KMP_ARCH_X86_64 && KMP_OS_LINUX
+#if (KMP_ARCH_X86_64 || KMP_ARCH_PPC64) && KMP_OS_LINUX
# define STATIC_EFI2_WORKAROUND
#else
# define STATIC_EFI2_WORKAROUND static
Modified: openmp/branches/release_35/runtime/src/kmp_runtime.c
URL: http://llvm.org/viewvc/llvm-project/openmp/branches/release_35/runtime/src/kmp_runtime.c?rev=215098&r1=215097&r2=215098&view=diff
==============================================================================
--- openmp/branches/release_35/runtime/src/kmp_runtime.c (original)
+++ openmp/branches/release_35/runtime/src/kmp_runtime.c Thu Aug 7 06:16:59 2014
@@ -8450,7 +8450,7 @@ __kmp_determine_reduction_method( ident_
int atomic_available = FAST_REDUCTION_ATOMIC_METHOD_GENERATED;
int tree_available = FAST_REDUCTION_TREE_METHOD_GENERATED;
- #if KMP_ARCH_X86_64
+ #if KMP_ARCH_X86_64 || KMP_ARCH_PPC64
#if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_WINDOWS || KMP_OS_DARWIN
#if KMP_MIC
Modified: openmp/branches/release_35/runtime/src/kmp_settings.c
URL: http://llvm.org/viewvc/llvm-project/openmp/branches/release_35/runtime/src/kmp_settings.c?rev=215098&r1=215097&r2=215098&view=diff
==============================================================================
--- openmp/branches/release_35/runtime/src/kmp_settings.c (original)
+++ openmp/branches/release_35/runtime/src/kmp_settings.c Thu Aug 7 06:16:59 2014
@@ -536,6 +536,7 @@ __kmp_stg_parse_file(
static char * par_range_to_print = NULL;
+#ifdef KMP_DEBUG
static void
__kmp_stg_parse_par_range(
char const * name,
@@ -614,7 +615,7 @@ __kmp_stg_parse_par_range(
break;
}
} // __kmp_stg_parse_par_range
-
+#endif
int
__kmp_initial_threads_capacity( int req_nproc )
Modified: openmp/branches/release_35/runtime/src/kmp_str.h
URL: http://llvm.org/viewvc/llvm-project/openmp/branches/release_35/runtime/src/kmp_str.h?rev=215098&r1=215097&r2=215098&view=diff
==============================================================================
--- openmp/branches/release_35/runtime/src/kmp_str.h (original)
+++ openmp/branches/release_35/runtime/src/kmp_str.h Thu Aug 7 06:16:59 2014
@@ -28,9 +28,8 @@
#endif // __cplusplus
#if KMP_OS_WINDOWS
- #define strdup _strdup
- #define snprintf _snprintf
- #define vsnprintf _vsnprintf
+# define strdup _strdup
+# define snprintf _snprintf
#endif
/* some macros to replace ctype.h functions */
Modified: openmp/branches/release_35/runtime/src/kmp_version.c
URL: http://llvm.org/viewvc/llvm-project/openmp/branches/release_35/runtime/src/kmp_version.c?rev=215098&r1=215097&r2=215098&view=diff
==============================================================================
--- openmp/branches/release_35/runtime/src/kmp_version.c (original)
+++ openmp/branches/release_35/runtime/src/kmp_version.c Thu Aug 7 06:16:59 2014
@@ -53,6 +53,8 @@
#define KMP_COMPILER "Clang " stringer( __clang_major__ ) "." stringer( __clang_minor__ )
#elif KMP_COMPILER_GCC
#define KMP_COMPILER "GCC " stringer( __GNUC__ ) "." stringer( __GNUC_MINOR__ )
+#elif KMP_COMPILER_MSVC
+ #define KMP_COMPILER "MSVC " stringer( __MSC_FULL_VER )
#endif
#ifndef KMP_COMPILER
#warning "Unknown compiler"
Modified: openmp/branches/release_35/runtime/src/makefile.mk
URL: http://llvm.org/viewvc/llvm-project/openmp/branches/release_35/runtime/src/makefile.mk?rev=215098&r1=215097&r2=215098&view=diff
==============================================================================
--- openmp/branches/release_35/runtime/src/makefile.mk (original)
+++ openmp/branches/release_35/runtime/src/makefile.mk Thu Aug 7 06:16:59 2014
@@ -73,6 +73,8 @@ OPTIMIZATION := $(call check_variable,OP
TARGET_COMPILER := $(call check_variable,TARGET_COMPILER,12 11)
# Library version: 4 -- legacy, 5 -- compat.
VERSION := $(call check_variable,VERSION,5 4)
+# quad precision floating point
+HAVE_QUAD = 1
VPATH += $(src_dir)
VPATH += $(src_dir)i18n/
@@ -171,6 +173,7 @@ ifeq "$(c)" "clang"
ld-flags += -m32 -msse
as-flags += -m32 -msse
endif
+ HAVE_QUAD = 0
endif
ifeq "$(LINK_TYPE)" "dyna"
@@ -310,6 +313,9 @@ endif
ifeq "$(CPLUSPLUS)" "on"
ifeq "$(os)" "win"
c-flags += -TP
+ else ifeq "$(arch)" "ppc64"
+ # c++0x on ppc64 linux removes definition of preproc. macros, needed in .hs
+ c-flags += -x c++ -std=gnu++0x
else
ifneq "$(filter gcc clang,$(c))" ""
c-flags += -x c++ -std=c++0x
@@ -370,7 +376,7 @@ ifeq "$(os)" "lin"
ld-flags-extra += -lirc_pic
endif
endif
- ifeq "$(filter 32 32e 64,$(arch))" ""
+ ifeq "$(filter 32 32e 64 ppc64,$(arch))" ""
ld-flags-extra += $(shell pkg-config --libs libffi)
endif
else
@@ -466,7 +472,14 @@ ifneq "$(os)" "win"
endif
cpp-flags += -D KMP_LIBRARY_FILE=\"$(lib_file)\"
cpp-flags += -D KMP_VERSION_MAJOR=$(VERSION)
-cpp-flags += -D CACHE_LINE=64
+
+# customize ppc64 cache line size to 128, 64 otherwise
+ifeq "$(arch)" "ppc64"
+ cpp-flags += -D CACHE_LINE=128
+else
+ cpp-flags += -D CACHE_LINE=64
+endif
+
cpp-flags += -D KMP_ADJUST_BLOCKTIME=1
cpp-flags += -D BUILD_PARALLEL_ORDERED
cpp-flags += -D KMP_ASM_INTRINS
@@ -581,9 +594,12 @@ ifneq "$(os)" "win"
ifeq "$(arch)" "arm"
z_Linux_asm$(obj) : \
cpp-flags += -D KMP_ARCH_ARM
- else
+ else ifeq "$(arch)" "ppc64"
z_Linux_asm$(obj) : \
- cpp-flags += -D KMP_ARCH_X86$(if $(filter 32e,$(arch)),_64)
+ cpp-flags += -D KMP_ARCH_PPC64
+ else
+ z_Linux_asm$(obj) : \
+ cpp-flags += -D KMP_ARCH_X86$(if $(filter 32e,$(arch)),_64)
endif
endif
@@ -596,6 +612,9 @@ kmp_version$(obj) : cpp-flags += -D _KMP
gd-flags += -D arch_$(arch)
gd-flags += -D $(LIB_TYPE)
+ifeq "$(HAVE_QUAD)" "1"
+ gd-flags += -D HAVE_QUAD
+endif
ifeq "$(OMP_VERSION)" "40"
gd-flags += -D OMP_40 -D OMP_30
else
@@ -729,7 +748,9 @@ endif
else # 5
lib_c_items += kmp_gsupport
endif
+# ifneq "$(arch)" "ppc64"
lib_asm_items += z_Linux_asm
+# endif
endif
endif
@@ -1391,9 +1412,13 @@ ifneq "$(filter %-dyna win-%,$(os)-$(LIN
td_exp += libc.so.6
td_exp += ld-linux-armhf.so.3
endif
+ ifeq "$(arch)" "ppc64"
+ td_exp += libc.so.6
+ td_exp += ld64.so.1
+ endif
td_exp += libdl.so.2
td_exp += libgcc_s.so.1
- ifeq "$(filter 32 32e 64,$(arch))" ""
+ ifeq "$(filter 32 32e 64 ppc64,$(arch))" ""
td_exp += libffi.so.6
td_exp += libffi.so.5
endif
Modified: openmp/branches/release_35/runtime/src/thirdparty/ittnotify/ittnotify_config.h
URL: http://llvm.org/viewvc/llvm-project/openmp/branches/release_35/runtime/src/thirdparty/ittnotify/ittnotify_config.h?rev=215098&r1=215097&r2=215098&view=diff
==============================================================================
--- openmp/branches/release_35/runtime/src/thirdparty/ittnotify/ittnotify_config.h (original)
+++ openmp/branches/release_35/runtime/src/thirdparty/ittnotify/ittnotify_config.h Thu Aug 7 06:16:59 2014
@@ -132,6 +132,11 @@
# define ITT_ARCH_ARM 4
#endif /* ITT_ARCH_ARM */
+#ifndef ITT_ARCH_PPC64
+# define ITT_ARCH_PPC64 5
+#endif /* ITT_ARCH_PPC64 */
+
+
#ifndef ITT_ARCH
# if defined _M_IX86 || defined __i386__
# define ITT_ARCH ITT_ARCH_IA32
@@ -141,6 +146,8 @@
# define ITT_ARCH ITT_ARCH_IA64
# elif defined _M_ARM || __arm__
# define ITT_ARCH ITT_ARCH_ARM
+# elif defined __powerpc64__
+# define ITT_ARCH ITT_ARCH_PPC64
# endif
#endif
@@ -274,7 +281,7 @@ ITT_INLINE long __TBB_machine_fetchadd4(
: "memory");
return result;
}
-#elif ITT_ARCH==ITT_ARCH_ARM
+#elif ITT_ARCH==ITT_ARCH_ARM || ITT_ARCH==ITT_ARCH_PPC64
#define __TBB_machine_fetchadd4(addr, val) __sync_fetch_and_add(addr, val)
#endif /* ITT_ARCH==ITT_ARCH_IA64 */
#ifndef ITT_SIMPLE_INIT
Modified: openmp/branches/release_35/runtime/src/z_Linux_asm.s
URL: http://llvm.org/viewvc/llvm-project/openmp/branches/release_35/runtime/src/z_Linux_asm.s?rev=215098&r1=215097&r2=215098&view=diff
==============================================================================
--- openmp/branches/release_35/runtime/src/z_Linux_asm.s (original)
+++ openmp/branches/release_35/runtime/src/z_Linux_asm.s Thu Aug 7 06:16:59 2014
@@ -138,7 +138,7 @@ __kmp_unnamed_critical_addr:
#endif /* KMP_GOMP_COMPAT */
-#if KMP_ARCH_X86
+#if KMP_ARCH_X86 && !KMP_ARCH_PPC64
// -----------------------------------------------------------------------
// microtasking routines specifically written for IA-32 architecture
@@ -1585,6 +1585,16 @@ __kmp_unnamed_critical_addr:
.size __kmp_unnamed_critical_addr,4
#endif /* KMP_ARCH_ARM */
+#if KMP_ARCH_PPC64
+ .data
+ .comm .gomp_critical_user_,32,8
+ .data
+ .align 8
+ .global __kmp_unnamed_critical_addr
+__kmp_unnamed_critical_addr:
+ .8byte .gomp_critical_user_
+ .size __kmp_unnamed_critical_addr,8
+#endif /* KMP_ARCH_PPC64 */
#if defined(__linux__)
.section .note.GNU-stack,"", at progbits
Modified: openmp/branches/release_35/runtime/src/z_Linux_util.c
URL: http://llvm.org/viewvc/llvm-project/openmp/branches/release_35/runtime/src/z_Linux_util.c?rev=215098&r1=215097&r2=215098&view=diff
==============================================================================
--- openmp/branches/release_35/runtime/src/z_Linux_util.c (original)
+++ openmp/branches/release_35/runtime/src/z_Linux_util.c Thu Aug 7 06:16:59 2014
@@ -32,7 +32,7 @@
#include <sys/resource.h>
#include <sys/syscall.h>
-#if KMP_OS_LINUX
+#if KMP_OS_LINUX && !KMP_OS_CNK
# include <sys/sysinfo.h>
# if KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_ARM)
// We should really include <futex.h>, but that causes compatibility problems on different
@@ -61,7 +61,7 @@
#include <fcntl.h>
// For non-x86 architecture
-#if KMP_COMPILER_GCC && !(KMP_ARCH_X86 || KMP_ARCH_X86_64)
+#if KMP_COMPILER_GCC && !(KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_PPC64)
# include <stdbool.h>
# include <ffi.h>
#endif
@@ -110,7 +110,7 @@ __kmp_print_cond( char *buffer, kmp_cond
/* ------------------------------------------------------------------------ */
/* ------------------------------------------------------------------------ */
-#if KMP_OS_LINUX && KMP_AFFINITY_SUPPORTED
+#if ( KMP_OS_LINUX && KMP_AFFINITY_SUPPORTED)
/*
* Affinity support
@@ -147,6 +147,19 @@ __kmp_print_cond( char *buffer, kmp_cond
# error Wrong code for getaffinity system call.
# endif /* __NR_sched_getaffinity */
+# elif KMP_ARCH_PPC64
+# ifndef __NR_sched_setaffinity
+# define __NR_sched_setaffinity 222
+# elif __NR_sched_setaffinity != 222
+# error Wrong code for setaffinity system call.
+# endif /* __NR_sched_setaffinity */
+# ifndef __NR_sched_getaffinity
+# define __NR_sched_getaffinity 223
+# elif __NR_sched_getaffinity != 223
+# error Wrong code for getaffinity system call.
+# endif /* __NR_sched_getaffinity */
+
+
# else
# error Unknown or unsupported architecture
@@ -445,7 +458,7 @@ __kmp_change_thread_affinity_mask( int g
/* ------------------------------------------------------------------------ */
/* ------------------------------------------------------------------------ */
-#if KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_ARM)
+#if KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_ARM) && !KMP_OS_CNK
int
__kmp_futex_determine_capable()
@@ -462,7 +475,7 @@ __kmp_futex_determine_capable()
return retval;
}
-#endif // KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_ARM)
+#endif // KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_ARM) && !KMP_OS_CNK
/* ------------------------------------------------------------------------ */
/* ------------------------------------------------------------------------ */
@@ -481,7 +494,7 @@ __kmp_test_then_or32( volatile kmp_int32
old_value = TCR_4( *p );
new_value = old_value | d;
- while ( ! __kmp_compare_and_store32 ( p, old_value, new_value ) )
+ while ( ! KMP_COMPARE_AND_STORE_REL32 ( p, old_value, new_value ) )
{
KMP_CPU_PAUSE();
old_value = TCR_4( *p );
@@ -498,7 +511,7 @@ __kmp_test_then_and32( volatile kmp_int3
old_value = TCR_4( *p );
new_value = old_value & d;
- while ( ! __kmp_compare_and_store32 ( p, old_value, new_value ) )
+ while ( ! KMP_COMPARE_AND_STORE_REL32 ( p, old_value, new_value ) )
{
KMP_CPU_PAUSE();
old_value = TCR_4( *p );
@@ -507,7 +520,7 @@ __kmp_test_then_and32( volatile kmp_int3
return old_value;
}
-# if KMP_ARCH_X86
+# if KMP_ARCH_X86 || KMP_ARCH_PPC64
kmp_int64
__kmp_test_then_add64( volatile kmp_int64 *p, kmp_int64 d )
{
@@ -516,7 +529,7 @@ __kmp_test_then_add64( volatile kmp_int6
old_value = TCR_8( *p );
new_value = old_value + d;
- while ( ! __kmp_compare_and_store64 ( p, old_value, new_value ) )
+ while ( ! KMP_COMPARE_AND_STORE_REL64 ( p, old_value, new_value ) )
{
KMP_CPU_PAUSE();
old_value = TCR_8( *p );
@@ -533,7 +546,7 @@ __kmp_test_then_or64( volatile kmp_int64
old_value = TCR_8( *p );
new_value = old_value | d;
- while ( ! __kmp_compare_and_store64 ( p, old_value, new_value ) )
+ while ( ! KMP_COMPARE_AND_STORE_REL64 ( p, old_value, new_value ) )
{
KMP_CPU_PAUSE();
old_value = TCR_8( *p );
@@ -549,7 +562,7 @@ __kmp_test_then_and64( volatile kmp_int6
old_value = TCR_8( *p );
new_value = old_value & d;
- while ( ! __kmp_compare_and_store64 ( p, old_value, new_value ) )
+ while ( ! KMP_COMPARE_AND_STORE_REL64 ( p, old_value, new_value ) )
{
KMP_CPU_PAUSE();
old_value = TCR_8( *p );
@@ -2527,7 +2540,7 @@ __kmp_get_load_balance( int max )
#endif // USE_LOAD_BALANCE
-#if KMP_COMPILER_GCC && !(KMP_ARCH_X86 || KMP_ARCH_X86_64)
+#if KMP_COMPILER_GCC && !(KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_PPC64)
int __kmp_invoke_microtask( microtask_t pkfn, int gtid, int tid, int argc,
void *p_argv[] )
@@ -2561,7 +2574,89 @@ int __kmp_invoke_microtask( microtask_t
return 1;
}
-#endif // KMP_COMPILER_GCC && !(KMP_ARCH_X86 || KMP_ARCH_X86_64)
+#endif // KMP_COMPILER_GCC && !(KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_PPC64)
+
+#if KMP_ARCH_PPC64
+
+// we really only need the case with 1 argument, because CLANG always build
+// a struct of pointers to shared variables referenced in the outlined function
+int
+__kmp_invoke_microtask( microtask_t pkfn,
+ int gtid, int tid,
+ int argc, void *p_argv[] ) {
+ switch (argc) {
+ default:
+ fprintf(stderr, "Too many args to microtask: %d!\n", argc);
+ fflush(stderr);
+ exit(-1);
+ case 0:
+ (*pkfn)(>id, &tid);
+ break;
+ case 1:
+ (*pkfn)(>id, &tid, p_argv[0]);
+ break;
+ case 2:
+ (*pkfn)(>id, &tid, p_argv[0], p_argv[1]);
+ break;
+ case 3:
+ (*pkfn)(>id, &tid, p_argv[0], p_argv[1], p_argv[2]);
+ break;
+ case 4:
+ (*pkfn)(>id, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3]);
+ break;
+ case 5:
+ (*pkfn)(>id, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4]);
+ break;
+ case 6:
+ (*pkfn)(>id, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],
+ p_argv[5]);
+ break;
+ case 7:
+ (*pkfn)(>id, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],
+ p_argv[5], p_argv[6]);
+ break;
+ case 8:
+ (*pkfn)(>id, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],
+ p_argv[5], p_argv[6], p_argv[7]);
+ break;
+ case 9:
+ (*pkfn)(>id, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],
+ p_argv[5], p_argv[6], p_argv[7], p_argv[8]);
+ break;
+ case 10:
+ (*pkfn)(>id, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],
+ p_argv[5], p_argv[6], p_argv[7], p_argv[8], p_argv[9]);
+ break;
+ case 11:
+ (*pkfn)(>id, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],
+ p_argv[5], p_argv[6], p_argv[7], p_argv[8], p_argv[9], p_argv[10]);
+ break;
+ case 12:
+ (*pkfn)(>id, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],
+ p_argv[5], p_argv[6], p_argv[7], p_argv[8], p_argv[9], p_argv[10],
+ p_argv[11]);
+ break;
+ case 13:
+ (*pkfn)(>id, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],
+ p_argv[5], p_argv[6], p_argv[7], p_argv[8], p_argv[9], p_argv[10],
+ p_argv[11], p_argv[12]);
+ break;
+ case 14:
+ (*pkfn)(>id, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],
+ p_argv[5], p_argv[6], p_argv[7], p_argv[8], p_argv[9], p_argv[10],
+ p_argv[11], p_argv[12], p_argv[13]);
+ break;
+ case 15:
+ (*pkfn)(>id, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],
+ p_argv[5], p_argv[6], p_argv[7], p_argv[8], p_argv[9], p_argv[10],
+ p_argv[11], p_argv[12], p_argv[13], p_argv[14]);
+ break;
+ }
+
+ return 1;
+}
+
+#endif
// end of file //
Modified: openmp/branches/release_35/runtime/tools/lib/Platform.pm
URL: http://llvm.org/viewvc/llvm-project/openmp/branches/release_35/runtime/tools/lib/Platform.pm?rev=215098&r1=215097&r2=215098&view=diff
==============================================================================
--- openmp/branches/release_35/runtime/tools/lib/Platform.pm (original)
+++ openmp/branches/release_35/runtime/tools/lib/Platform.pm Thu Aug 7 06:16:59 2014
@@ -50,6 +50,8 @@ sub canon_arch($) {
$arch = "32e";
} elsif ( $arch =~ m{\Aarm(?:v7\D*)?\z} ) {
$arch = "arm";
+ } elsif ( $arch =~ m{\Appc64} ) {
+ $arch = "ppc64";
} else {
$arch = undef;
}; # if
@@ -159,6 +161,8 @@ sub target_options() {
$_host_arch = "32e";
} elsif ( $hardware_platform eq "arm" ) {
$_host_arch = "arm";
+ } elsif ( $hardware_platform eq "ppc64" ) {
+ $_host_arch = "ppc64";
} else {
die "Unsupported host hardware platform: \"$hardware_platform\"; stopped";
}; # if
Modified: openmp/branches/release_35/runtime/tools/lib/Uname.pm
URL: http://llvm.org/viewvc/llvm-project/openmp/branches/release_35/runtime/tools/lib/Uname.pm?rev=215098&r1=215097&r2=215098&view=diff
==============================================================================
--- openmp/branches/release_35/runtime/tools/lib/Uname.pm (original)
+++ openmp/branches/release_35/runtime/tools/lib/Uname.pm Thu Aug 7 06:16:59 2014
@@ -147,6 +147,8 @@ if ( 0 ) {
$values{ hardware_platform } = "x86_64";
} elsif ( $values{ machine } =~ m{\Aarmv7\D*\z} ) {
$values{ hardware_platform } = "arm";
+ } elsif ( $values{ machine } =~ m{\Appc64\z} ) {
+ $values{ hardware_platform } = "ppc64";
} else {
die "Unsupported machine (\"$values{ machine }\") returned by POSIX::uname(); stopped";
}; # if
Modified: openmp/branches/release_35/runtime/tools/src/common-defs.mk
URL: http://llvm.org/viewvc/llvm-project/openmp/branches/release_35/runtime/tools/src/common-defs.mk?rev=215098&r1=215097&r2=215098&view=diff
==============================================================================
--- openmp/branches/release_35/runtime/tools/src/common-defs.mk (original)
+++ openmp/branches/release_35/runtime/tools/src/common-defs.mk Thu Aug 7 06:16:59 2014
@@ -45,7 +45,7 @@ endif
# Description:
# The function return printable name of specified architecture, IA-32 architecture or Intel(R) 64.
#
-legal_arch = $(if $(filter 32,$(1)),IA-32,$(if $(filter 32e,$(1)),Intel(R) 64,$(if $(filter l1,$(1)),L1OM,$(if $(filter arm,$(1)),ARM,$(error Bad architecture specified: $(1))))))
+legal_arch = $(if $(filter 32,$(1)),IA-32,$(if $(filter 32e,$(1)),Intel(R) 64,$(if $(filter l1,$(1)),L1OM,$(if $(filter arm,$(1)),ARM,$(if $(filter ppc64,$(1)),PPC64,$(error Bad architecture specified: $(1)))))))
# Synopsis:
# var_name = $(call check_variable,var,list)
@@ -128,9 +128,9 @@ endif
# --------------------------------------------------------------------------------------------------
os := $(call check_variable,os,lin lrb mac win)
-arch := $(call check_variable,arch,32 32e 64 arm)
+arch := $(call check_variable,arch,32 32e 64 arm ppc64)
platform := $(os)_$(arch)
-platform := $(call check_variable,platform,lin_32 lin_32e lin_64 lin_arm lrb_32e mac_32 mac_32e win_32 win_32e win_64)
+platform := $(call check_variable,platform,lin_32 lin_32e lin_64 lin_arm lrb_32e mac_32 mac_32e win_32 win_32e win_64 lin_ppc64)
# oa-opts means "os and arch options". They are passed to almost all perl scripts.
oa-opts := --os=$(os) --arch=$(arch)
Propchange: openmp/branches/release_35/www/content.css
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Aug 7 06:16:59 2014
@@ -1 +1,2 @@
/libcxx/branches/apple/www/content.css:136569-137939
+/openmp/trunk/www/content.css:213607-215096
Propchange: openmp/branches/release_35/www/menu.css
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Aug 7 06:16:59 2014
@@ -1 +1,2 @@
/libcxx/branches/apple/www/menu.css:136569-137939
+/openmp/trunk/www/menu.css:213607-215096
More information about the Openmp-commits
mailing list