From ae548d48da4a160c6cd82c54ec1353870657257a Mon Sep 17 00:00:00 2001 From: Olivier Parcollet Date: Thu, 7 Dec 2017 15:56:05 +0100 Subject: [PATCH] WIP --- CMakeLists.txt | 42 +++++++++++++----------- c++/plovasp/atm/CMakeLists.txt | 5 ++- c++/plovasp/atm/test/CMakeLists.txt | 19 +++-------- fortran/dmftproj/CMakeLists.txt | 2 +- python/CMakeLists.txt | 12 ++++--- python/converters/plovasp/CMakeLists.txt | 14 ++++---- python/converters/plovasp/atm_desc.py | 2 +- test/CMakeLists.txt | 21 ++++++------ 8 files changed, 56 insertions(+), 61 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 15f67e33..7b3383b1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,45 +2,49 @@ set (DFT_TOOLS_VERSION "1.5") set (DFT_TOOLS_RELEASE "1.5.0") -# Append triqs installed files to the cmake load path -list(APPEND CMAKE_MODULE_PATH ${TRIQS_PATH}/share/triqs/cmake) +# Default to Release build type +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release CACHE STRING "Type of build" FORCE) +endif() +message( STATUS "-------- BUILD-TYPE: ${CMAKE_BUILD_TYPE} -------------") -# start configuration +# start configuration cmake_minimum_required(VERSION 2.8) project(dft_tools CXX Fortran) -set(CMAKE_BUILD_TYPE Release) -enable_testing() -# Load TRIQS, including all predefined variables from TRIQS installation -find_package(TRIQS REQUIRED) +# Use shared libraries +set(BUILD_SHARED_LIBS ON) + +# Load TRIQS and Cpp2Py +find_package(TRIQS 1.5 EXACT REQUIRED) +find_package(Cpp2Py REQUIRED) -# Check that versions are compatible -if(NOT DFT_TOOLS_VERSION EQUAL TRIQS_VERSION) - message(FATAL_ERROR "The application version is not compatible with the TRIQS library (TRIQS library version: ${TRIQS_VERSION} while this application version: ${DFT_TOOLS_VERSION})") -endif() if (NOT ${TRIQS_WITH_PYTHON_SUPPORT}) MESSAGE(FATAL_ERROR "dft_tools require Python support in TRIQS") endif() -# Get hash -triqs_get_git_hash(${CMAKE_SOURCE_DIR} "DFT_TOOLS") -if(${GIT_RESULT} EQUAL 0) - message(STATUS "Hash: ${DFT_TOOLS_GIT_HASH}") -endif(${GIT_RESULT} EQUAL 0) +# Default Install directory to TRIQS_ROOT if not given. Checks an absolute name is given. +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT OR (NOT IS_ABSOLUTE ${CMAKE_INSTALL_PREFIX})) + message(STATUS " No install prefix given (or invalid). Defaulting to TRIQS_ROOT") + set(CMAKE_INSTALL_PREFIX ${TRIQS_ROOT} CACHE PATH "default install path" FORCE) +endif() +message(STATUS "-------- CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX} -------------") -# We want to be installed in the TRIQS tree -set(CMAKE_INSTALL_PREFIX ${TRIQS_PATH}) +# Macro defined in TRIQS which picks the hash of repo. +triqs_get_git_hash_of_source_dir(DFT_TOOLS_GIT_HASH) +message(STATUS "Git hash: ${DFT_TOOLS_GIT_HASH}") add_subdirectory(fortran/dmftproj) # Add the compiling options (-D... ) for C++ message(STATUS "TRIQS : Adding compilation flags detected by the library (C++11/14, libc++, etc...) ") -add_definitions(${TRIQS_CXX_DEFINITIONS}) add_subdirectory(c++) add_subdirectory(python) add_subdirectory(shells) add_subdirectory(test) + + option(BUILD_DOC "Build documentation" OFF) if(${BUILD_DOC}) if(NOT TRIQS_WITH_DOCUMENTATION) diff --git a/c++/plovasp/atm/CMakeLists.txt b/c++/plovasp/atm/CMakeLists.txt index 228e950f..eb8b8340 100644 --- a/c++/plovasp/atm/CMakeLists.txt +++ b/c++/plovasp/atm/CMakeLists.txt @@ -1,7 +1,6 @@ -# Linking and include info add_library(atm_c dos_tetra3d.hpp dos_tetra3d.cpp argsort.hpp argsort.cpp) -set_target_properties(atm_c PROPERTIES LINKER_LANGUAGE CXX) -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/c++/plovasp/atm ${TRIQS_INCLUDE_ALL}) +target_link_libraries(atm_c triqs) +target_compile_options(atm_c PRIVATE -std=c++14) install(TARGETS atm_c DESTINATION lib) diff --git a/c++/plovasp/atm/test/CMakeLists.txt b/c++/plovasp/atm/test/CMakeLists.txt index eaecd9ed..d592f23c 100644 --- a/c++/plovasp/atm/test/CMakeLists.txt +++ b/c++/plovasp/atm/test/CMakeLists.txt @@ -1,24 +1,13 @@ -find_package(TriqsTest) enable_testing() -# Linking and include info -#add_library(atm_c dos_tetra3d.hpp dos_tetra3d.cpp argsort.h argsort.c) -#set_target_properties(atm_c PROPERTIES LINKER_LANGUAGE CXX) -#include_directories(${CMAKE_CURRENT_SOURCE_DIR}/c++/plovasp/atm ${TRIQS_INCLUDE_ALL}) - FILE(GLOB TestList RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp) FOREACH( TestName1 ${TestList} ) STRING(REPLACE ".cpp" "" TestName ${TestName1}) - add_executable( ${TestName} ${CMAKE_CURRENT_SOURCE_DIR}/${TestName}.cpp ) - target_link_libraries( ${TestName} atm_c ${TRIQS_LIBRARY_ALL} ) + add_executable( ${TestName} ${TestName}.cpp ) + target_link_libraries( ${TestName} atm_c triqs) triqs_set_rpath_for_target( ${TestName} ) - triqs_add_cpp_test( ${TestName} ) - if (TESTS_C_WITH_VALGRIND) - add_test ( ${TestName}_valgrind valgrind --error-exitcode=1 ${CMAKE_CURRENT_BINARY_DIR}/${TestName}) - endif() + add_test(NAME ${TestName} COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${t}) ENDFOREACH( TestName1 ${TestList} ) -#add_executable(test_atm test2py.cpp) -#target_link_libraries(test_atm atm_c) -#add_subdirectory(test) + diff --git a/fortran/dmftproj/CMakeLists.txt b/fortran/dmftproj/CMakeLists.txt index 2db677c8..7e66708b 100644 --- a/fortran/dmftproj/CMakeLists.txt +++ b/fortran/dmftproj/CMakeLists.txt @@ -6,7 +6,7 @@ set(SOURCES modules.f dmftproj.f readcomline.f set_ang_trans.f setsym.f # The main target and what to link with... add_executable(dmftproj ${SOURCES}) -target_link_libraries(dmftproj ${TRIQS_LIBRARY_LAPACK}) +target_link_libraries(dmftproj "-framework Accelerate") #${TRIQS_LIBRARY_LAPACK}) # where to install install (TARGETS dmftproj DESTINATION bin) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 426c3a74..32a92ef2 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -1,16 +1,18 @@ # where will the python end up in triqs? set(python_destination pytriqs/applications/dft) +set(PYTHON_LIB_DEST ${CPP2PY_PYTHON_LIB_DEST_ROOT}/pytriqs/cthyb) # site_customize for build set(package_name "pytriqs.applications") configure_file(${CMAKE_SOURCE_DIR}/cmake/sitecustomize.py ${CMAKE_CURRENT_BINARY_DIR}/sitecustomize.py @ONLY) -# make a local pytriqs copy -triqs_prepare_local_pytriqs(${python_destination}) - # VASP converter add_subdirectory(converters/plovasp) # add version file -configure_file(version.py.in version.py) -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/version.py DESTINATION ${TRIQS_PYTHON_LIB_DEST_ROOT}/${python_destination}) +configure_file(version.py.in version.py @ONLY) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/version.py DESTINATION ${PYTHON_LIB_DEST}) + + + + diff --git a/python/converters/plovasp/CMakeLists.txt b/python/converters/plovasp/CMakeLists.txt index 6271b4b0..67c7b732 100644 --- a/python/converters/plovasp/CMakeLists.txt +++ b/python/converters/plovasp/CMakeLists.txt @@ -1,11 +1,13 @@ set(python_destination pytriqs/applications/dft/converters/plovasp) -include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${TRIQS_INCLUDE_ALL}) -triqs_python_extension(atm ${python_destination}) -target_link_libraries(atm atm_c ${TRIQS_LIBRARY_ALL}) -triqs_set_rpath_for_target(atm) +add_cpp2py_module(atm) +target_link_libraries(atm atm_c triqs) +#triqs_set_rpath_for_target(atm) +target_compile_options(atm PRIVATE -std=c++14) # This we need in order for tests to work -add_custom_command(TARGET atm POST_BUILD COMMAND ln -fs ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}/atm.so ${CMAKE_BINARY_DIR}/python/dft/converters/plovasp) +#add_custom_command(TARGET atm POST_BUILD COMMAND ln -fs ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}/atm.so ${CMAKE_BINARY_DIR}/python/dft/converters/plovasp) + +install (TARGETS atm DESTINATION ${PYTHON_LIB_DEST}) + -install (TARGETS atm DESTINATION ${TRIQS_PYTHON_LIB_DEST_ROOT}/${python_destination}) diff --git a/python/converters/plovasp/atm_desc.py b/python/converters/plovasp/atm_desc.py index 48795a03..1fd53f01 100644 --- a/python/converters/plovasp/atm_desc.py +++ b/python/converters/plovasp/atm_desc.py @@ -1,6 +1,6 @@ # Generated automatically using the command : # c++2py.py -m atm -o atm --moduledoc "Analytical Tetrahedron Method for DOS" ../../../c++/plovasp/atm/dos_tetra3d.hpp -from wrap_generator import * +from cpp2py.wrap_generator import * # The module module = module_(full_name = "atm", doc = "Analytical Tetrahedron Method for calculating DOS", app_name = "atm") diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index e4edc52a..5ebe0867 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,20 +1,19 @@ -# load triqs helper to set up tests -find_package(TriqsTest) - # Copy h5 files to binary dir FILE(GLOB all_h5_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h5) file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/${all_h5_files} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) # Copy other files FILE(COPY SrVO3.pmat SrVO3.struct SrVO3.outputs SrVO3.oubwin SrVO3.ctqmcout SrVO3.symqmc SrVO3.sympar SrVO3.parproj hk_convert_hamiltonian.hk LaVO3-Pnma_hr.dat LaVO3-Pnma.inp DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) -triqs_add_python_test(wien2k_convert) -triqs_add_python_test(hk_convert) -triqs_add_python_test(w90_convert) -triqs_add_python_test(sumkdft_basic) -triqs_add_python_test(srvo3_Gloc) -triqs_add_python_test(srvo3_transp) -triqs_add_python_test(sigma_from_file) -triqs_add_python_test(blockstructure) +# List all tests +set(all_tests wien2k_convert hk_convert w90_convert sumkdft_basic srvo3_Gloc srvo3_transp sigma_from_file blockstructure) + +foreach(t ${all_tests}) + add_test(NAME ${t} COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/${t}.py) +endforeach() + +# Set the PythonPath : put the build dir first (in case there is an installed version). +set_property(TEST ${all_tests} PROPERTY ENVIRONMENT PYTHONPATH=${CMAKE_BINARY_DIR}/python:$ENV{PYTHONPATH} ) + # VASP converter tests add_subdirectory(plovasp)