From a3c1f5bfa188bb8e185148ebcb1480c1655f1cfb Mon Sep 17 00:00:00 2001 From: Henri Menke Date: Fri, 17 Nov 2023 11:12:49 +0100 Subject: [PATCH 1/5] Switch back to w2dynamics upstream repository --- .github/workflows/build.yml | 11 +++++----- CMakeLists.txt | 5 ++--- w2dynamics.patch | 40 ------------------------------------- 3 files changed, 8 insertions(+), 48 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 338ad1e..bdf9599 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -61,6 +61,12 @@ jobs: python3-sphinx python3-nbsphinx + - name: Set up Python + if: matrix.os == 'macos-12' + uses: actions/setup-python@v4 + with: + python-version: '3.11' # 3.12 removed distutils + - name: Install homebrew dependencies if: matrix.os == 'macos-12' run: | @@ -77,11 +83,6 @@ jobs: run: echo "CXXFLAGS=-stdlib=libc++" >> $GITHUB_ENV - - name: add clang cxxflags - if: ${{ contains(matrix.cxx, 'clang') }} - run: - echo "CXXFLAGS=-stdlib=libc++" >> $GITHUB_ENV - - name: Build & Install TRIQS env: CC: ${{ matrix.cc }} diff --git a/CMakeLists.txt b/CMakeLists.txt index 57a8986..4c5c388 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,7 +67,7 @@ message(STATUS "-------- BUILD-TYPE: ${CMAKE_BUILD_TYPE} --------") # --- Define the w2dynamics interface version numbers and get the git hash -set(W2DYN_GIT_HASH b5a2bcc9ecdb694703a4e683b63352bedf116882) +set(W2DYN_GIT_HASH 5d0d8b28b567d0590071f24e784d048f6d35865a) message(STATUS "w2dynamics git hash: ${W2DYN_GIT_HASH}") # --- Build w2dynamics as an external project @@ -76,8 +76,7 @@ get_property(FFTW_LIBRARIES TARGET triqs::fftw PROPERTY INTERFACE_LINK_LIBRARIES include(ExternalProject) ExternalProject_Add(w2dynamics PREFIX w2dyn_project - #GIT_REPOSITORY https://github.com/w2dynamics/w2dynamics - GIT_REPOSITORY https://github.com/the-hampel/w2dynamics + GIT_REPOSITORY https://github.com/w2dynamics/w2dynamics GIT_TAG ${W2DYN_GIT_HASH} GIT_CONFIG advice.detachedHead=false CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} diff --git a/w2dynamics.patch b/w2dynamics.patch index cdb4e7d..53ea3cd 100644 --- a/w2dynamics.patch +++ b/w2dynamics.patch @@ -1,17 +1,3 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 67ecb0b..8eea51d 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -180,6 +180,9 @@ SET(CMAKE_Fortran_MODULE_DIRECTORY ${LIB}) - ADD_SUBDIRECTORY(${SRCMTRNG} ${LIB}) - - # The source for the ctqmc binary and have it placed in the bin folder -+if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") -+ set(F2PY_ENV CFLAGS=-Wno-error=incompatible-function-pointer-types) -+endif() - ADD_SUBDIRECTORY(${SRCCTQMC}) - ADD_SUBDIRECTORY(${SRCMAXENT}) - diff --git a/cmake/Modules/SetFortranFlags.cmake b/cmake/Modules/SetFortranFlags.cmake index caab7fc..264978a 100644 --- a/cmake/Modules/SetFortranFlags.cmake @@ -29,29 +15,3 @@ index caab7fc..264978a 100644 #The following does not seem to get added... SET_COMPILE_FLAG(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}" -diff --git a/src/ctqmc_fortran/CMakeLists.txt b/src/ctqmc_fortran/CMakeLists.txt -index 44f66a3..2f9ae07 100644 ---- a/src/ctqmc_fortran/CMakeLists.txt -+++ b/src/ctqmc_fortran/CMakeLists.txt -@@ -92,7 +92,7 @@ endif (USE_NFFT) - # output will be a shared library that can be imported by python. - add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${_name}${F2PY_SUFFIX}" - COMMAND ${CMAKE_COMMAND} -E copy "${SRCCTQMC}/.f2py_f2cmap" "${CMAKE_CURRENT_BINARY_DIR}/.f2py_f2cmap" -- COMMAND ${PYTHON_EXECUTABLE} -m numpy.f2py -c $<$:--quiet> -m ${_name} -+ COMMAND ${F2PY_ENV} ${PYTHON_EXECUTABLE} -m numpy.f2py -c $<$:--quiet> -m ${_name} - --build-dir "${CMAKE_Fortran_MODULE_DIRECTORY}" - ${_fcompiler_opts} - ${LIB}/libmtrng.a -diff --git a/src/maxent/CMakeLists.txt b/src/maxent/CMakeLists.txt -index cd17611..aa242c4 100644 ---- a/src/maxent/CMakeLists.txt -+++ b/src/maxent/CMakeLists.txt -@@ -69,7 +69,7 @@ set(EXTERNAL_LIBRARIES ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES}) - set(ADDITIONAL_OPTS -fPIC -DLAPACK77_Interface) - add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${_name}${F2PY_SUFFIX}" - COMMAND ${CMAKE_COMMAND} -E copy "${SRCMAXENT}/.f2py_f2cmap" "${CMAKE_CURRENT_BINARY_DIR}/.f2py_f2cmap" -- COMMAND ${PYTHON_EXECUTABLE} -m numpy.f2py -c $<$:--quiet> -m ${_name} -+ COMMAND ${F2PY_ENV} ${PYTHON_EXECUTABLE} -m numpy.f2py -c $<$:--quiet> -m ${_name} - --build-dir "${CMAKE_Fortran_MODULE_DIRECTORY}" - ${_fcompiler_opts} --opt="${ADDITIONAL_OPTS}" ${_inc_opts} - ${EXTERNAL_LIBRARIES} From 90a318fbf8ead99697a54be4bc1d9a86c17f7647 Mon Sep 17 00:00:00 2001 From: Alexander Hampel Date: Fri, 23 Feb 2024 11:36:02 -0500 Subject: [PATCH 2/5] switch to most recent w2dyn commit --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4c5c388..cd9fd0d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,7 +67,7 @@ message(STATUS "-------- BUILD-TYPE: ${CMAKE_BUILD_TYPE} --------") # --- Define the w2dynamics interface version numbers and get the git hash -set(W2DYN_GIT_HASH 5d0d8b28b567d0590071f24e784d048f6d35865a) +set(W2DYN_GIT_HASH f2d54372a987c6819891ae18dfb234b6fbdc807a) message(STATUS "w2dynamics git hash: ${W2DYN_GIT_HASH}") # --- Build w2dynamics as an external project From 040ff862d616ab5dfc54a070830b49747b825f36 Mon Sep 17 00:00:00 2001 From: Alexander Hampel Date: Fri, 23 Feb 2024 11:44:04 -0500 Subject: [PATCH 3/5] [build] add setuptools as requirement --- requirements.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/requirements.txt b/requirements.txt index 07e0197..a9e5463 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,3 +4,6 @@ numpy>=1.18 scipy>=1.4 h5py configobj +meson +setuptools +ninja From bcf2e7d938565ff4ff28d3c019e632e56e31aef3 Mon Sep 17 00:00:00 2001 From: Alexander Hampel Date: Mon, 4 Mar 2024 14:44:47 -0500 Subject: [PATCH 4/5] remove patch command and update git hash --- CMakeLists.txt | 4 ++-- w2dynamics.patch | 17 ----------------- 2 files changed, 2 insertions(+), 19 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cd9fd0d..1e01cd0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,7 +67,7 @@ message(STATUS "-------- BUILD-TYPE: ${CMAKE_BUILD_TYPE} --------") # --- Define the w2dynamics interface version numbers and get the git hash -set(W2DYN_GIT_HASH f2d54372a987c6819891ae18dfb234b6fbdc807a) +set(W2DYN_GIT_HASH 5720a29447920e0fa160c345d278970f6a311e71) message(STATUS "w2dynamics git hash: ${W2DYN_GIT_HASH}") # --- Build w2dynamics as an external project @@ -85,7 +85,7 @@ ExternalProject_Add(w2dynamics -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DFFTW_LIBRARIES=${FFTW_LIBRARIES} INSTALL_COMMAND "" - PATCH_COMMAND ${TRIQS_GIT_EXECUTABLE} checkout . && ${TRIQS_GIT_EXECUTABLE} apply ${PROJECT_SOURCE_DIR}/w2dynamics.patch + # PATCH_COMMAND ${TRIQS_GIT_EXECUTABLE} checkout . && ${TRIQS_GIT_EXECUTABLE} apply ${PROJECT_SOURCE_DIR}/w2dynamics.patch ) set(W2DYN_ROOT ${PROJECT_BINARY_DIR}/w2dyn_project/src/w2dynamics) diff --git a/w2dynamics.patch b/w2dynamics.patch index 53ea3cd..e69de29 100644 --- a/w2dynamics.patch +++ b/w2dynamics.patch @@ -1,17 +0,0 @@ -diff --git a/cmake/Modules/SetFortranFlags.cmake b/cmake/Modules/SetFortranFlags.cmake -index caab7fc..264978a 100644 ---- a/cmake/Modules/SetFortranFlags.cmake -+++ b/cmake/Modules/SetFortranFlags.cmake -@@ -55,12 +55,6 @@ ENDIF(CMAKE_Fortran_FLAGS_RELEASE AND CMAKE_Fortran_FLAGS_TESTING AND CMAKE_Fort - #SET_COMPILE_FLAG(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}" - # Fortran "-fno-underscoring") - --# There is some bug where -march=native doesn't work on Mac --IF(APPLE) -- SET(GNUNATIVE "-mtune=native") --ELSE() -- SET(GNUNATIVE "-march=native") --ENDIF() - - #The following does not seem to get added... - SET_COMPILE_FLAG(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}" From 903ffbbf87c48c15e1f50052b4499b5fc00fb5c0 Mon Sep 17 00:00:00 2001 From: Henri Menke Date: Fri, 17 Nov 2023 11:12:49 +0100 Subject: [PATCH 5/5] Update w2dynamics.patch --- CMakeLists.txt | 2 +- w2dynamics.patch | 164 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 165 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1e01cd0..3d30b9a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -85,7 +85,7 @@ ExternalProject_Add(w2dynamics -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DFFTW_LIBRARIES=${FFTW_LIBRARIES} INSTALL_COMMAND "" - # PATCH_COMMAND ${TRIQS_GIT_EXECUTABLE} checkout . && ${TRIQS_GIT_EXECUTABLE} apply ${PROJECT_SOURCE_DIR}/w2dynamics.patch + PATCH_COMMAND ${TRIQS_GIT_EXECUTABLE} checkout . && ${TRIQS_GIT_EXECUTABLE} apply ${PROJECT_SOURCE_DIR}/w2dynamics.patch ) set(W2DYN_ROOT ${PROJECT_BINARY_DIR}/w2dyn_project/src/w2dynamics) diff --git a/w2dynamics.patch b/w2dynamics.patch index e69de29..026379a 100644 --- a/w2dynamics.patch +++ b/w2dynamics.patch @@ -0,0 +1,164 @@ +diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml +index ff8e650..7e283b0 100644 +--- a/.github/workflows/build.yml ++++ b/.github/workflows/build.yml +@@ -47,5 +47,7 @@ jobs: + + - name: Test + run: | ++ env "PYTHONPATH=$PWD/w2dyn/auxiliaries:$PYTHONPATH" python3 -c 'import CTQMC' ++ env "PYTHONPATH=$PWD/w2dyn/maxent:$PYTHONPATH" python3 -c 'import MAXENT' + cd build + ctest --output-on-failure +diff --git a/src/ctqmc_fortran/CMakeLists.txt b/src/ctqmc_fortran/CMakeLists.txt +index 33faafa..9eed7fd 100644 +--- a/src/ctqmc_fortran/CMakeLists.txt ++++ b/src/ctqmc_fortran/CMakeLists.txt +@@ -48,62 +48,28 @@ if (USE_NFFT) + endif (USE_NFFT) + + set(_name CTQMC) +- set (CPPSTDLIBRARY "-lstdc++")#placeholder if we decide to better parse platforms in the future... +- +- # hack to not pass .dylib or .framework library file names directly +- # because f2py does not accept them as arguments +- function(rephrase_dylib TARGET_VAR LIBRARIES_STRING) +- set(RESULT_LIST "") +- foreach(entry ${LIBRARIES_STRING}) +- string(TOUPPER "${entry}" upcaseentry) +- if(upcaseentry MATCHES "LIB([A-Za-z0-9_]*)\\.DYLIB$") +- get_filename_component(entry_dir "${entry}" DIRECTORY) +- string(LENGTH "${CMAKE_MATCH_1}" libname_length) +- string(FIND "${upcaseentry}" "${CMAKE_MATCH_1}" libname_begin REVERSE) +- string(SUBSTRING "${entry}" "${libname_begin}" "${libname_length}" libname) +- list(APPEND RESULT_LIST "-L${entry_dir}" "-l${libname}") +- elseif((upcaseentry MATCHES ".*ACCELERATE\\.FRAMEWORK.*") OR (upcaseentry MATCHES ".*VECLIB\\.FRAMEWORK.*")) +- # f2py will use numpy.distutils.system_info +- list(APPEND RESULT_LIST "--link-accelerate") +- else() +- list(APPEND RESULT_LIST "${entry}") +- endif() +- endforeach() +- set("${TARGET_VAR}" "${RESULT_LIST}" PARENT_SCOPE) +- endfunction() +- +- if (FFTW_LIBRARIES) +- rephrase_dylib(FFTW_LIBRARIES "${FFTW_LIBRARIES}") +- endif () +- +- if (NFFT_LIBRARIES) +- rephrase_dylib(NFFT_LIBRARIES "${NFFT_LIBRARIES}") +- endif () +- +- if (BLAS_LIBRARIES) +- rephrase_dylib(BLAS_LIBRARIES "${BLAS_LIBRARIES}") +- endif () +- +- if (LAPACK_LIBRARIES) +- rephrase_dylib(LAPACK_LIBRARIES "${LAPACK_LIBRARIES}") +- endif () +- + # Define the command to generate the Fortran to Python interface module. The + # output will be a shared library that can be imported by python. + add_custom_command( +- OUTPUT ${_name}module.c ${_name}-f2pywrappers.f ++ OUTPUT ${_name}module.c ${_name}-f2pywrappers.f ${_name}-f2pywrappers2.f90 + DEPENDS CTQMC.F90 .f2py_f2cmap + VERBATIM ++ COMMAND "${CMAKE_COMMAND}" -E touch "${_name}module.c" "${_name}-f2pywrappers.f" "${_name}-f2pywrappers2.f90" + COMMAND "${Python_EXECUTABLE}" -m numpy.f2py + "${CMAKE_CURRENT_SOURCE_DIR}/CTQMC.F90" -m ${_name} --lower + --f2cmap "${CMAKE_CURRENT_SOURCE_DIR}/.f2py_f2cmap") + +- python_add_library(${_name} MODULE "${CMAKE_CURRENT_BINARY_DIR}/${_name}module.c" +- "${CMAKE_CURRENT_SOURCE_DIR}/CTQMC.F90" WITH_SOABI) ++ python_add_library(${_name} MODULE WITH_SOABI ++ "${CMAKE_CURRENT_BINARY_DIR}/${_name}module.c" ++ "${CMAKE_CURRENT_BINARY_DIR}/${_name}-f2pywrappers.f" ++ "${CMAKE_CURRENT_BINARY_DIR}/${_name}-f2pywrappers2.f90" ++ "${CMAKE_CURRENT_SOURCE_DIR}/CTQMC.F90") + set_source_files_properties("${CMAKE_CURRENT_BINARY_DIR}/${_name}module.c" PROPERTIES +- COMPILE_OPTIONS $<$,$,16>>:-Wno-error=incompatible-function-pointer-types>) +- target_link_libraries(${_name} PRIVATE fortranobject) +- target_link_libraries(${_name} PUBLIC CTQMCLIB $<$:nfft>) ++ COMPILE_OPTIONS $<$,$,16>>:-Wno-error=incompatible-function-pointer-types>) ++ target_link_libraries(${_name} PRIVATE fortranobject CTQMCLIB ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES} ${FFTW_LIBRARIES} $<$:nfft>) ++ add_custom_command(TARGET ${_name} POST_BUILD ++ COMMAND ${CMAKE_COMMAND} -E copy -t "${CMAKE_SOURCE_DIR}/w2dyn/auxiliaries" $ ++ COMMAND_EXPAND_LISTS) + + IF(WIN32) + SET(CMAKE_INSTALL_PREFIX "C:\\Program Files") +diff --git a/src/maxent/CMakeLists.txt b/src/maxent/CMakeLists.txt +index f8f9ca5..c8e59ce 100644 +--- a/src/maxent/CMakeLists.txt ++++ b/src/maxent/CMakeLists.txt +@@ -31,56 +31,30 @@ SET_PROPERTY(TARGET MAXENTLIB PROPERTY POSITION_INDEPENDENT_CODE ON) + + set_target_properties(MAXENTLIB PROPERTIES COMPILE_FLAGS "-DLAPACK77_Interface") + +-# hack to not pass .dylib or .framework library file names directly +-# because f2py does not accept them as arguments +-function(rephrase_dylib TARGET_VAR LIBRARIES_STRING) +- set(RESULT_LIST "") +- foreach(entry ${LIBRARIES_STRING}) +- string(TOUPPER "${entry}" upcaseentry) +- if(upcaseentry MATCHES "LIB([A-Za-z0-9_]*)\\.DYLIB$") +- get_filename_component(entry_dir "${entry}" DIRECTORY) +- string(LENGTH "${CMAKE_MATCH_1}" libname_length) +- string(FIND "${upcaseentry}" "${CMAKE_MATCH_1}" libname_begin REVERSE) +- string(SUBSTRING "${entry}" "${libname_begin}" "${libname_length}" libname) +- list(APPEND RESULT_LIST "-L${entry_dir}" "-l${libname}") +- elseif((upcaseentry MATCHES ".*ACCELERATE\\.FRAMEWORK.*") OR (upcaseentry MATCHES ".*VECLIB\\.FRAMEWORK.*")) +- # f2py will use numpy.distutils.system_info +- list(APPEND RESULT_LIST "--link-accelerate") +- else() +- list(APPEND RESULT_LIST "${entry}") +- endif() +- endforeach() +- set("${TARGET_VAR}" "${RESULT_LIST}" PARENT_SCOPE) +-endfunction() +- +-if (BLAS_LIBRARIES) +- rephrase_dylib(BLAS_LIBRARIES "${BLAS_LIBRARIES}") +-endif () +- +-if (LAPACK_LIBRARIES) +- rephrase_dylib(LAPACK_LIBRARIES "${LAPACK_LIBRARIES}") +-endif () +- +-set(EXTERNAL_LIBRARIES ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES}) +- + set( _name MAXENT ) + # Define the command to generate the Fortran to Python interface module. The + # output will be a shared library that can be imported by python. + set(ADDITIONAL_OPTS -fPIC -DLAPACK77_Interface) + add_custom_command( +- OUTPUT ${_name}module.c ${_name}-f2pywrappers.f ++ OUTPUT ${_name}module.c ${_name}-f2pywrappers.f ${_name}-f2pywrappers2.f90 + DEPENDS MaximumEntropy.F90 .f2py_f2cmap + VERBATIM ++ COMMAND "${CMAKE_COMMAND}" -E touch "${_name}module.c" "${_name}-f2pywrappers.f" "${_name}-f2pywrappers2.f90" + COMMAND "${Python_EXECUTABLE}" -m numpy.f2py + "${CMAKE_CURRENT_SOURCE_DIR}/MaximumEntropy.F90" -m ${_name} --lower + --f2cmap "${CMAKE_CURRENT_SOURCE_DIR}/.f2py_f2cmap") + +- python_add_library(${_name} MODULE "${CMAKE_CURRENT_BINARY_DIR}/${_name}module.c" +- "${CMAKE_CURRENT_SOURCE_DIR}/MaximumEntropy.F90" WITH_SOABI) ++ python_add_library(${_name} MODULE WITH_SOABI ++ "${CMAKE_CURRENT_BINARY_DIR}/${_name}module.c" ++ "${CMAKE_CURRENT_BINARY_DIR}/${_name}-f2pywrappers.f" ++ "${CMAKE_CURRENT_BINARY_DIR}/${_name}-f2pywrappers2.f90" ++ "${CMAKE_CURRENT_SOURCE_DIR}/MaximumEntropy.F90") + set_source_files_properties("${CMAKE_CURRENT_BINARY_DIR}/${_name}module.c" PROPERTIES +- COMPILE_OPTIONS $<$,$,16>>:-Wno-error=incompatible-function-pointer-types>) +- target_link_libraries(${_name} PRIVATE fortranobject) +- target_link_libraries(${_name} PUBLIC MAXENTLIB) ++ COMPILE_OPTIONS $<$,$,16>>:-Wno-error=incompatible-function-pointer-types>) ++ target_link_libraries(${_name} PRIVATE fortranobject MAXENTLIB ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES}) ++ add_custom_command(TARGET ${_name} POST_BUILD ++ COMMAND ${CMAKE_COMMAND} -E copy -t "${CMAKE_SOURCE_DIR}/w2dyn/maxent" $ ++ COMMAND_EXPAND_LISTS) + + ##################################### + # Tell how to install this executable