CMake/Modules/Platform/BlueGeneQ-base.cmake

167 lines
6.9 KiB
CMake
Raw Normal View History

Simplify CMake per-source license notices Per-source copyright/license notice headers that spell out copyright holder names and years are hard to maintain and often out-of-date or plain wrong. Precise contributor information is already maintained automatically by the version control tool. Ultimately it is the receiver of a file who is responsible for determining its licensing status, and per-source notices are merely a convenience. Therefore it is simpler and more accurate for each source to have a generic notice of the license name and references to more detailed information on copyright holders and full license terms. Our `Copyright.txt` file now contains a list of Contributors whose names appeared source-level copyright notices. It also references version control history for more precise information. Therefore we no longer need to spell out the list of Contributors in each source file notice. Replace CMake per-source copyright/license notice headers with a short description of the license and links to `Copyright.txt` and online information available from "https://cmake.org/licensing". The online URL also handles cases of modules being copied out of our source into other projects, so we can drop our notices about replacing links with full license text. Run the `Utilities/Scripts/filter-notices.bash` script to perform the majority of the replacements mechanically. Manually fix up shebang lines and trailing newlines in a few files. Manually update the notices in a few files that the script does not handle.
2016-09-27 22:01:08 +03:00
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
#
# Blue Gene/Q base platform file.
#
# NOTE: Do not set your platform to "BlueGeneQ-base". This file is
# included by the real platform files. Use one of these two platforms
# instead:
#
# BlueGeneQ-dynamic For dynamically linked executables
# BlueGeneQ-static For statically linked executables
#
# The platform you choose doesn't affect whether or not you can build
# shared or static libraries -- it ONLY changs whether exeuatbles are linked
# statically or dynamically.
#
# This platform file tries its best to adhere to the behavior of the MPI
# compiler wrappers included with the latest BG/P drivers.
#
#
# This adds directories that find commands should specifically ignore
# for cross compiles. Most of these directories are the includeand
# lib directories for the frontend on BG/P systems. Not ignoring
# these can cause things like FindX11 to find a frontend PPC version
# mistakenly. We use this on BG instead of re-rooting because backend
# libraries are typically strewn about the filesystem, and we can't
# re-root ALL backend libraries to a single place.
#
set(CMAKE_SYSTEM_IGNORE_PATH
/lib /lib64 /include
/usr/lib /usr/lib64 /usr/include
/usr/local/lib /usr/local/lib64 /usr/local/include
/usr/X11/lib /usr/X11/lib64 /usr/X11/include
/usr/lib/X11 /usr/lib64/X11 /usr/include/X11
/usr/X11R6/lib /usr/X11R6/lib64 /usr/X11R6/include
/usr/X11R7/lib /usr/X11R7/lib64 /usr/X11R7/include
)
#
# Indicate that this is a unix-like system
#
set(UNIX 1)
#
# Library prefixes, suffixes, extra libs.
#
set(CMAKE_LINK_LIBRARY_SUFFIX "")
set(CMAKE_STATIC_LIBRARY_PREFIX "lib") # lib
set(CMAKE_STATIC_LIBRARY_SUFFIX ".a") # .a
set(CMAKE_SHARED_LIBRARY_PREFIX "lib") # lib
set(CMAKE_SHARED_LIBRARY_SUFFIX ".so") # .so
set(CMAKE_EXECUTABLE_SUFFIX "") # .exe
set(CMAKE_DL_LIBS "dl")
#
# BG/Q supports dynamic libraries regardless of whether we're building
# static or dynamic *executables*.
#
set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE)
set(CMAKE_FIND_LIBRARY_PREFIXES "lib")
#
# For BGQ builds, we're cross compiling, but we don't want to re-root things
# (e.g. with CMAKE_FIND_ROOT_PATH) because users may have libraries anywhere on
# the shared filesystems, and this may lie outside the root. Instead, we set the
# system directories so that the various system BG CNK library locations are
# searched first. This is not the clearest thing in the world, given IBM's driver
# layout, but this should cover all the standard ones.
#
macro(__BlueGeneQ_common_setup compiler_id lang)
# Need to use the version of the comm lib compiled with the right compiler.
set(__BlueGeneQ_commlib_dir gcc)
if (${compiler_id} STREQUAL XL)
set(__BlueGeneQ_commlib_dir xl)
endif()
set(CMAKE_SYSTEM_LIBRARY_PATH
/bgsys/drivers/ppcfloor/comm/default/lib # default comm layer (used by mpi compiler wrappers)
/bgsys/drivers/ppcfloor/comm/${__BlueGeneQ_commlib_dir}/lib # PAMI, other lower-level comm libraries
/bgsys/drivers/ppcfloor/gnu-linux/lib # CNK python installation directory
/bgsys/drivers/ppcfloor/gnu-linux/powerpc64-bgq-linux/lib # CNK Linux image -- standard runtime libs, pthread, etc.
)
# Add all the system include paths.
set(CMAKE_SYSTEM_INCLUDE_PATH
/bgsys/drivers/ppcfloor/comm/sys/include
/bgsys/drivers/ppcfloor/
/bgsys/drivers/ppcfloor/spi/include
/bgsys/drivers/ppcfloor/spi/include/kernel/cnk
/bgsys/drivers/ppcfloor/comm/${__BlueGeneQ_commlib_dir}/include
)
# Ensure that the system directories are included with the regular compilers, as users will expect this
# to do the same thing as the MPI compilers, which add these flags.
set(BGQ_SYSTEM_INCLUDES "")
foreach(dir ${CMAKE_SYSTEM_INCLUDE_PATH})
string(APPEND BGQ_SYSTEM_INCLUDES " -I${dir}")
endforeach()
set(CMAKE_C_COMPILE_OBJECT "<CMAKE_C_COMPILER> <DEFINES> ${BGQ_SYSTEM_INCLUDES} <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>")
set(CMAKE_CXX_COMPILE_OBJECT "<CMAKE_CXX_COMPILER> <DEFINES> ${BGQ_SYSTEM_INCLUDES} <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>")
#
# Code below does setup for shared libraries. That this is done
# regardless of whether the platform is static or dynamic -- you can make
# shared libraries even if you intend to make static executables, you just
# can't make a dynamic executable if you use the static platform file.
#
if (${compiler_id} STREQUAL XL)
# Flags for XL compilers if we explicitly detected XL
set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "-qpic")
set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-qmkshrobj -qnostaticlink")
else()
# Assume flags for GNU compilers (if the ID is GNU *or* anything else).
set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "-fPIC")
set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-shared")
endif()
# Both toolchains use the GNU linker on BG/P, so these options are shared.
set(CMAKE_SHARED_LIBRARY_RUNTIME_${lang}_FLAG "-Wl,-rpath,")
set(CMAKE_SHARED_LIBRARY_RPATH_LINK_${lang}_FLAG "-Wl,-rpath-link,")
set(CMAKE_SHARED_LIBRARY_SONAME_${lang}_FLAG "-Wl,-soname,")
set(CMAKE_EXE_EXPORTS_${lang}_FLAG "-Wl,--export-dynamic")
set(CMAKE_SHARED_LIBRARY_LINK_${lang}_FLAGS "") # +s, flag for exe link to use shared lib
set(CMAKE_SHARED_LIBRARY_RUNTIME_${lang}_FLAG_SEP ":") # : or empty
endmacro()
#
# This macro needs to be called for dynamic library support. Unfortunately on BG,
# We can't support both static and dynamic links in the same platform file. The
# dynamic link platform file needs to call this explicitly to set up dynamic linking.
#
macro(__BlueGeneQ_setup_dynamic compiler_id lang)
__BlueGeneQ_common_setup(${compiler_id} ${lang})
if (${compiler_id} STREQUAL XL)
set(BGQ_${lang}_DYNAMIC_EXE_FLAGS "-qnostaticlink -qnostaticlink=libgcc")
else()
set(BGQ_${lang}_DYNAMIC_EXE_FLAGS "-dynamic")
endif()
# For dynamic executables, need to provide special BG/Q arguments.
set(BGQ_${lang}_DEFAULT_EXE_FLAGS
"<FLAGS> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
set(CMAKE_${lang}_LINK_EXECUTABLE
"<CMAKE_${lang}_COMPILER> -Wl,-relax ${BGQ_${lang}_DYNAMIC_EXE_FLAGS} ${BGQ_${lang}_DEFAULT_EXE_FLAGS}")
endmacro()
#
# This macro needs to be called for static builds. Right now it just adds -Wl,-relax
# to the link line.
#
macro(__BlueGeneQ_setup_static compiler_id lang)
__BlueGeneQ_common_setup(${compiler_id} ${lang})
# For static executables, use default link settings.
set(BGQ_${lang}_DEFAULT_EXE_FLAGS
"<FLAGS> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
set(CMAKE_${lang}_LINK_EXECUTABLE
"<CMAKE_${lang}_COMPILER> -Wl,-relax ${BGQ_${lang}_DEFAULT_EXE_FLAGS}")
endmacro()