adaptation of autocmake for the static linking
This commit is contained in:
parent
44832b57a7
commit
7150ae9793
@ -1,9 +1,15 @@
|
||||
language: cpp
|
||||
install:
|
||||
# update, clean
|
||||
- sudo apt-get update
|
||||
- sudo apt-get clean
|
||||
- sudo apt-get autoclean
|
||||
# compilers
|
||||
- sudo apt-get install g++ cmake gfortran
|
||||
# libraries for static linking
|
||||
- sudo apt-get install binutils-gold libc6-dev libpthread-stubs0-dev
|
||||
# math libraries
|
||||
- sudo apt-get install libblas-dev liblapack-dev
|
||||
- sudo apt-get install libblas-dev liblapack-dev libatlas-base-dev
|
||||
# MPI
|
||||
- sudo apt-get install openmpi-bin libopenmpi-dev
|
||||
# PEP8 and py.test
|
||||
|
@ -5,6 +5,7 @@
|
||||
# Variables used::
|
||||
#
|
||||
# MATH_LIB_SEARCH_ORDER, example: set(MATH_LIB_SEARCH_ORDER MKL ESSL ATLAS ACML SYSTEM_NATIVE)
|
||||
# ENABLE_STATIC_LINKING
|
||||
# ENABLE_BLAS
|
||||
# ENABLE_LAPACK
|
||||
# BLAS_FOUND
|
||||
@ -48,6 +49,13 @@
|
||||
# '-DBLAS_LANG=Fortran'
|
||||
# '-DLAPACK_LANG=Fortran'
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# ENABLE_STATIC_LINKING
|
||||
|
||||
if(ENABLE_STATIC_LINKING)
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
|
||||
endif()
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# SYSTEM_NATIVE
|
||||
|
||||
@ -355,7 +363,8 @@ macro(config_math_service _SERVICE)
|
||||
if(MKL_COMPILER_BINDINGS MATCHES GNU)
|
||||
set(_omp_flag -fopenmp)
|
||||
endif()
|
||||
if(MKL_COMPILER_BINDINGS MATCHES PGI)
|
||||
# do not add -mp flag for PGI+MKL+STATIC_LINKING
|
||||
if(MKL_COMPILER_BINDINGS MATCHES PGI AND NOT ENABLE_STATIC_LINKING)
|
||||
set(_omp_flag -mp)
|
||||
endif()
|
||||
endif()
|
||||
@ -470,9 +479,24 @@ if("${MATH_LIBS}" STREQUAL "" AND "${MKL_FLAG}" STREQUAL "off")
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
#miro: first lapack, then blas as lapack might need blas routine
|
||||
set(MATH_LIBS
|
||||
${MATH_LIBS}
|
||||
${BLAS_LIBRARIES}
|
||||
${LAPACK_LIBRARIES}
|
||||
${BLAS_LIBRARIES}
|
||||
CACHE STRING "Math libraries"
|
||||
)
|
||||
|
||||
#miro: further adaptation for the static linking
|
||||
if (ENABLE_STATIC_LINKING)
|
||||
if (LAPACK_TYPE MATCHES ATLAS OR LAPACK_TYPE MATCHES SYSTEM_NATIVE OR BLAS_TYPE MATCHES ATLAS OR BLAS_TYPE MATCHES SYSTEM_NATIVE)
|
||||
#miro: TODO: some compilers might need -lgfortran
|
||||
set (MATH_LIBS ${MATH_LIBS} -Wl,--whole-archive -lpthread -Wl,--no-whole-archive)
|
||||
endif()
|
||||
if (LAPACK_TYPE MATCHES MKL OR BLAS_TYPE MATCHES MKL)
|
||||
# miro: fix for MKL static linking (-lc not needed for PGI )
|
||||
set (MATH_LIBS ${MATH_LIBS} -ldl -lc)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
|
@ -18,13 +18,13 @@ option(ENABLE_STATIC_LINKING "Enable static libraries linking" OFF)
|
||||
if(ENABLE_STATIC_LINKING)
|
||||
if(DEFINED CMAKE_Fortran_COMPILER_ID)
|
||||
if(CMAKE_Fortran_COMPILER_ID MATCHES GNU)
|
||||
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -static")
|
||||
set(CMAKE_Fortran_FLAGS "-static ${CMAKE_Fortran_FLAGS}")
|
||||
endif()
|
||||
if(CMAKE_Fortran_COMPILER_ID MATCHES Intel)
|
||||
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -static-libgcc -static-intel")
|
||||
set(CMAKE_Fortran_FLAGS "-static -static-libgcc -static-intel ${CMAKE_Fortran_FLAGS}")
|
||||
endif()
|
||||
if(CMAKE_Fortran_COMPILER_ID MATCHES PGI)
|
||||
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Bstatic")
|
||||
set(CMAKE_Fortran_FLAGS "-Bstatic ${CMAKE_Fortran_FLAGS}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
@ -4,6 +4,9 @@ name: example
|
||||
[cxx]
|
||||
source: ../../../modules/cxx.cmake
|
||||
|
||||
[static]
|
||||
source: ../../../modules/static_linking.cmake
|
||||
|
||||
[default_build_paths]
|
||||
source: ../../../modules/default_build_paths.cmake
|
||||
|
||||
|
@ -4,6 +4,9 @@ name: example
|
||||
[fc]
|
||||
source: ../../../modules/fc.cmake
|
||||
|
||||
[static]
|
||||
source: ../../../modules/static_linking.cmake
|
||||
|
||||
[default_build_paths]
|
||||
source: ../../../modules/default_build_paths.cmake
|
||||
|
||||
|
@ -4,6 +4,9 @@ name: example
|
||||
[fc]
|
||||
source: ../../../modules/fc.cmake
|
||||
|
||||
[static]
|
||||
source: ../../../modules/static_linking.cmake
|
||||
|
||||
[int64]
|
||||
source: ../../../modules/int64.cmake
|
||||
|
||||
|
@ -1,10 +1,15 @@
|
||||
if(BLAS_FOUND)
|
||||
if(CMAKE_Fortran_COMPILER_ID MATCHES PGI)
|
||||
# we remove -rdynamic flag added by CMake
|
||||
# PGI Fortran does not recognize this flag
|
||||
SET(CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS)
|
||||
endif()
|
||||
if(CMAKE_Fortran_COMPILER_ID MATCHES PGI)
|
||||
# remove -rdynamic flag offensive for PGI Fortran
|
||||
list(REMOVE_ITEM CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS "-rdynamic")
|
||||
endif()
|
||||
|
||||
if(CMAKE_Fortran_COMPILER_ID MATCHES Intel AND ENABLE_STATIC_LINKING)
|
||||
# prevent "ifort: ... warning #10121: overriding '-static-intel' with
|
||||
# '-i_dynamic'"
|
||||
list(REMOVE_ITEM CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS "-i_dynamic")
|
||||
endif()
|
||||
|
||||
if(BLAS_FOUND)
|
||||
add_executable(example example.f90)
|
||||
target_link_libraries(example ${MATH_LIBS})
|
||||
else()
|
||||
|
@ -1,10 +1,14 @@
|
||||
if(LAPACK_FOUND)
|
||||
if(CMAKE_Fortran_COMPILER_ID MATCHES PGI)
|
||||
# we remove -rdynamic flag added by CMake
|
||||
# PGI Fortran does not recognize this flag
|
||||
SET(CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS)
|
||||
endif()
|
||||
if(CMAKE_Fortran_COMPILER_ID MATCHES PGI)
|
||||
# remove -rdynamic flag offensive for PGI Fortran
|
||||
list(REMOVE_ITEM CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS "-rdynamic")
|
||||
endif()
|
||||
|
||||
if(CMAKE_Fortran_COMPILER_ID MATCHES Intel AND ENABLE_STATIC_LINKING)
|
||||
# prevent "ifort: ... warning #10121: overriding '-static-intel' with '-i_dynamic'"
|
||||
list(REMOVE_ITEM CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS "-i_dynamic")
|
||||
endif()
|
||||
|
||||
if(LAPACK_FOUND)
|
||||
add_executable(example example.F90)
|
||||
target_link_libraries(example ${MATH_LIBS})
|
||||
else()
|
||||
|
18
test/test.py
18
test/test.py
@ -132,6 +132,10 @@ def test_extra_cmake_options():
|
||||
def test_cxx():
|
||||
configure_build_and_exe('cxx', 'python setup.py --cxx=g++')
|
||||
|
||||
|
||||
def test_cxx_static():
|
||||
configure_build_and_exe('cxx', 'python setup.py --cxx=g++ --static')
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
|
||||
@ -165,6 +169,10 @@ def test_fc_omp():
|
||||
os.environ['OMP_NUM_THREADS'] = '2'
|
||||
configure_build_and_exe('fc_omp', 'python setup.py --omp --fc=gfortran')
|
||||
|
||||
|
||||
def test_fc_static():
|
||||
configure_build_and_exe('fc', 'python setup.py --fc=gfortran --static')
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
|
||||
@ -172,9 +180,19 @@ def test_fc_omp():
|
||||
def test_fc_blas():
|
||||
configure_build_and_exe('fc_blas', 'python setup.py --fc=gfortran')
|
||||
|
||||
|
||||
@no_windows
|
||||
def test_fc_blas_static():
|
||||
configure_build_and_exe('fc_blas', 'python setup.py --fc=gfortran --static')
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
|
||||
@no_windows
|
||||
def test_fc_lapack():
|
||||
configure_build_and_exe('fc_lapack', 'python setup.py --fc=gfortran')
|
||||
|
||||
|
||||
@no_windows
|
||||
def test_fc_lapack_static():
|
||||
configure_build_and_exe('fc_lapack', 'python setup.py --fc=gfortran --static --cmake-options="-DMATH_LIB_SEARCH_ORDER=ATLAS"')
|
||||
|
Loading…
x
Reference in New Issue
Block a user