PROJECT(exciton CXX Fortran) enable_language(C) set(CMAKE_BUILD_TYPE "None") #set(CMAKE_CXX_FLAGS "-strict-ansi") #set(CMAKE_CXX_COMPILER #"/usr/support/arch/x86_64/OPENMPI/OPENMPI-1.3.1--intel-11.0/bin/mpicxx") #"/home/tsphy/cpttrson/install/openmpi-1.3/bin/mpicxx") set(VERSION_MAJOR "0") set(VERSION_MINOR "9") set(VERSION_PATCH "1") find_program(SVN "svn") if(SVN) execute_process(COMMAND ${SVN} info ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE SVN_OUT) string(REGEX REPLACE "\n" " " svn_int "${SVN_OUT}") string(REGEX REPLACE ".*Revision: ([^ ]+).*" "\\1" VERSION_PATCH "${svn_int}" ) set(VERSION_PATCH "svn_${VERSION_PATCH}") endif(SVN) set(AUTHOR "Charles Patterson") set(AUTHOR_DETAILS "charles.patterson@tcd.ie") set(DESCRIPTION "Exciton") cmake_minimum_required(VERSION 2.6) if(COMMAND cmake_policy) cmake_policy(SET CMP0004 NEW) endif(COMMAND cmake_policy) ########################## ###source files and target name set(src_dir source) set(target_name exciton09) ########################## ######################################## ## place to put some useful stuff set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/Util") ########################################## ### Make sure the compiler can find include files from our project INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include) ## ########################## ## external libs find_package(CUDA REQUIRED) find_package(GSL REQUIRED) message("Using this linkage for gsl: ${GSL_LIBRARIES} with flags ${CMAKE_GSL_CXX_FLAGS}") INCLUDE_DIRECTORIES(${GSL_INCLUDE_DIR}) set(LIBS ${CMAKE_GSL_CXX_FLAGS} ${GSL_LIBRARIES}) set(BLA_STATIC OFF) if (UNIX) # set(BLA_VENDOR "Intel10_64lp") set(BLA_VENDOR "Generic") endif(UNIX) if (WIN32) set(BLA_VENDOR "Intel10_32") endif(WIN32) set(BLA_F95 OFF) find_package(Threads) message("Using this linkage for threads ${CMAKE_THREAD_LIBS_INIT}") find_package(LAPACK REQUIRED) message("Using this linkage for blas/lapack: ${LAPACK_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} with flags ${LAPACK_LINKER_FLAGS} ") set(LIBS ${LIBS} ${LAPACK_LINKER_FLAGS} ${LAPACK_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}) ########################## ###################### ###documentation set(doc_dir doc) find_package(Doxygen) ###################### ##set device emulation mode ON or OFF set(CUDA_BUILD_EMULATION OFF) ############################## ##set the output folder for libs and bins set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) ################### ###### ## adds user libs cuda_add_library(algebra SHARED #add_library(algebra ${src_dir}/linalg.f90 ) #################### #~ set_source_files_properties(${src_dir}/SCF2.f90 #~ PROPERTIES COMPILE_FLAGS /Od) message("CMAKE_SIZEOF_VOID_P = ${CMAKE_SIZEOF_VOID_P}") #################### ##### adds the main target cuda_add_executable(${target_name} #${src_dir}/ATOM_SCF.cpp ${src_dir}/SCF1.cpp ${src_dir}/INTEGRALS1.cpp ${src_dir}/KPOINTS1.cpp ${src_dir}/INPUT_JOB_CTRL.cpp #${src_dir}/ANALYSIS1.cpp #${src_dir}/PLOTTING.cpp ${src_dir}/MATRIX_UTIL.cpp ${src_dir}/PAIRS_QUADS.cpp ${src_dir}/TOOLS.cpp ${src_dir}/HEADER.cpp #${src_dir}/CRYSTAL1.cpp ${src_dir}/MAIN1.cpp ${src_dir}/SYMMETRY.cpp #${src_dir}/PARALLEL.cpp ${src_dir}/MEMORY.cpp #${src_dir}/kernel.cu ${src_dir}/ATOM_SCF1.cpp ${src_dir}/ATOM_SCF_kernel.cu ${src_dir}/ATOM_SCF_CUDA.cu ) #################### ################# ## sets the linking link_directories (${LIBRARY_OUTPUT_PATH}) target_link_libraries(${target_name} algebra ${LIBS}) ################# if(DOXYGEN) configure_file(${CMAKE_SOURCE_DIR}/Doxyfile.cmake Doxyfile) add_custom_target(docs ${DOXYGEN_EXECUTABLE} ${PROJECT_BINARY_DIR}/Doxyfile) endif(DOXYGEN) #################### ####install target #################### if(NOT ${PREFIX}) MESSAGE("Install folder ${PREFIX}") set(CMAKE_INSTALL_PREFIX "${PREFIX}") endif(NOT ${PREFIX}) install(TARGETS ${target_name} RUNTIME DESTINATION bin LIBRARY DESTINATION lib/${target_name} ARCHIVE DESTINATION lib/${target_name} ) install(DIRECTORY ${CMAKE_SOURCE_DIR}/examples DESTINATION share REGEX ".svn" EXCLUDE) if(DOXYGEN) install(CODE "execute_process(COMMAND ${CMAKE_BUILD_TOOL} docs)") install(DIRECTORY ${CMAKE_BINARY_DIR}/doc/html/ DESTINATION doc) endif(DOXYGEN) ####################### ## uninstall target ####################### ###create the uninstall script set(unfile ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) file(WRITE ${unfile} "IF(NOT EXISTS \"install_manifest.txt\")\n") file(APPEND ${unfile} "MESSAGE(\"FATAL_ERROR Cannot find \\\"install manifest\\\": install_manifest.txt\")\n") file(APPEND ${unfile} "ENDIF(NOT EXISTS \"install_manifest.txt\")\n") file(APPEND ${unfile} "FILE(READ \"install_manifest.txt\" files)\n") file(APPEND ${unfile} "STRING(REGEX REPLACE \"\\n\" \";\" files \"\${files}\")\n") file(APPEND ${unfile} "FOREACH(file \${files})\n") file(APPEND ${unfile} " MESSAGE(STATUS \"Uninstalling \\\"\${file}\\\"\")\n") file(APPEND ${unfile} " IF(EXISTS \"\${file}\")\n") file(APPEND ${unfile} " EXEC_PROGRAM(\n") file(APPEND ${unfile} " \"\${CMAKE_COMMAND}\" ARGS \"-E remove \\\"\${file}\\\"\"\n") file(APPEND ${unfile} " OUTPUT_VARIABLE rm_out\n") file(APPEND ${unfile} " RETURN_VALUE rm_retval\n") file(APPEND ${unfile} " )\n") file(APPEND ${unfile} " IF(\"\${rm_retval}\" STREQUAL 0\)\n") file(APPEND ${unfile} " ELSE(\"\${rm_retval}\" STREQUAL 0\)\n") file(APPEND ${unfile} " MESSAGE(FATAL_ERROR \"Problem when removing \\\"\${file}\\\"\")\n") file(APPEND ${unfile} " ENDIF(\"\${rm_retval}\" STREQUAL 0)\n") file(APPEND ${unfile} " ELSE(EXISTS \"\${file}\")\n") file(APPEND ${unfile} " MESSAGE(STATUS \"File \\\"\${file}\\\" does not exist.\")\n") file(APPEND ${unfile} " ENDIF(EXISTS \"\${file}\")\n") file(APPEND ${unfile} "ENDFOREACH(file)\n") ######################## ADD_CUSTOM_TARGET(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") ########################### ########################### ##Packaging ########################### SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${DESCRIPTION}) SET(CPACK_PACKAGE_EXECUTABLES ${target_name}) SET(CPACK_PACKAGE_VENDOR ${AUTHOR}) SET(CPACK_PACKAGE_CONTACT ${AUTHOR_DETAILS}) SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README") SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/COPYING") SET(CPACK_PACKAGE_VERSION_MAJOR ${VERSION_MAJOR}) SET(CPACK_PACKAGE_VERSION_MINOR ${VERSION_MINOR}) SET(CPACK_PACKAGE_VERSION_PATCH ${VERSION_PATCH}) SET(CPACK_PACKAGE_INSTALL_DIRECTORY "${target_name}-${VERSION_MAJOR}.${VERSION_MINOR}") SET(CPACK_GENERATOR "TGZ;TBZ2;ZIP;RPM;DEB") SET(CPACK_CMAKE_GENERATOR ${CMAKE_GENERATOR}) #SET(CPACK_SOURCE_GENERATOR "TGZ;TBZ2;ZIP;RPM;DEB") SET(CPACK_SOURCE_GENERATOR "TGZ;TBZ2;ZIP") SET(CPACK_SOURCE_IGNORE_FILES "/thesis/;/\\\\.svn/") # # - Define a toplevel package_source_backup target # which build a dated tarball # # Those CMake macros are provided by the TSP Developer Team # https://savannah.nongnu.org/projects/tsp # IF (UNIX) # get the date EXECUTE_PROCESS(COMMAND whoami TIMEOUT 5 RESULT_VARIABLE WHO_RES OUTPUT_VARIABLE WHO_OUT ERROR_VARIABLE WHO_ERR OUTPUT_STRIP_TRAILING_WHITESPACE) MESSAGE(STATUS "Package Backup got ${WHO_OUT}.") # get the date EXECUTE_PROCESS(COMMAND date +%d%b%Y-%Hh%M TIMEOUT 5 RESULT_VARIABLE DATE_RES OUTPUT_VARIABLE DATE_OUT ERROR_VARIABLE DATE_ERR OUTPUT_STRIP_TRAILING_WHITESPACE) MESSAGE(STATUS "Package Backup got ${DATE_OUT}.") SET(CPACK_SOURCE_PACKAGE_FILE_NAME "${target_name}-${VERSION_MAJOR}.${VERSION_MINOR}-${VERSION_PATCH}_${WHO_OUT}_${DATE_OUT}") ENDIF(UNIX) INCLUDE(CPack)