Newer
Older
cmake_minimum_required( VERSION 2.8.10 )
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
include( OptimizeForArchitecture )
if( CMAKE_BUILD_TYPE STREQUAL "Debug")
set( PROJECT_BUILD_PATH ${PROJECT_SOURCE_DIR}/Debug/src )
set( PROJECT_TESTS_PATH ${PROJECT_SOURCE_DIR}/Debug/tests )
set( LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/Debug/lib )
set( EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/Debug/bin )
set( debugExt -dbg )
set( CXX_FLAGS "${CXXFLAGS} -g ")
#AddCompilerFlag( "-g" )
else()
set( PROJECT_BUILD_PATH ${PROJECT_SOURCE_DIR}/Release/src )
set( PROJECT_TESTS_PATH ${PROJECT_SOURCE_DIR}/Release/tests )
set( LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/Release/lib)
set( EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/Release/bin)
#OptimizeForArchitecture()
AddCompilerFlag( "-O3 -march=native -DNDEBUG" )
#####
# Check for CUDA
#
find_package( CUDA )
if( CUDA_FOUND )
set( BUILD_CUDA TRUE)
set(CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE OFF)
set(BUILD_SHARED_LIBS ON)
set(CUSPARSE_LIBRARY /usr/local/cuda/lib64/libcusparse.so) # TODO: fix this
set( CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ; -DHAVE_CUDA )
AddCompilerFlag( "-DHAVE_NOT_CXX11" ) # -U_GLIBCXX_ATOMIC_BUILTINS -U_GLIBCXX_USE_INT128 " )
set( CUDA_ADD_EXECUTABLE_OPTIONS -gencode arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 )
set( CUDA_ADD_LIBRARY_OPTIONS -gencode arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -shared )
set( CUDA_LINKER_OPTIONS "-arch sm_20 -shared " )
####
# Check for cuBLAS
#
if( WITH_CUBLAS STREQUAL "yes" )
message( "Enabling CUBLAS." )
set( HAVE_CUBLAS TRUE)
set( HAVE_CUBLAS "#define HAVE_CUBLAS" )
endif( WITH_CUBLAS STREQUAL "yes" )
####
# Check for CUSP
#
find_path( CUSP_INCLUDE_DIR cusp/hyb_matrix.h
DOC "CUSP headers." )
if( ${CUSP_INCLUDE_DIR} STREQUAL "CUSP_INCLUDE_DIR-NOTFOUND" )
message( "CUSP not found." )
set( HAVE_CUSP "//#define HAVE_CUSP" )
else()
message( "CUSP found. -- ${CUSP_INCLUDE_DIR}" )
set( HAVE_CUSP "#define HAVE_CUSP" )
cuda_include_directories( ${CUSP_INCLUDE_DIR} )
endif()
####
# Check for CUSPARSE
#
if( NOT WITH_CUSPARSE STREQUAL "no" )
find_path( CUSPARSE_INCLUDE_DIR cusparse.h
/usr/local/cuda/include
${CUDA_INCLUDE_DIR}
DOC "CUSPARSE headers." )
if( ${CUSPARSE_INCLUDE_DIR} STREQUAL "CUSPARSE_INCLUDE_DIR-NOTFOUND" )
message( "CUSPARSE not found." )
set( HAVE_CUSPARSE "//#define HAVE_CUSPARSE" )
else()
message( "CUSPARSE found. -- ${CUSPARSE_INCLUDE_DIR}" )
set( HAVE_CUSPARSE "#define HAVE_CUSPARSE" )
cuda_include_directories( ${CUSPARSE_INCLUDE_DIR} )
endif( NOT WITH_CUSPARSE STREQUAL "no" )
else( CUDA_FOUND )
AddCompilerFlag( "-std=gnu++0x" )
#AddCompilerFlag( "-std=gnu++0x -ftree-vectorizer-verbose=1" )
AddCompilerFlag( "-std=gnu++0x" )
####
# Check for OpenMP
#
find_package( OpenMP )
if( OPENMP_FOUND )
#AddCompilerFlag( "-DHAVE_OPENMP -fopenmp" )
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_OPENMP -fopenmp")
#find_package( MPI )
#if( MPI_CXX_FOUND )
# set( BUILD_MPI TRUE )
# message( "MPI headers found -- ${MPI_CXX_INCLUDE_PATH}")
#endif()
####
# Check for some system header
#
find_path( SYS_TIME_INCLUDE_DIR sys/time.h
/usr/include/x86_64-linux-gnu
/usr/include
DOC "System timer headers." )
if( ${SYS_TIME_INCLUDE_DIR} STREQUAL "SYS_TIME_INCLUDE_DIR-NOTFOUND" )
message( "Missing header file sys/time.h" )
set( HAVE_SYS_TIME_H "//#define HAVE_SYS_TIME_H" )
else()
include_directories( ${SYS_TIME_INCLUDE_DIR}/tnl-${tnlVersion} )
set( HAVE_SYS_TIME_H "#define HAVE_SYS_TIME_H" )
endif()
find_path( SYS_RESOURCE_INCLUDE_DIR sys/resource.h
/usr/include/x86_64-linux-gnu
/usr/include
DOC "System resources headers." )
if( ${SYS_RESOURCE_INCLUDE_DIR} STREQUAL "SYS_RESOURCE_INCLUDE_DIR-NOTFOUND" )
message( "Missing header file sys/time.h" )
set( HAVE_SYS_RESOURCE_H "//#define HAVE_SYS_RESOURCE_H" )
else()
include_directories( ${SYS_RESOURCE_INCLUDE_DIR}/tnl-${tnlVersion} )
set( HAVE_SYS_RESOURCE_H "#define HAVE_SYS_RESOURCE_H" )
endif()
####
# Check for cppunit
#
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
if( WITH_TESTS STREQUAL "yes" )
FIND_PATH(CPPUNIT_INCLUDE_DIR cppunit/TestCase.h
/usr/local/include
/usr/include
DOC "CppUnit headers."
)
####
# With Win32, important to have both
#
if(WIN32)
FIND_LIBRARY(CPPUNIT_LIBRARY cppunit
${CPPUNIT_INCLUDE_DIR}/../lib
/usr/local/lib
/usr/lib)
FIND_LIBRARY(CPPUNIT_DEBUG_LIBRARY cppunitd
${CPPUNIT_INCLUDE_DIR}/../lib
/usr/local/lib
/usr/lib)
else(WIN32)
# On unix system, debug and release have the same name
FIND_LIBRARY(CPPUNIT_LIBRARY cppunit
${CPPUNIT_INCLUDE_DIR}/../lib
/usr/local/lib
/usr/lib)
FIND_LIBRARY(CPPUNIT_DEBUG_LIBRARY cppunit
${CPPUNIT_INCLUDE_DIR}/../lib
/usr/local/lib
/usr/lib)
endif(WIN32)
if( ${CPPUNIT_INCLUDE_DIR} STREQUAL "CPPUNIT_INCLUDE_DIR-NOTFOUND" )
message( "CPPUNIT not found." )
set( HAVE_CPPUNIT "//#define HAVE_CPPUNIT" )
else( ${CPPUNIT_INCLUDE_DIR} STREQUAL "CPPUNIT_INCLUDE_DIR-NOTFOUND" )
message( "CPPUNIT headers found -- ${CPPUNIT_INCLUDE_DIR}" )
if(CPPUNIT_LIBRARY)
message( "CPPUNIT library found -- ${CPPUNIT_LIBRARY}" )
set(CPPUNIT_FOUND "YES")
set(CPPUNIT_LIBRARIES ${CPPUNIT_LIBRARY} ${CMAKE_DL_LIBS})
set(CPPUNIT_DEBUG_LIBRARIES ${CPPUNIT_DEBUG_LIBRARY}
${CMAKE_DL_LIBS})
set( HAVE_CPPUNIT "#define HAVE_CPPUNIT" )
endif(CPPUNIT_LIBRARY)
endif( ${CPPUNIT_INCLUDE_DIR} STREQUAL "CPPUNIT_INCLUDE_DIR-NOTFOUND" )
ENABLE_TESTING()
INCLUDE( Dart )
endif( WITH_TESTS STREQUAL "yes" )
#if( BUILD_MPI )
# FIND_PATH( PETSC_INCLUDE_DIR petsc.h
# /usr/include/petsc
# ${PETSC_DIR}/${PETSC_ARCH}/include
# ${PETSC_DIR}/include
# DOC "PETSC headers."
# )
# if( ${PETSC_INCLUDE_DIR} STREQUAL "PETSC_INCLUDE_DIR-NOTFOUND" )
# message( "PETSC not found." )
# else()
# message( "PETSC headers found -- ${PETSC_INCLUDE_DIR}" )
# FIND_LIBRARY(PETSC_LIBRARY petsc
# ${PETSC_INCLUDE_DIR}/../lib
# /usr/local/lib
# /usr/lib)
# if( PETSC_LIBRARY )
# #string( REPLACE ";" " " MPI_LIBRARIES "${MPI_CXX_LIBRARIES}" )
# #set( PETSC_LIBRARY "${MPI_LIBRARIES} ${PETSC_LIBRARY}")
# message( "PETSC library found -- ${PETSC_LIBRARY}")
# list( GET MPI_CXX_INCLUDE_PATH 0 MPI_CXX_PATH )
# set(PETSC_CXX_FLAGS "-DHAVE_PETSC -I${PETSC_INCLUDE_DIR} -DHAVE_MPI -I${MPI_CXX_PATH}")
# endif()
# endif()
#endif()
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
####
# Explicit template instantiation
#
if( WITH_TEMPLATE_INSTANTIATION STREQUAL "yes" )
AddCompilerFlag( "-DTEMPLATE_EXPLICIT_INSTANTIATION " )
endif()
if( INSTANTIATE_INT STREQUAL "yes" )
AddCompilerFlag( "-DINSTANTIATE_INT " )
endif()
if( INSTANTIATE_LONG_INT STREQUAL "yes" )
AddCompilerFlag( "-DINSTANTIATE_LONG_INT " )
endif()
if( INSTANTIATE_FLOAT STREQUAL "yes" )
AddCompilerFlag( "-DINSTANTIATE_FLOAT " )
endif()
if( INSTANTIATE_DOUBLE STREQUAL "yes" )
AddCompilerFlag( "-DINSTANTIATE_DOUBLE " )
endif()
if( INSTANTIATE_LONG_DOUBLE STREQUAL "yes" )
AddCompilerFlag( "-DINSTANTIATE_LONG_DOUBLE " )
endif()
set( CXX_TEST_FLAGS "-fprofile-arcs -ftest-coverage" )
set( LD_TEST_FLAGS "-lgcov -coverage" )
set( configDirectory \"${CMAKE_INSTALL_PREFIX}/share/tnl-${tnlVersion}/\")
set( sourceDirectory \"${PROJECT_SOURCE_DIR}/\" )
set( testsDirectory \"${PROJECT_TESTS_PATH}/\" )
CONFIGURE_FILE( "tnlConfig.h.in" "${PROJECT_BUILD_PATH}/tnlConfig.h" )
INSTALL( FILES ${PROJECT_BUILD_PATH}/tnlConfig.h DESTINATION include/tnl-${tnlVersion} )
#Nastavime cesty k hlavickovym souborum a knihovnam
INCLUDE_DIRECTORIES( src )
INCLUDE_DIRECTORIES( ${PROJECT_BUILD_PATH} )
LINK_DIRECTORIES( ${LIBRARY_OUTPUT_PATH} )
#Pokracujeme dalsimi podadresari
add_subdirectory( src )
add_subdirectory( tests )
add_subdirectory( tools )
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Template Numerical Library")
set(CPACK_PACKAGE_VENDOR "MMG")
#set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/ReadMe.txt")
#set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/Copyright.txt")
set(CPACK_PACKAGE_VERSION_MAJOR "0")
set(CPACK_PACKAGE_VERSION_MINOR "1")
set(CPACK_PACKAGE_VERSION_PATCH "0")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "CMake ${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}")
if(WIN32 AND NOT UNIX)
# There is a bug in NSI that does not handle full unix paths properly. Make
# sure there is at least one set of four (4) backlasshes.
#set(CPACK_PACKAGE_ICON "${CMake_SOURCE_DIR}/Utilities/Release\\\\InstallIcon.bmp")
#set(CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\MyExecutable.exe")
set(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY} Template Numerical Library")
set(CPACK_NSIS_HELP_LINK "http:\\\\\\\\geraldine.fjfi.cvut.cz/~oberhuber/doku-wiki-tnl")
set(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\geraldine.fjfi.cvut.cz/~oberhuber/doku-wiki-tnl")
set(CPACK_NSIS_CONTACT "tomas.oberhuber@fjfi.cvut.cz")
set(CPACK_NSIS_MODIFY_PATH ON)
else(WIN32 AND NOT UNIX)
# set(CPACK_STRIP_FILES "bin/MyExecutable")
endif(WIN32 AND NOT UNIX)
set(CPACK_SOURCE_STRIP_FILES "Debug")
set(CPACK_SOURCE_STRIP_FILES "Release")
#set(CPACK_PACKAGE_EXECUTABLES "MyExecutable" "My Executable")