From d7a475ca0028f99563a0ad0a0b814ff83e9acfd5 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Fri, 7 Aug 2020 13:35:50 +0200 Subject: [PATCH 01/30] [vcpkg/script] add vcpkg_find_fortran --- scripts/cmake/vcpkg_common_functions.cmake | 1 + scripts/cmake/vcpkg_find_fortran.cmake | 56 ++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 scripts/cmake/vcpkg_find_fortran.cmake diff --git a/scripts/cmake/vcpkg_common_functions.cmake b/scripts/cmake/vcpkg_common_functions.cmake index 2fad7f0ed9632a..490caaa4e3e95f 100644 --- a/scripts/cmake/vcpkg_common_functions.cmake +++ b/scripts/cmake/vcpkg_common_functions.cmake @@ -45,6 +45,7 @@ include(vcpkg_copy_tools) include(vcpkg_get_program_files_platform_bitness) include(vcpkg_get_windows_sdk) include(vcpkg_replace_string) +include(vcpkg_find_fortran) include(vcpkg_from_git) include(vcpkg_test_cmake) include(vcpkg_prettify_command) diff --git a/scripts/cmake/vcpkg_find_fortran.cmake b/scripts/cmake/vcpkg_find_fortran.cmake new file mode 100644 index 00000000000000..cf8b6536c260b3 --- /dev/null +++ b/scripts/cmake/vcpkg_find_fortran.cmake @@ -0,0 +1,56 @@ +## # vcpkg_find_fortran +## +## Checks if a Fortran compiler can be found. +## Windows(x86/x64) Only: If not it will switch/enable MinGW gfortran +## and return required cmake args for building. +## +## ## Usage +## ```cmake +## vcpkg_find_fortran( +## ) +## ``` + +function(vcpkg_find_fortran additional_cmake_args_out) + set(ARGS_OUT) + include(CMakeDetermineFortranCompiler) + if(NOT CMAKE_Fortran_COMPILER AND NOT VCPKG_CHAINLOAD_TOOLCHAIN_FILE) + # This intentionally breaks users with a custom toolchain which do not have a Fortran compiler setup + # because they either need to use a port-overlay (for e.g. lapack), remove the toolchain for the port using fortran + # or setup fortran in their VCPKG_CHAINLOAD_TOOLCHAIN_FILE themselfs! + if(WIN32) + message(STATUS "No Fortran compiler found on the PATH. Using MinGW gfortran!") + # If no Fortran compiler is on the path we switch to use gfortan from MinGW within vcpkg + set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/mingw.cmake") # Switching to mingw toolchain + if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86") + set(MINGW_PATH mingw32) + set(MSYS_TARGET i686) + set(MACHINE_FLAG -m32) + elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64") + set(MINGW_PATH mingw64) + set(MSYS_TARGET x86_64) + set(MACHINE_FLAG -m64) + else() + message(FATAL_ERROR "Unknown architecture '${VCPKG_TARGET_ARCHITECTURE}' for MinGW Fortran build!") + endif() + vcpkg_acquire_msys(MSYS_ROOT "mingw-w64-${MSYS_TARGET}-gcc-fortran") + set(MINGW_BIN "${MSYS_ROOT}/${MINGW_PATH}/bin") + vcpkg_add_to_path("${MINGW_BIN}") + set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/mingw.cmake") # Switching to MinGW toolchain for Fortran + list(APPEND ARGS_OUT -DCMAKE_GNUtoMS=ON + -DCMAKE_Fortran_COMPILER="${MINGW_BIN}/gfortran.exe" + -DCMAKE_Fortran_FLAGS_INIT=" -mabi=ms ${MACHINE_FLAG} ${VCPKG_Fortran_FLAGS}") + set(VCPKG_USE_INTERNAL_Fortran TRUE PARENT_SCOPE) + if(VCPKG_CRT_LINKAGE STREQUAL "static") + set(VCPKG_CRT_LINKAGE dynamic) + message(STATUS "VCPKG_CRT_LINKAGE linkage for ${PORT} using vcpkg's internal gfortran cannot be static due to linking against MinGW libraries. Forcing dynamic CRT linkage") + endif() + if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") + set(VCPKG_LIBRARY_LINKAGE dynamic) + message(STATUS "VCPKG_LIBRARY_LINKAGE linkage for ${PORT} using vcpkg's internal gfortran cannot be static due to linking against MinGW libraries. Forcing dynamic library linkage") + endif() + else() + message(FATAL_ERROR "Unable to find a Fortran compiler using 'CMakeDetermineFortranCompiler'. Please install one (e.g. gfortran) and make it available on the PATH!") + endif() + endif() + set(${additional_cmake_args_out} ${ARGS_OUT} PARENT_SCOPE) +endfunction() \ No newline at end of file From 7dbb51cbab246426722756d49329c7b6bfce78bb Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Fri, 7 Aug 2020 13:36:52 +0200 Subject: [PATCH 02/30] [openblas] add pkg-config fixes --- ports/openblas/CONTROL | 3 ++- ports/openblas/portfile.cmake | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/ports/openblas/CONTROL b/ports/openblas/CONTROL index 3c2b0b7ebe68d7..e72fba70188af8 100644 --- a/ports/openblas/CONTROL +++ b/ports/openblas/CONTROL @@ -1,5 +1,6 @@ Source: openblas -Version: 0.3.9-1 +Version: 0.3.9 +Port-Version: 2 Homepage: https://github.com/xianyi/OpenBLAS Build-Depends: pthread (linux) Description: OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version. diff --git a/ports/openblas/portfile.cmake b/ports/openblas/portfile.cmake index 2decb588380674..60cda75fee06e2 100644 --- a/ports/openblas/portfile.cmake +++ b/ports/openblas/portfile.cmake @@ -85,6 +85,13 @@ endif() vcpkg_install_cmake() vcpkg_fixup_cmake_targets(CONFIG_PATH share/cmake/OpenBLAS TARGET_PATH share/openblas) +vcpkg_fixup_pkgconfig() +if(EXISTS "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/openblas.pc") + file(CREATE_LINK "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/openblas.pc" "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/blas.pc" COPY_ON_ERROR) +endif() +if(EXISTS "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/openblas.pc") + file(CREATE_LINK "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/openblas.pc" "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/blas.pc" COPY_ON_ERROR) +endif() #maybe we need also to write a wrapper inside share/blas to search implicitly for openblas, whenever we feel it's ready for its own -config.cmake file # openblas do not make the config file , so I manually made this From 947051609005394b0e897ce170a33a74e2808b35 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Fri, 7 Aug 2020 13:38:07 +0200 Subject: [PATCH 03/30] [lapack] add lapack-reference and reduce dependency on clapack --- ports/clapack/portfile.cmake | 6 +- ports/lapack-reference/CONTROL | 12 ++++ ports/lapack-reference/portfile.cmake | 67 +++++++++++++++++++ ports/lapack/CONTROL | 4 +- ports/{ => lapack}/clapack/FindLAPACK.cmake | 0 .../clapack/vcpkg-cmake-wrapper.cmake | 0 ports/lapack/portfile.cmake | 9 ++- ports/vcpkg-gfortran/CONTROL | 4 ++ ports/vcpkg-gfortran/portfile.cmake | 52 ++++++++++++++ 9 files changed, 146 insertions(+), 8 deletions(-) create mode 100644 ports/lapack-reference/CONTROL create mode 100644 ports/lapack-reference/portfile.cmake rename ports/{ => lapack}/clapack/FindLAPACK.cmake (100%) rename ports/{ => lapack}/clapack/vcpkg-cmake-wrapper.cmake (100%) create mode 100644 ports/vcpkg-gfortran/CONTROL create mode 100644 ports/vcpkg-gfortran/portfile.cmake diff --git a/ports/clapack/portfile.cmake b/ports/clapack/portfile.cmake index 1de30b1093869a..8fdbe7c42efc24 100644 --- a/ports/clapack/portfile.cmake +++ b/ports/clapack/portfile.cmake @@ -11,7 +11,7 @@ vcpkg_extract_source_archive_ex( ARCHIVE ${ARCHIVE} PATCHES remove_internal_blas.patch - fix-ConfigFile.patch + fix-ConfigFile.patch fix-install.patch support-uwp.patch ) @@ -37,10 +37,6 @@ vcpkg_copy_pdbs() #TODO: fix the official exported targets, since they are broken (luckily it seems that no-one uses them for now) vcpkg_fixup_cmake_targets(CONFIG_PATH share/clapack) -#we install a cmake wrapper since the official FindLAPACK module in cmake does find clapack easily, unfortunately... -file(INSTALL ${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake DESTINATION ${CURRENT_PACKAGES_DIR}/share/lapack) -file(INSTALL ${CMAKE_CURRENT_LIST_DIR}/FindLAPACK.cmake DESTINATION ${CURRENT_PACKAGES_DIR}/share/lapack) - file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include) # Handle copyright diff --git a/ports/lapack-reference/CONTROL b/ports/lapack-reference/CONTROL new file mode 100644 index 00000000000000..77fa07be2f72a0 --- /dev/null +++ b/ports/lapack-reference/CONTROL @@ -0,0 +1,12 @@ +Source: lapack-reference +Version: 3.8.0 +Description: LAPACK — Linear Algebra PACKage http://www.netlib.org/lapack/ +Default-Features: noblas +Build-Depends: vcpkg-gfortran (windows) + +Feature: cblas +Description: Builds CBLAS + +Feature: noblas +Build-Depends: openblas (!osx) +Description: Use external optimized BLAS diff --git a/ports/lapack-reference/portfile.cmake b/ports/lapack-reference/portfile.cmake new file mode 100644 index 00000000000000..6f093d5e6e35a8 --- /dev/null +++ b/ports/lapack-reference/portfile.cmake @@ -0,0 +1,67 @@ +#TODO: Features to add: +# USE_XBLAS??? extended precision blas. needs xblas +# LAPACKE should be its own PORT +# USE_OPTIMIZED_LAPACK (Probably not what we want. Does a find_package(LAPACK): probably for LAPACKE only builds _> own port?) +# LAPACKE Builds LAPACKE +# LAPACKE_WITH_TMG Build LAPACKE with tmglib routines + +SET(VCPKG_POLICY_EMPTY_INCLUDE_FOLDER enabled) + +if(CMAKE_HOST_WIN32 AND NOT VCPKG_USE_EXTERNAL_Fortran) + # Since we use MinGW Fortran here and would require ld otherwise for all dependent ports + set(VCPKG_CRT_LINKAGE dynamic) # Will always be dynamic no way to overwrite internal CRT linkage here + vcpkg_check_linkage(ONLY_DYNAMIC_LIBRARY) + #set(VCPKG_CRT_LINKAGE dynamic) +endif() + +set(lapack_ver 3.8.0) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO "Reference-LAPACK/lapack" + REF "v${lapack_ver}" + SHA512 17786cb7306fccdc9b4a242de7f64fc261ebe6a10b6ec55f519deb4cb673cb137e8742aa5698fd2dc52f1cd56d3bd116af3f593a01dcf6770c4dcc86c50b2a7f + HEAD_REF master +) + +set(USE_OPTIMIZED_BLAS OFF) +if("noblas" IN_LIST FEATURES) + set(USE_OPTIMIZED_BLAS ON) +endif() + +set(CBLAS OFF) +if("cblas" IN_LIST FEATURES) + set(CBLAS ON) +endif() +vcpkg_find_fortran(FORTRAN_CMAKE) +vcpkg_configure_cmake( + PREFER_NINJA + SOURCE_PATH ${SOURCE_PATH} + OPTIONS + "-DUSE_OPTIMIZED_BLAS=${USE_OPTIMIZED_BLAS}" + "-DCBLAS=${CBLAS}" + ${FORTRAN_CMAKE} + ) + +vcpkg_install_cmake() +vcpkg_fixup_cmake_targets(CONFIG_PATH lib/cmake/lapack-${lapack_ver}) #Should the target path be lapack and not lapack-reference? +vcpkg_fixup_pkgconfig() +vcpkg_copy_pdbs() + +# Handle copyright +file(INSTALL "${SOURCE_PATH}/LICENSE" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright) + +# remove debug includs +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include) + +if(VCPKG_TARGET_IS_WINDOWS) + if(EXISTS "${CURRENT_PACKAGES_DIR}/lib/liblapack.lib") + file(RENAME "${CURRENT_PACKAGES_DIR}/lib/liblapack.lib" "${CURRENT_PACKAGES_DIR}/lib/lapack.lib") + endif() + if(EXISTS "${CURRENT_PACKAGES_DIR}/debug/lib/liblapack.lib") + file(RENAME "${CURRENT_PACKAGES_DIR}/debug/lib/liblapack.lib" "${CURRENT_PACKAGES_DIR}/debug/lib/lapack.lib") + endif() +endif() + +#SET(VCPKG_POLICY_DLLS_WITHOUT_LIBS enabled) +set(VCPKG_POLICY_SKIP_DUMPBIN_CHECKS enabled) \ No newline at end of file diff --git a/ports/lapack/CONTROL b/ports/lapack/CONTROL index 0d7883a0ef2ec7..a1f143873e6d48 100644 --- a/ports/lapack/CONTROL +++ b/ports/lapack/CONTROL @@ -1,4 +1,4 @@ Source: lapack -Version: 0 +Version: 1 Description: Metapackage for packages which provide LAPACK -Build-Depends: clapack (!osx) \ No newline at end of file +Build-Depends: clapack (windows&arm|uwp), lapack-reference(!uwp&!(windows&arm)) \ No newline at end of file diff --git a/ports/clapack/FindLAPACK.cmake b/ports/lapack/clapack/FindLAPACK.cmake similarity index 100% rename from ports/clapack/FindLAPACK.cmake rename to ports/lapack/clapack/FindLAPACK.cmake diff --git a/ports/clapack/vcpkg-cmake-wrapper.cmake b/ports/lapack/clapack/vcpkg-cmake-wrapper.cmake similarity index 100% rename from ports/clapack/vcpkg-cmake-wrapper.cmake rename to ports/lapack/clapack/vcpkg-cmake-wrapper.cmake diff --git a/ports/lapack/portfile.cmake b/ports/lapack/portfile.cmake index cb7d75de956c15..92f8db18a4c39f 100644 --- a/ports/lapack/portfile.cmake +++ b/ports/lapack/portfile.cmake @@ -1,3 +1,10 @@ SET(VCPKG_POLICY_EMPTY_PACKAGE enabled) # Make sure LAPACK can be found -vcpkg_configure_cmake(SOURCE_PATH ${CURRENT_PORT_DIR}) + +if(VCPKG_TARGET_IS_UWP OR VCPKG_TARGET_IS_WINDOWS AND VCPKG_TARGET_ARCHITECTURE MATCHES "arm") + # Install clapack wrappers. + file(INSTALL ${CMAKE_CURRENT_LIST_DIR}/clapack/vcpkg-cmake-wrapper.cmake DESTINATION ${CURRENT_PACKAGES_DIR}/share/lapack) + file(INSTALL ${CMAKE_CURRENT_LIST_DIR}/clapack/FindLAPACK.cmake DESTINATION ${CURRENT_PACKAGES_DIR}/share/lapack) +endif() +vcpkg_configure_cmake(SOURCE_PATH ${CURRENT_PORT_DIR} + OPTIONS -DCMAKE_PREFIX_PATH="${CURRENT_PACKAGES_DIR}") diff --git a/ports/vcpkg-gfortran/CONTROL b/ports/vcpkg-gfortran/CONTROL new file mode 100644 index 00000000000000..80484175a4440a --- /dev/null +++ b/ports/vcpkg-gfortran/CONTROL @@ -0,0 +1,4 @@ +Source: vcpkg-gfortran +Version: 1 +Description: Metaport to install gfortran dependencies from msys if VCPKG_USE_EXTERNAL_Fortran is false +Supports: windows & !arm \ No newline at end of file diff --git a/ports/vcpkg-gfortran/portfile.cmake b/ports/vcpkg-gfortran/portfile.cmake new file mode 100644 index 00000000000000..4c1e6cbed517ac --- /dev/null +++ b/ports/vcpkg-gfortran/portfile.cmake @@ -0,0 +1,52 @@ + +vcpkg_find_fortran(FORTRAN_CMAKE) +if(VCPKG_USE_INTERNAL_Fortran) + set(VCPKG_CRT_LINKAGE dynamic) # Will always be dynamic no way to overwrite internal CRT linkage here + vcpkg_check_linkage(ONLY_DYNAMIC_LIBRARY) + if(DEFINED ENV{PROCESSOR_ARCHITEW6432}) + set(HOST_ARCH $ENV{PROCESSOR_ARCHITEW6432}) + else() + set(HOST_ARCH $ENV{PROCESSOR_ARCHITECTURE}) + endif() + + if(HOST_ARCH MATCHES "(amd|AMD)64") + set(MINGW_W w64) + set(MSYS_HOST x86_64) + elseif(HOST_ARCH MATCHES "(x|X)86") + set(MINGW_W w32) + set(MSYS_HOST i686) + else() + message(FATAL_ERROR "Unsupported host architecture ${HOST_ARCH}!" ) + endif() + + if(VCPKG_TARGET_ARCHITECTURE MATCHES "(x|X)64") + set(MSYS_TARGET x86_64) + set(MINGW_W_TARGET 64) + set(GCC_LIB_SUFFIX s_seh-1) + elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "(x|X)86") + set(MSYS_TARGET i686) + set(MINGW_W_TARGET 32) + set(GCC_LIB_SUFFIX s_dw2-1) + else() + message(FATAL_ERROR "Unsupported target architecture ${VCPKG_TARGET_ARCHITECTURE}!" ) + endif() + + + vcpkg_acquire_msys(MSYS_ROOT PACKAGES "mingw-w64-${MSYS_TARGET}-gcc-fortran") # TODO: make x86 work + + set(MINGW_BIN "${MSYS_ROOT}/mingw${MINGW_W_TARGET}/bin/") + set(MINGW_Fortran_DLLS "${MINGW_BIN}/libgfortran-5.dll" + "${MINGW_BIN}/libquadmath-0.dll" + "${MINGW_BIN}/libwinpthread-1.dll" + "${MINGW_BIN}/libgcc_${GCC_LIB_SUFFIX}.dll") + file(INSTALL ${MINGW_Fortran_DLLS} DESTINATION "${CURRENT_PACKAGES_DIR}/bin") + file(INSTALL ${MINGW_Fortran_DLLS} DESTINATION "${CURRENT_PACKAGES_DIR}/debug/bin") + set(VCPKG_POLICY_SKIP_DUMPBIN_CHECKS enabled) # due to outdated msvcrt + set(VCPKG_POLICY_DLLS_WITHOUT_LIBS enabled) + set(VCPKG_POLICY_EMPTY_INCLUDE_FOLDER enabled) + file(INSTALL "${MSYS_ROOT}/mingw${MINGW_W_TARGET}/share/licenses/winpthreads" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}/license") + file(INSTALL "${MSYS_ROOT}/mingw${MINGW_W_TARGET}/share/licenses/gcc-libs" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}/license") + file(INSTALL "${MSYS_ROOT}/mingw${MINGW_W_TARGET}/share/licenses/crt/COPYING.MinGW-w64-runtime.txt" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright) +else() + set(VCPKG_POLICY_EMPTY_PACKAGE enabled) +endif() \ No newline at end of file From 7602456137c02976b30b88c45bd6cbb417d74aec Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Fri, 7 Aug 2020 14:27:05 +0200 Subject: [PATCH 04/30] fix build issues --- ports/lapack-reference/portfile.cmake | 2 +- ports/lapack/CONTROL | 2 +- ports/openblas/portfile.cmake | 28 +++++++++++++++++--------- scripts/cmake/vcpkg_find_fortran.cmake | 4 ++-- 4 files changed, 23 insertions(+), 13 deletions(-) diff --git a/ports/lapack-reference/portfile.cmake b/ports/lapack-reference/portfile.cmake index 6f093d5e6e35a8..15cb4a8306f079 100644 --- a/ports/lapack-reference/portfile.cmake +++ b/ports/lapack-reference/portfile.cmake @@ -40,7 +40,7 @@ vcpkg_configure_cmake( OPTIONS "-DUSE_OPTIMIZED_BLAS=${USE_OPTIMIZED_BLAS}" "-DCBLAS=${CBLAS}" - ${FORTRAN_CMAKE} + "${FORTRAN_CMAKE}" ) vcpkg_install_cmake() diff --git a/ports/lapack/CONTROL b/ports/lapack/CONTROL index a1f143873e6d48..354360ef561fb0 100644 --- a/ports/lapack/CONTROL +++ b/ports/lapack/CONTROL @@ -1,4 +1,4 @@ Source: lapack Version: 1 Description: Metapackage for packages which provide LAPACK -Build-Depends: clapack (windows&arm|uwp), lapack-reference(!uwp&!(windows&arm)) \ No newline at end of file +Build-Depends: clapack (arm|uwp), lapack-reference(!uwp&!arm) \ No newline at end of file diff --git a/ports/openblas/portfile.cmake b/ports/openblas/portfile.cmake index 60cda75fee06e2..4224dd65b32185 100644 --- a/ports/openblas/portfile.cmake +++ b/ports/openblas/portfile.cmake @@ -1,5 +1,3 @@ -include(vcpkg_common_functions) - vcpkg_from_github( OUT_SOURCE_PATH SOURCE_PATH REPO xianyi/OpenBLAS @@ -22,7 +20,9 @@ set(SED_EXE_PATH "${GIT_EXE_PATH}/../usr/bin") # openblas require perl to generate .def for exports vcpkg_find_acquire_program(PERL) get_filename_component(PERL_EXE_PATH ${PERL} DIRECTORY) -set(ENV{PATH} "$ENV{PATH};${PERL_EXE_PATH};${SED_EXE_PATH}") +set(PATH_BACKUP "$ENV{PATH}") +vcpkg_add_to_path("${PERL_EXE_PATH}") +vcpkg_add_to_path("${SED_EXE_PATH}") set(COMMON_OPTIONS -DBUILD_WITHOUT_LAPACK=ON) @@ -46,7 +46,7 @@ if(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") # add just built path to environment for gen_config_h.exe, # getarch.exe and getarch_2nd.exe - set(ENV{PATH} "$ENV{PATH};${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel") + vcpkg_add_to_path("${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel") # restore target build information set(VCPKG_CMAKE_SYSTEM_NAME "${TEMP_CMAKE_SYSTEM_NAME}") @@ -85,13 +85,23 @@ endif() vcpkg_install_cmake() vcpkg_fixup_cmake_targets(CONFIG_PATH share/cmake/OpenBLAS TARGET_PATH share/openblas) -vcpkg_fixup_pkgconfig() -if(EXISTS "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/openblas.pc") - file(CREATE_LINK "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/openblas.pc" "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/blas.pc" COPY_ON_ERROR) +set(ENV{PATH} "${PATH_BACKUP}") + +set(pcfile "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/openblas.pc") +if(EXISTS "${pcfile}") + file(READ "${pcfile}" _contents) + set(_contents "prefix=${CURRENT_INSTALLED_DIR}\n${_contents}") + file(WRITE "${pcfile}" "${_contents}") + file(CREATE_LINK "${pcfile}" "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/blas.pc" COPY_ON_ERROR) endif() -if(EXISTS "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/openblas.pc") - file(CREATE_LINK "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/openblas.pc" "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/blas.pc" COPY_ON_ERROR) +set(pcfile "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/openblas.pc") +if(EXISTS "${pcfile}") + file(READ "${pcfile}" _contents) + set(_contents "prefix=${CURRENT_INSTALLED_DIR}/debug\n${_contents}") + file(WRITE "${pcfile}" "${_contents}") + file(CREATE_LINK "${pcfile}" "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/blas.pc" COPY_ON_ERROR) endif() +vcpkg_fixup_pkgconfig() #maybe we need also to write a wrapper inside share/blas to search implicitly for openblas, whenever we feel it's ready for its own -config.cmake file # openblas do not make the config file , so I manually made this diff --git a/scripts/cmake/vcpkg_find_fortran.cmake b/scripts/cmake/vcpkg_find_fortran.cmake index cf8b6536c260b3..b0b918b0523b09 100644 --- a/scripts/cmake/vcpkg_find_fortran.cmake +++ b/scripts/cmake/vcpkg_find_fortran.cmake @@ -37,8 +37,8 @@ function(vcpkg_find_fortran additional_cmake_args_out) vcpkg_add_to_path("${MINGW_BIN}") set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/mingw.cmake") # Switching to MinGW toolchain for Fortran list(APPEND ARGS_OUT -DCMAKE_GNUtoMS=ON - -DCMAKE_Fortran_COMPILER="${MINGW_BIN}/gfortran.exe" - -DCMAKE_Fortran_FLAGS_INIT=" -mabi=ms ${MACHINE_FLAG} ${VCPKG_Fortran_FLAGS}") + "-DCMAKE_Fortran_COMPILER=${MINGW_BIN}/gfortran.exe" + "-DCMAKE_Fortran_FLAGS_INIT:STRING= -mabi=ms ${MACHINE_FLAG} ${VCPKG_Fortran_FLAGS}") set(VCPKG_USE_INTERNAL_Fortran TRUE PARENT_SCOPE) if(VCPKG_CRT_LINKAGE STREQUAL "static") set(VCPKG_CRT_LINKAGE dynamic) From 7c641d0585c4857087f15f5ea4ef8d1a7c8c2dd0 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Fri, 7 Aug 2020 14:32:14 +0200 Subject: [PATCH 05/30] dont touch any main files --- ports/lapack-reference/portfile.cmake | 2 +- ports/vcpkg-gfortran/portfile.cmake | 2 +- scripts/cmake/vcpkg_common_functions.cmake | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/ports/lapack-reference/portfile.cmake b/ports/lapack-reference/portfile.cmake index 15cb4a8306f079..473647b661cc06 100644 --- a/ports/lapack-reference/portfile.cmake +++ b/ports/lapack-reference/portfile.cmake @@ -4,7 +4,7 @@ # USE_OPTIMIZED_LAPACK (Probably not what we want. Does a find_package(LAPACK): probably for LAPACKE only builds _> own port?) # LAPACKE Builds LAPACKE # LAPACKE_WITH_TMG Build LAPACKE with tmglib routines - +include(vcpkg_find_fortran) SET(VCPKG_POLICY_EMPTY_INCLUDE_FOLDER enabled) if(CMAKE_HOST_WIN32 AND NOT VCPKG_USE_EXTERNAL_Fortran) diff --git a/ports/vcpkg-gfortran/portfile.cmake b/ports/vcpkg-gfortran/portfile.cmake index 4c1e6cbed517ac..f5d8a9b65d83a2 100644 --- a/ports/vcpkg-gfortran/portfile.cmake +++ b/ports/vcpkg-gfortran/portfile.cmake @@ -1,4 +1,4 @@ - +include(vcpkg_find_fortran) vcpkg_find_fortran(FORTRAN_CMAKE) if(VCPKG_USE_INTERNAL_Fortran) set(VCPKG_CRT_LINKAGE dynamic) # Will always be dynamic no way to overwrite internal CRT linkage here diff --git a/scripts/cmake/vcpkg_common_functions.cmake b/scripts/cmake/vcpkg_common_functions.cmake index 490caaa4e3e95f..2fad7f0ed9632a 100644 --- a/scripts/cmake/vcpkg_common_functions.cmake +++ b/scripts/cmake/vcpkg_common_functions.cmake @@ -45,7 +45,6 @@ include(vcpkg_copy_tools) include(vcpkg_get_program_files_platform_bitness) include(vcpkg_get_windows_sdk) include(vcpkg_replace_string) -include(vcpkg_find_fortran) include(vcpkg_from_git) include(vcpkg_test_cmake) include(vcpkg_prettify_command) From 21fb89fd0e0c6457d793c82d687bf705e2f62ebd Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Fri, 7 Aug 2020 14:37:51 +0200 Subject: [PATCH 06/30] move toolchain var into parent scope --- scripts/cmake/vcpkg_find_fortran.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/cmake/vcpkg_find_fortran.cmake b/scripts/cmake/vcpkg_find_fortran.cmake index b0b918b0523b09..1db5dfaf0d421c 100644 --- a/scripts/cmake/vcpkg_find_fortran.cmake +++ b/scripts/cmake/vcpkg_find_fortran.cmake @@ -35,11 +35,11 @@ function(vcpkg_find_fortran additional_cmake_args_out) vcpkg_acquire_msys(MSYS_ROOT "mingw-w64-${MSYS_TARGET}-gcc-fortran") set(MINGW_BIN "${MSYS_ROOT}/${MINGW_PATH}/bin") vcpkg_add_to_path("${MINGW_BIN}") - set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/mingw.cmake") # Switching to MinGW toolchain for Fortran list(APPEND ARGS_OUT -DCMAKE_GNUtoMS=ON "-DCMAKE_Fortran_COMPILER=${MINGW_BIN}/gfortran.exe" "-DCMAKE_Fortran_FLAGS_INIT:STRING= -mabi=ms ${MACHINE_FLAG} ${VCPKG_Fortran_FLAGS}") set(VCPKG_USE_INTERNAL_Fortran TRUE PARENT_SCOPE) + set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/mingw.cmake" PARENT_SCOPE) # Switching to MinGW toolchain for Fortran if(VCPKG_CRT_LINKAGE STREQUAL "static") set(VCPKG_CRT_LINKAGE dynamic) message(STATUS "VCPKG_CRT_LINKAGE linkage for ${PORT} using vcpkg's internal gfortran cannot be static due to linking against MinGW libraries. Forcing dynamic CRT linkage") From 8247cd3c19eb29bc063de9a74b94655cccfb509f Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Fri, 7 Aug 2020 15:50:35 +0200 Subject: [PATCH 07/30] fix a few more issues --- ports/lapack-reference/CONTROL | 6 +++- ports/lapack-reference/portfile.cmake | 51 ++++++++++++++++++++++++--- ports/lapack/CONTROL | 2 +- ports/openblas/portfile.cmake | 4 +-- 4 files changed, 54 insertions(+), 9 deletions(-) diff --git a/ports/lapack-reference/CONTROL b/ports/lapack-reference/CONTROL index 77fa07be2f72a0..8f98016f7b6741 100644 --- a/ports/lapack-reference/CONTROL +++ b/ports/lapack-reference/CONTROL @@ -1,7 +1,7 @@ Source: lapack-reference Version: 3.8.0 Description: LAPACK — Linear Algebra PACKage http://www.netlib.org/lapack/ -Default-Features: noblas +Default-Features: blas-select Build-Depends: vcpkg-gfortran (windows) Feature: cblas @@ -10,3 +10,7 @@ Description: Builds CBLAS Feature: noblas Build-Depends: openblas (!osx) Description: Use external optimized BLAS + +Feature: blas-select +Build-Depends: lapack-reference[core, noblas](!windows) +Description: Use external optimized BLAS diff --git a/ports/lapack-reference/portfile.cmake b/ports/lapack-reference/portfile.cmake index 473647b661cc06..8826f605c4d550 100644 --- a/ports/lapack-reference/portfile.cmake +++ b/ports/lapack-reference/portfile.cmake @@ -24,16 +24,26 @@ vcpkg_from_github( HEAD_REF master ) -set(USE_OPTIMIZED_BLAS OFF) -if("noblas" IN_LIST FEATURES) - set(USE_OPTIMIZED_BLAS ON) -endif() - set(CBLAS OFF) if("cblas" IN_LIST FEATURES) set(CBLAS ON) endif() + +set(USE_OPTIMIZED_BLAS OFF) +if("noblas" IN_LIST FEATURES) + set(USE_OPTIMIZED_BLAS ON) +endif() + vcpkg_find_fortran(FORTRAN_CMAKE) +if(VCPKG_USE_INTERNAL_Fortran) + set(USE_OPTIMIZED_BLAS OFF) + #Cannot use openblas from vcpkg if we are building with gfortran here. + if("noblas" IN_LIST FEATURES) + message(FATAL_ERROR "Feature 'noblas' cannot be used without supplying an external fortran compiler") + endif() +else() + set(USE_OPTIMIZED_BLAS ON) +endif() vcpkg_configure_cmake( PREFER_NINJA SOURCE_PATH ${SOURCE_PATH} @@ -45,6 +55,31 @@ vcpkg_configure_cmake( vcpkg_install_cmake() vcpkg_fixup_cmake_targets(CONFIG_PATH lib/cmake/lapack-${lapack_ver}) #Should the target path be lapack and not lapack-reference? + +set(pcfile "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/lapack.pc") +if(EXISTS "${pcfile}") + file(READ "${pcfile}" _contents) + set(_contents "prefix=${CURRENT_INSTALLED_DIR}\n${_contents}") + file(WRITE "${pcfile}" "${_contents}") +endif() +set(pcfile "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/lapack.pc") +if(EXISTS "${pcfile}") + file(READ "${pcfile}" _contents) + set(_contents "prefix=${CURRENT_INSTALLED_DIR}/debug\n${_contents}") + file(WRITE "${pcfile}" "${_contents}") +endif() +set(pcfile "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/blas.pc") +if(EXISTS "${pcfile}") + file(READ "${pcfile}" _contents) + set(_contents "prefix=${CURRENT_INSTALLED_DIR}\n${_contents}") + file(WRITE "${pcfile}" "${_contents}") +endif() +set(pcfile "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/blas.pc") +if(EXISTS "${pcfile}") + file(READ "${pcfile}" _contents) + set(_contents "prefix=${CURRENT_INSTALLED_DIR}/debug\n${_contents}") + file(WRITE "${pcfile}" "${_contents}") +endif() vcpkg_fixup_pkgconfig() vcpkg_copy_pdbs() @@ -61,6 +96,12 @@ if(VCPKG_TARGET_IS_WINDOWS) if(EXISTS "${CURRENT_PACKAGES_DIR}/debug/lib/liblapack.lib") file(RENAME "${CURRENT_PACKAGES_DIR}/debug/lib/liblapack.lib" "${CURRENT_PACKAGES_DIR}/debug/lib/lapack.lib") endif() + if(EXISTS "${CURRENT_PACKAGES_DIR}/lib/libblas.lib") + file(RENAME "${CURRENT_PACKAGES_DIR}/lib/libblas.lib" "${CURRENT_PACKAGES_DIR}/lib/blas.lib") + endif() + if(EXISTS "${CURRENT_PACKAGES_DIR}/debug/lib/libblas.lib") + file(RENAME "${CURRENT_PACKAGES_DIR}/debug/lib/libblas.lib" "${CURRENT_PACKAGES_DIR}/debug/lib/blas.lib") + endif() endif() #SET(VCPKG_POLICY_DLLS_WITHOUT_LIBS enabled) diff --git a/ports/lapack/CONTROL b/ports/lapack/CONTROL index 354360ef561fb0..c4e27f77d36db5 100644 --- a/ports/lapack/CONTROL +++ b/ports/lapack/CONTROL @@ -1,4 +1,4 @@ Source: lapack Version: 1 Description: Metapackage for packages which provide LAPACK -Build-Depends: clapack (arm|uwp), lapack-reference(!uwp&!arm) \ No newline at end of file +Build-Depends: clapack ((arm&windows)|uwp), lapack-reference(!uwp&!(arm&windows)) \ No newline at end of file diff --git a/ports/openblas/portfile.cmake b/ports/openblas/portfile.cmake index 4224dd65b32185..a17bdf6348f7bc 100644 --- a/ports/openblas/portfile.cmake +++ b/ports/openblas/portfile.cmake @@ -92,14 +92,14 @@ if(EXISTS "${pcfile}") file(READ "${pcfile}" _contents) set(_contents "prefix=${CURRENT_INSTALLED_DIR}\n${_contents}") file(WRITE "${pcfile}" "${_contents}") - file(CREATE_LINK "${pcfile}" "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/blas.pc" COPY_ON_ERROR) + #file(CREATE_LINK "${pcfile}" "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/blas.pc" COPY_ON_ERROR) endif() set(pcfile "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/openblas.pc") if(EXISTS "${pcfile}") file(READ "${pcfile}" _contents) set(_contents "prefix=${CURRENT_INSTALLED_DIR}/debug\n${_contents}") file(WRITE "${pcfile}" "${_contents}") - file(CREATE_LINK "${pcfile}" "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/blas.pc" COPY_ON_ERROR) + #file(CREATE_LINK "${pcfile}" "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/blas.pc" COPY_ON_ERROR) endif() vcpkg_fixup_pkgconfig() #maybe we need also to write a wrapper inside share/blas to search implicitly for openblas, whenever we feel it's ready for its own -config.cmake file From 81cfb5be7f2b6e3fa22fee2d1f483a1a7e0e55e6 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Fri, 7 Aug 2020 15:52:36 +0200 Subject: [PATCH 08/30] create link in the noblas case --- ports/lapack-reference/portfile.cmake | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ports/lapack-reference/portfile.cmake b/ports/lapack-reference/portfile.cmake index 8826f605c4d550..43d122708046ea 100644 --- a/ports/lapack-reference/portfile.cmake +++ b/ports/lapack-reference/portfile.cmake @@ -32,6 +32,14 @@ endif() set(USE_OPTIMIZED_BLAS OFF) if("noblas" IN_LIST FEATURES) set(USE_OPTIMIZED_BLAS ON) + set(pcfile "${CURRENT_INSTALLED_DIR}/lib/pkgconfig/openblas.pc") + if(EXISTS "${pcfile}") + file(CREATE_LINK "${pcfile}" "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/blas.pc" COPY_ON_ERROR) + endif() + set(pcfile "${CURRENT_INSTALLED_DIR}/debug/lib/pkgconfig/openblas.pc") + if(EXISTS "${pcfile}") + file(CREATE_LINK "${pcfile}" "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/blas.pc" COPY_ON_ERROR) + endif() endif() vcpkg_find_fortran(FORTRAN_CMAKE) From 0685ce03d9ebaf09b214bef6a005b7efa5a928bb Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Fri, 7 Aug 2020 15:55:50 +0200 Subject: [PATCH 09/30] removed unnecessary check handled by vcpkg_find_fortran. --- ports/lapack-reference/portfile.cmake | 7 ------- 1 file changed, 7 deletions(-) diff --git a/ports/lapack-reference/portfile.cmake b/ports/lapack-reference/portfile.cmake index 43d122708046ea..bf2f3befb48e05 100644 --- a/ports/lapack-reference/portfile.cmake +++ b/ports/lapack-reference/portfile.cmake @@ -7,13 +7,6 @@ include(vcpkg_find_fortran) SET(VCPKG_POLICY_EMPTY_INCLUDE_FOLDER enabled) -if(CMAKE_HOST_WIN32 AND NOT VCPKG_USE_EXTERNAL_Fortran) - # Since we use MinGW Fortran here and would require ld otherwise for all dependent ports - set(VCPKG_CRT_LINKAGE dynamic) # Will always be dynamic no way to overwrite internal CRT linkage here - vcpkg_check_linkage(ONLY_DYNAMIC_LIBRARY) - #set(VCPKG_CRT_LINKAGE dynamic) -endif() - set(lapack_ver 3.8.0) vcpkg_from_github( From 203535358193e63952b1ded769139780336c8543 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Fri, 7 Aug 2020 15:57:15 +0200 Subject: [PATCH 10/30] move dumpbin check --- ports/lapack-reference/portfile.cmake | 3 --- scripts/cmake/vcpkg_find_fortran.cmake | 1 + 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/ports/lapack-reference/portfile.cmake b/ports/lapack-reference/portfile.cmake index bf2f3befb48e05..2e17907716312e 100644 --- a/ports/lapack-reference/portfile.cmake +++ b/ports/lapack-reference/portfile.cmake @@ -104,6 +104,3 @@ if(VCPKG_TARGET_IS_WINDOWS) file(RENAME "${CURRENT_PACKAGES_DIR}/debug/lib/libblas.lib" "${CURRENT_PACKAGES_DIR}/debug/lib/blas.lib") endif() endif() - -#SET(VCPKG_POLICY_DLLS_WITHOUT_LIBS enabled) -set(VCPKG_POLICY_SKIP_DUMPBIN_CHECKS enabled) \ No newline at end of file diff --git a/scripts/cmake/vcpkg_find_fortran.cmake b/scripts/cmake/vcpkg_find_fortran.cmake index 1db5dfaf0d421c..d029e7eea54f1d 100644 --- a/scripts/cmake/vcpkg_find_fortran.cmake +++ b/scripts/cmake/vcpkg_find_fortran.cmake @@ -39,6 +39,7 @@ function(vcpkg_find_fortran additional_cmake_args_out) "-DCMAKE_Fortran_COMPILER=${MINGW_BIN}/gfortran.exe" "-DCMAKE_Fortran_FLAGS_INIT:STRING= -mabi=ms ${MACHINE_FLAG} ${VCPKG_Fortran_FLAGS}") set(VCPKG_USE_INTERNAL_Fortran TRUE PARENT_SCOPE) + set(VCPKG_POLICY_SKIP_DUMPBIN_CHECKS enabled PARENT_SCOPE) set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/mingw.cmake" PARENT_SCOPE) # Switching to MinGW toolchain for Fortran if(VCPKG_CRT_LINKAGE STREQUAL "static") set(VCPKG_CRT_LINKAGE dynamic) From 9ef18941b639fbed2dd712da7d3c092e5a8031d5 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Fri, 7 Aug 2020 16:31:41 +0200 Subject: [PATCH 11/30] fix last issue --- ports/lapack-reference/CONTROL | 2 +- ports/lapack-reference/portfile.cmake | 49 ++++++++++++++++----------- 2 files changed, 30 insertions(+), 21 deletions(-) diff --git a/ports/lapack-reference/CONTROL b/ports/lapack-reference/CONTROL index 8f98016f7b6741..3a54072a07f391 100644 --- a/ports/lapack-reference/CONTROL +++ b/ports/lapack-reference/CONTROL @@ -12,5 +12,5 @@ Build-Depends: openblas (!osx) Description: Use external optimized BLAS Feature: blas-select -Build-Depends: lapack-reference[core, noblas](!windows) +Build-Depends: lapack-reference[core, noblas](!windows|(windows&!static)) Description: Use external optimized BLAS diff --git a/ports/lapack-reference/portfile.cmake b/ports/lapack-reference/portfile.cmake index 2e17907716312e..698e25eb54f006 100644 --- a/ports/lapack-reference/portfile.cmake +++ b/ports/lapack-reference/portfile.cmake @@ -35,12 +35,17 @@ if("noblas" IN_LIST FEATURES) endif() endif() +set(VCPKG_CRT_LINKAGE_BACKUP ${VCPKG_CRT_LINKAGE}) + vcpkg_find_fortran(FORTRAN_CMAKE) if(VCPKG_USE_INTERNAL_Fortran) - set(USE_OPTIMIZED_BLAS OFF) - #Cannot use openblas from vcpkg if we are building with gfortran here. - if("noblas" IN_LIST FEATURES) - message(FATAL_ERROR "Feature 'noblas' cannot be used without supplying an external fortran compiler") + if(VCPKG_CRT_LINKAGE_BACKUP STREQUAL static) + # If openblas has been built with static crt linkage we cannot use it with gfortran! + set(USE_OPTIMIZED_BLAS OFF) + #Cannot use openblas from vcpkg if we are building with gfortran here. + if("noblas" IN_LIST FEATURES) + message(FATAL_ERROR "Feature 'noblas' cannot be used without supplying an external fortran compiler") + endif() endif() else() set(USE_OPTIMIZED_BLAS ON) @@ -69,17 +74,19 @@ if(EXISTS "${pcfile}") set(_contents "prefix=${CURRENT_INSTALLED_DIR}/debug\n${_contents}") file(WRITE "${pcfile}" "${_contents}") endif() -set(pcfile "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/blas.pc") -if(EXISTS "${pcfile}") - file(READ "${pcfile}" _contents) - set(_contents "prefix=${CURRENT_INSTALLED_DIR}\n${_contents}") - file(WRITE "${pcfile}" "${_contents}") -endif() -set(pcfile "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/blas.pc") -if(EXISTS "${pcfile}") - file(READ "${pcfile}" _contents) - set(_contents "prefix=${CURRENT_INSTALLED_DIR}/debug\n${_contents}") - file(WRITE "${pcfile}" "${_contents}") +if(NOT USE_OPTIMIZED_BLAS) + set(pcfile "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/blas.pc") + if(EXISTS "${pcfile}") + file(READ "${pcfile}" _contents) + set(_contents "prefix=${CURRENT_INSTALLED_DIR}\n${_contents}") + file(WRITE "${pcfile}" "${_contents}") + endif() + set(pcfile "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/blas.pc") + if(EXISTS "${pcfile}") + file(READ "${pcfile}" _contents) + set(_contents "prefix=${CURRENT_INSTALLED_DIR}/debug\n${_contents}") + file(WRITE "${pcfile}" "${_contents}") + endif() endif() vcpkg_fixup_pkgconfig() vcpkg_copy_pdbs() @@ -97,10 +104,12 @@ if(VCPKG_TARGET_IS_WINDOWS) if(EXISTS "${CURRENT_PACKAGES_DIR}/debug/lib/liblapack.lib") file(RENAME "${CURRENT_PACKAGES_DIR}/debug/lib/liblapack.lib" "${CURRENT_PACKAGES_DIR}/debug/lib/lapack.lib") endif() - if(EXISTS "${CURRENT_PACKAGES_DIR}/lib/libblas.lib") - file(RENAME "${CURRENT_PACKAGES_DIR}/lib/libblas.lib" "${CURRENT_PACKAGES_DIR}/lib/blas.lib") - endif() - if(EXISTS "${CURRENT_PACKAGES_DIR}/debug/lib/libblas.lib") - file(RENAME "${CURRENT_PACKAGES_DIR}/debug/lib/libblas.lib" "${CURRENT_PACKAGES_DIR}/debug/lib/blas.lib") + if(NOT USE_OPTIMIZED_BLAS) + if(EXISTS "${CURRENT_PACKAGES_DIR}/lib/libblas.lib") + file(RENAME "${CURRENT_PACKAGES_DIR}/lib/libblas.lib" "${CURRENT_PACKAGES_DIR}/lib/blas.lib") + endif() + if(EXISTS "${CURRENT_PACKAGES_DIR}/debug/lib/libblas.lib") + file(RENAME "${CURRENT_PACKAGES_DIR}/debug/lib/libblas.lib" "${CURRENT_PACKAGES_DIR}/debug/lib/blas.lib") + endif() endif() endif() From a9e0a1792fb3e3b89b7defed347b74bb81c51ead Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Fri, 7 Aug 2020 17:57:36 +0200 Subject: [PATCH 12/30] depend on openblas --- ports/lapack/CONTROL | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/lapack/CONTROL b/ports/lapack/CONTROL index c4e27f77d36db5..2d1eb57b3b05fa 100644 --- a/ports/lapack/CONTROL +++ b/ports/lapack/CONTROL @@ -1,4 +1,4 @@ Source: lapack Version: 1 Description: Metapackage for packages which provide LAPACK -Build-Depends: clapack ((arm&windows)|uwp), lapack-reference(!uwp&!(arm&windows)) \ No newline at end of file +Build-Depends: clapack ((arm&windows)|uwp), lapack-reference(!uwp&!(arm&windows)), openblas (!osx) \ No newline at end of file From da34b28299091a3853781602d2089a15692531db Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Fri, 7 Aug 2020 17:57:59 +0200 Subject: [PATCH 13/30] set cmake_binary_dir so that compiler id run gets put into buildtree. --- scripts/cmake/vcpkg_find_fortran.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/cmake/vcpkg_find_fortran.cmake b/scripts/cmake/vcpkg_find_fortran.cmake index d029e7eea54f1d..1907193d061952 100644 --- a/scripts/cmake/vcpkg_find_fortran.cmake +++ b/scripts/cmake/vcpkg_find_fortran.cmake @@ -12,6 +12,7 @@ function(vcpkg_find_fortran additional_cmake_args_out) set(ARGS_OUT) + set(CMAKE_BINARY_DIR ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}) include(CMakeDetermineFortranCompiler) if(NOT CMAKE_Fortran_COMPILER AND NOT VCPKG_CHAINLOAD_TOOLCHAIN_FILE) # This intentionally breaks users with a custom toolchain which do not have a Fortran compiler setup From dc174717262c91a4f9ad17323198ba5e22e1ee98 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Fri, 7 Aug 2020 18:18:23 +0200 Subject: [PATCH 14/30] more paths --- scripts/cmake/vcpkg_find_fortran.cmake | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/cmake/vcpkg_find_fortran.cmake b/scripts/cmake/vcpkg_find_fortran.cmake index 1907193d061952..22aa6f3d87ef04 100644 --- a/scripts/cmake/vcpkg_find_fortran.cmake +++ b/scripts/cmake/vcpkg_find_fortran.cmake @@ -12,7 +12,9 @@ function(vcpkg_find_fortran additional_cmake_args_out) set(ARGS_OUT) - set(CMAKE_BINARY_DIR ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}) + set(CMAKE_BINARY_DIR "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}") + set(CMAKE_CURRENT_BINARY_DIR "${CMAKE_BINARY_DIR}") + set(CMAKE_PLATFORM_INFO_DIR "${CMAKE_BINARY_DIR}/Platform") include(CMakeDetermineFortranCompiler) if(NOT CMAKE_Fortran_COMPILER AND NOT VCPKG_CHAINLOAD_TOOLCHAIN_FILE) # This intentionally breaks users with a custom toolchain which do not have a Fortran compiler setup From fa569bc075696014f295163500c828fc354ca8f7 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Fri, 7 Aug 2020 19:05:04 +0200 Subject: [PATCH 15/30] add missing PARENT_SCOPE --- scripts/cmake/vcpkg_find_fortran.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/cmake/vcpkg_find_fortran.cmake b/scripts/cmake/vcpkg_find_fortran.cmake index 22aa6f3d87ef04..c4d57aa487059d 100644 --- a/scripts/cmake/vcpkg_find_fortran.cmake +++ b/scripts/cmake/vcpkg_find_fortran.cmake @@ -45,11 +45,11 @@ function(vcpkg_find_fortran additional_cmake_args_out) set(VCPKG_POLICY_SKIP_DUMPBIN_CHECKS enabled PARENT_SCOPE) set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/mingw.cmake" PARENT_SCOPE) # Switching to MinGW toolchain for Fortran if(VCPKG_CRT_LINKAGE STREQUAL "static") - set(VCPKG_CRT_LINKAGE dynamic) + set(VCPKG_CRT_LINKAGE dynamic PARENT_SCOPE) message(STATUS "VCPKG_CRT_LINKAGE linkage for ${PORT} using vcpkg's internal gfortran cannot be static due to linking against MinGW libraries. Forcing dynamic CRT linkage") endif() if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") - set(VCPKG_LIBRARY_LINKAGE dynamic) + set(VCPKG_LIBRARY_LINKAGE dynamic PARENT_SCOPE) message(STATUS "VCPKG_LIBRARY_LINKAGE linkage for ${PORT} using vcpkg's internal gfortran cannot be static due to linking against MinGW libraries. Forcing dynamic library linkage") endif() else() From 61708ade4e914b792f4d97931dac75d62d5d36c6 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Fri, 7 Aug 2020 19:05:45 +0200 Subject: [PATCH 16/30] ws change --- ports/lapack-reference/portfile.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/lapack-reference/portfile.cmake b/ports/lapack-reference/portfile.cmake index 698e25eb54f006..8b0163f9abb536 100644 --- a/ports/lapack-reference/portfile.cmake +++ b/ports/lapack-reference/portfile.cmake @@ -17,6 +17,7 @@ vcpkg_from_github( HEAD_REF master ) + set(CBLAS OFF) if("cblas" IN_LIST FEATURES) set(CBLAS ON) @@ -36,7 +37,6 @@ if("noblas" IN_LIST FEATURES) endif() set(VCPKG_CRT_LINKAGE_BACKUP ${VCPKG_CRT_LINKAGE}) - vcpkg_find_fortran(FORTRAN_CMAKE) if(VCPKG_USE_INTERNAL_Fortran) if(VCPKG_CRT_LINKAGE_BACKUP STREQUAL static) From 7eb3e03f470f68c78493ba7d1dc630e04bfb81ee Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Fri, 7 Aug 2020 20:31:14 +0200 Subject: [PATCH 17/30] [mlpack] remove dep on clapack --- ports/mlpack/CONTROL | 2 +- ports/mlpack/cmakelists.patch | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ports/mlpack/CONTROL b/ports/mlpack/CONTROL index a56987c3b7e84c..252c669976b6b9 100644 --- a/ports/mlpack/CONTROL +++ b/ports/mlpack/CONTROL @@ -1,6 +1,6 @@ Source: mlpack Version: 3.2.2 -Port-Version: 4 +Port-Version: 5 Homepage: https://github.com/mlpack/mlpack Description: mlpack is a fast, flexible machine learning library, written in C++, that aims to provide fast, extensible implementations of cutting-edge machine learning algorithms. Build-Depends: openblas (!osx), lapack, boost, armadillo, ensmallen, stb diff --git a/ports/mlpack/cmakelists.patch b/ports/mlpack/cmakelists.patch index 9db41f91267dc5..b33c29d4f9fbfa 100644 --- a/ports/mlpack/cmakelists.patch +++ b/ports/mlpack/cmakelists.patch @@ -16,8 +16,8 @@ index 26757a5..c200b40 100644 endif () + endif() -+ find_package(clapack CONFIG REQUIRED) -+ set(LAPACK_LIBRARIES lapack) ++ find_package(lapack CONFIG REQUIRED) ++ #set(LAPACK_LIBRARIES lapack) + find_package(OpenBLAS CONFIG REQUIRED) + set(BLAS_LIBRARIES OpenBLAS::OpenBLAS) # Piggyback LAPACK and BLAS linking into Armadillo link. From d8a31b8ac1ec38c135acfc76b24337f1d85ebe69 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Fri, 7 Aug 2020 20:34:10 +0200 Subject: [PATCH 18/30] comment out patches --- ports/mlpack/cmakelists.patch | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/ports/mlpack/cmakelists.patch b/ports/mlpack/cmakelists.patch index b33c29d4f9fbfa..2a08b1366de89c 100644 --- a/ports/mlpack/cmakelists.patch +++ b/ports/mlpack/cmakelists.patch @@ -16,10 +16,10 @@ index 26757a5..c200b40 100644 endif () + endif() -+ find_package(lapack CONFIG REQUIRED) ++ find_package(LAPACK REQUIRED) + #set(LAPACK_LIBRARIES lapack) -+ find_package(OpenBLAS CONFIG REQUIRED) -+ set(BLAS_LIBRARIES OpenBLAS::OpenBLAS) ++ find_package(BLAS REQUIRED) ++ #set(BLAS_LIBRARIES BLAS::BLAS) # Piggyback LAPACK and BLAS linking into Armadillo link. set(ARMADILLO_LIBRARIES - ${ARMADILLO_LIBRARIES} ${BLAS_LIBRARY} ${LAPACK_LIBRARY}) @@ -28,23 +28,23 @@ index 26757a5..c200b40 100644 # Ensure that the libraries are added to the MSVC IDE runtime path. - get_filename_component(BLAS_DIR ${BLAS_LIBRARY} DIRECTORY) - get_filename_component(LAPACK_DIR ${LAPACK_LIBRARY} DIRECTORY) -+ get_property(BLAS_DIR TARGET OpenBLAS::OpenBLAS PROPERTY IMPORTED_LOCATION_RELEASE) -+ get_filename_component(BLAS_DIR ${BLAS_DIR} DIRECTORY) -+ get_property(LAPACK_DIR TARGET lapack PROPERTY IMPORTED_LOCATION_RELEASE) -+ get_filename_component(LAPACK_DIR ${LAPACK_DIR} DIRECTORY) ++ #get_property(BLAS_DIR TARGET OpenBLAS::OpenBLAS PROPERTY IMPORTED_LOCATION_RELEASE) ++ #get_filename_component(BLAS_DIR ${BLAS_DIR} DIRECTORY) ++ #get_property(LAPACK_DIR TARGET lapack PROPERTY IMPORTED_LOCATION_RELEASE) ++ #get_filename_component(LAPACK_DIR ${LAPACK_DIR} DIRECTORY) # Sometimes, especially with an OpenBLAS install via nuget, the DLLs are # actually in ../../bin/x64/. Automatically add these. - if (EXISTS "${BLAS_DIR}/../../bin/x64/") - get_filename_component(BLAS_DLL_DIR "${BLAS_DIR}/../../bin/x64" ABSOLUTE) -+ if (EXISTS "${BLAS_DIR}") ++ if (0) + get_filename_component(BLAS_DLL_DIR "${BLAS_DIR}" ABSOLUTE) set(DLL_COPY_DIRS ${DLL_COPY_DIRS} "${BLAS_DLL_DIR}") endif () - if (EXISTS "${LAPACK_DIR}/../../bin/x64/") - get_filename_component(LAPACK_DLL_DIR "${LAPACK_DIR}/../../bin/x64" ABSOLUTE) -+ if (EXISTS "${LAPACK_DIR}") ++ if (0) + get_filename_component(LAPACK_DLL_DIR "${LAPACK_DIR}" ABSOLUTE) set(DLL_COPY_DIRS ${DLL_COPY_DIRS} "${BLAS_DLL_DIR}") endif () From 66261d774edd618c350b1e5c5e8a2eabbbaa9502 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Fri, 7 Aug 2020 20:51:35 +0200 Subject: [PATCH 19/30] remove openblas again --- ports/lapack/CONTROL | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/lapack/CONTROL b/ports/lapack/CONTROL index 2d1eb57b3b05fa..c4e27f77d36db5 100644 --- a/ports/lapack/CONTROL +++ b/ports/lapack/CONTROL @@ -1,4 +1,4 @@ Source: lapack Version: 1 Description: Metapackage for packages which provide LAPACK -Build-Depends: clapack ((arm&windows)|uwp), lapack-reference(!uwp&!(arm&windows)), openblas (!osx) \ No newline at end of file +Build-Depends: clapack ((arm&windows)|uwp), lapack-reference(!uwp&!(arm&windows)) \ No newline at end of file From 3b357f4bcf25edad18155c07d28650cfede8ae24 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Fri, 7 Aug 2020 21:21:08 +0200 Subject: [PATCH 20/30] Install lapack wrapper since it is missing linkage against -lm and -lgfortran --- ports/lapack-reference/FindLAPACK.cmake | 568 ++++++++++++++++++ ports/lapack-reference/portfile.cmake | 5 + .../vcpkg-cmake-wrapper.cmake | 2 + 3 files changed, 575 insertions(+) create mode 100644 ports/lapack-reference/FindLAPACK.cmake create mode 100644 ports/lapack-reference/vcpkg-cmake-wrapper.cmake diff --git a/ports/lapack-reference/FindLAPACK.cmake b/ports/lapack-reference/FindLAPACK.cmake new file mode 100644 index 00000000000000..1edaa0f831a5f9 --- /dev/null +++ b/ports/lapack-reference/FindLAPACK.cmake @@ -0,0 +1,568 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#[=======================================================================[.rst: +FindLAPACK +---------- + +Find Linear Algebra PACKage (LAPACK) library + +This module finds an installed Fortran library that implements the +LAPACK linear-algebra interface (see http://www.netlib.org/lapack/). + +The approach follows that taken for the ``autoconf`` macro file, +``acx_lapack.m4`` (distributed at +http://ac-archive.sourceforge.net/ac-archive/acx_lapack.html). + +Input Variables +^^^^^^^^^^^^^^^ + +The following variables may be set to influence this module's behavior: + +``BLA_STATIC`` + if ``ON`` use static linkage + +``BLA_VENDOR`` + If set, checks only the specified vendor, if not set checks all the + possibilities. List of vendors valid in this module: + + * ``OpenBLAS`` + * ``FLAME`` + * ``Intel10_32`` (intel mkl v10 32 bit) + * ``Intel10_64lp`` (intel mkl v10+ 64 bit, threaded code, lp64 model) + * ``Intel10_64lp_seq`` (intel mkl v10+ 64 bit, sequential code, lp64 model) + * ``Intel10_64ilp`` (intel mkl v10+ 64 bit, threaded code, ilp64 model) + * ``Intel10_64ilp_seq`` (intel mkl v10+ 64 bit, sequential code, ilp64 model) + * ``Intel10_64_dyn`` (intel mkl v10+ 64 bit, single dynamic library) + * ``Intel`` (obsolete versions of mkl 32 and 64 bit) + * ``ACML`` + * ``Apple`` + * ``NAS`` + * ``Arm`` + * ``Arm_mp`` + * ``Arm_ilp64`` + * ``Arm_ilp64_mp`` + * ``Generic`` + +``BLA_F95`` + if ``ON`` tries to find the BLAS95/LAPACK95 interfaces + +Imported targets +^^^^^^^^^^^^^^^^ + +This module defines the following :prop_tgt:`IMPORTED` target: + +``LAPACK::LAPACK`` + The libraries to use for LAPACK, if found. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module defines the following variables: + +``LAPACK_FOUND`` + library implementing the LAPACK interface is found +``LAPACK_LINKER_FLAGS`` + uncached list of required linker flags (excluding ``-l`` and ``-L``). +``LAPACK_LIBRARIES`` + uncached list of libraries (using full path name) to link against + to use LAPACK +``LAPACK95_LIBRARIES`` + uncached list of libraries (using full path name) to link against + to use LAPACK95 +``LAPACK95_FOUND`` + library implementing the LAPACK95 interface is found + +.. note:: + + C, CXX or Fortran must be enabled to detect a BLAS/LAPACK library. + C or CXX must be enabled to use Intel Math Kernel Library (MKL). + + For example, to use Intel MKL libraries and/or Intel compiler: + + .. code-block:: cmake + + set(BLA_VENDOR Intel10_64lp) + find_package(LAPACK) +#]=======================================================================] + +# Check the language being used +if(NOT (CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED OR CMAKE_Fortran_COMPILER_LOADED)) + if(LAPACK_FIND_REQUIRED) + message(FATAL_ERROR "FindLAPACK requires Fortran, C, or C++ to be enabled.") + else() + message(STATUS "Looking for LAPACK... - NOT found (Unsupported languages)") + return() + endif() +endif() + +if(CMAKE_Fortran_COMPILER_LOADED) + include(${CMAKE_ROOT}/Modules/CheckFortranFunctionExists.cmake) +else() + include(${CMAKE_ROOT}/Modules/CheckFunctionExists.cmake) +endif() +include(${CMAKE_ROOT}/Modules/CMakePushCheckState.cmake) + +cmake_push_check_state() +set(CMAKE_REQUIRED_QUIET ${LAPACK_FIND_QUIETLY}) + +set(LAPACK_FOUND FALSE) +set(LAPACK95_FOUND FALSE) + +set(_lapack_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) +if(BLA_STATIC) + if(WIN32) + set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) + else() + set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) + endif() +else() + if(CMAKE_SYSTEM_NAME STREQUAL "Linux") + # for ubuntu's libblas3gf and liblapack3gf packages + set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES} .so.3gf) + endif() +endif() + +# TODO: move this stuff to a separate module + +macro(CHECK_LAPACK_LIBRARIES LIBRARIES _prefix _name _flags _list _threadlibs _addlibdir _subdirs _blas) + # This macro checks for the existence of the combination of fortran libraries + # given by _list. If the combination is found, this macro checks (using the + # Check_Fortran_Function_Exists macro) whether can link against that library + # combination using the name of a routine given by _name using the linker + # flags given by _flags. If the combination of libraries is found and passes + # the link test, LIBRARIES is set to the list of complete library paths that + # have been found. Otherwise, LIBRARIES is set to FALSE. + + # N.B. _prefix is the prefix applied to the names of all cached variables that + # are generated internally and marked advanced by this macro. + # _addlibdir is a list of additional search paths. _subdirs is a list of path + # suffixes to be used by find_library(). + + set(_libraries_work TRUE) + set(${LIBRARIES}) + set(_combined_name) + + set(_extaddlibdir "${_addlibdir}") + if(WIN32) + list(APPEND _extaddlibdir ENV LIB) + elseif(APPLE) + list(APPEND _extaddlibdir ENV DYLD_LIBRARY_PATH) + else() + list(APPEND _extaddlibdir ENV LD_LIBRARY_PATH) + endif() + list(APPEND _extaddlibdir "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}") + + foreach(_library ${_list}) + if(_library MATCHES "^-Wl,--(start|end)-group$") + # Respect linker flags like --start/end-group (required by MKL) + set(${LIBRARIES} ${${LIBRARIES}} "${_library}") + else() + set(_combined_name ${_combined_name}_${_library}) + if(_libraries_work) + find_library(${_prefix}_${_library}_LIBRARY + NAMES ${_library} + PATHS ${_extaddlibdir} + PATH_SUFFIXES ${_subdirs} + ) + #message("DEBUG: find_library(${_library}) got ${${_prefix}_${_library}_LIBRARY}") + mark_as_advanced(${_prefix}_${_library}_LIBRARY) + set(${LIBRARIES} ${${LIBRARIES}} ${${_prefix}_${_library}_LIBRARY}) + set(_libraries_work ${${_prefix}_${_library}_LIBRARY}) + endif() + endif() + endforeach() + + if(_libraries_work) + # Test this combination of libraries. + set(CMAKE_REQUIRED_LIBRARIES ${_flags} ${${LIBRARIES}} ${_blas} ${_threadlibs}) + #message("DEBUG: CMAKE_REQUIRED_LIBRARIES = ${CMAKE_REQUIRED_LIBRARIES}") + if(CMAKE_Fortran_COMPILER_LOADED) + check_fortran_function_exists("${_name}" ${_prefix}${_combined_name}_WORKS) + else() + check_function_exists("${_name}_" ${_prefix}${_combined_name}_WORKS) + endif() + set(CMAKE_REQUIRED_LIBRARIES) + set(_libraries_work ${${_prefix}${_combined_name}_WORKS}) + endif() + + if(_libraries_work) + if("${_list}${_blas}" STREQUAL "") + set(${LIBRARIES} "${LIBRARIES}-PLACEHOLDER-FOR-EMPTY-LIBRARIES") + else() + set(${LIBRARIES} ${${LIBRARIES}} ${_blas} ${_threadlibs}) + endif() + else() + set(${LIBRARIES} FALSE) + endif() + #message("DEBUG: ${LIBRARIES} = ${${LIBRARIES}}") +endmacro() + +set(LAPACK_LINKER_FLAGS) +set(LAPACK_LIBRARIES) +set(LAPACK95_LIBRARIES) + +if(LAPACK_FIND_QUIETLY OR NOT LAPACK_FIND_REQUIRED) + find_package(BLAS) +else() + find_package(BLAS REQUIRED) +endif() + +if(BLAS_FOUND) + set(LAPACK_LINKER_FLAGS ${BLAS_LINKER_FLAGS}) + if(NOT $ENV{BLA_VENDOR} STREQUAL "") + set(BLA_VENDOR $ENV{BLA_VENDOR}) + else() + if(NOT BLA_VENDOR) + set(BLA_VENDOR "All") + endif() + endif() + + # LAPACK in the Intel MKL 10+ library? + if(BLA_VENDOR MATCHES "Intel" OR BLA_VENDOR STREQUAL "All") + if(NOT LAPACK_LIBRARIES) + if(CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED) + # System-specific settings + if(NOT WIN32) + set(LAPACK_mkl_LM "-lm") + set(LAPACK_mkl_LDL "-ldl") + endif() + + if(LAPACK_FIND_QUIETLY OR NOT LAPACK_FIND_REQUIRED) + find_package(Threads) + else() + find_package(Threads REQUIRED) + endif() + + if(BLA_VENDOR MATCHES "_64ilp") + set(LAPACK_mkl_ILP_MODE "ilp64") + else() + set(LAPACK_mkl_ILP_MODE "lp64") + endif() + + set(LAPACK_SEARCH_LIBS "") + + if(BLA_F95) + set(LAPACK_mkl_SEARCH_SYMBOL "cheev_f95") + set(_LIBRARIES LAPACK95_LIBRARIES) + set(_BLAS_LIBRARIES ${BLAS95_LIBRARIES}) + + # old + list(APPEND LAPACK_SEARCH_LIBS + "mkl_lapack95") + # new >= 10.3 + list(APPEND LAPACK_SEARCH_LIBS + "mkl_intel_c") + list(APPEND LAPACK_SEARCH_LIBS + "mkl_lapack95_${LAPACK_mkl_ILP_MODE}") + else() + set(LAPACK_mkl_SEARCH_SYMBOL "cheev") + set(_LIBRARIES LAPACK_LIBRARIES) + set(_BLAS_LIBRARIES ${BLAS_LIBRARIES}) + + # old and new >= 10.3 + list(APPEND LAPACK_SEARCH_LIBS + "mkl_lapack") + endif() + + # MKL uses a multitude of partially platform-specific subdirectories: + if(BLA_VENDOR STREQUAL "Intel10_32") + set(LAPACK_mkl_ARCH_NAME "ia32") + else() + set(LAPACK_mkl_ARCH_NAME "intel64") + endif() + if(WIN32) + set(LAPACK_mkl_OS_NAME "win") + elseif(APPLE) + set(LAPACK_mkl_OS_NAME "mac") + else() + set(LAPACK_mkl_OS_NAME "lin") + endif() + if(DEFINED ENV{MKLROOT}) + file(TO_CMAKE_PATH "$ENV{MKLROOT}" LAPACK_mkl_MKLROOT) + # If MKLROOT points to the subdirectory 'mkl', use the parent directory instead + # so we can better detect other relevant libraries in 'compiler' or 'tbb': + get_filename_component(LAPACK_mkl_MKLROOT_LAST_DIR "${LAPACK_mkl_MKLROOT}" NAME) + if(LAPACK_mkl_MKLROOT_LAST_DIR STREQUAL "mkl") + get_filename_component(LAPACK_mkl_MKLROOT "${LAPACK_mkl_MKLROOT}" DIRECTORY) + endif() + endif() + set(LAPACK_mkl_LIB_PATH_SUFFIXES + "compiler/lib" "compiler/lib/${LAPACK_mkl_ARCH_NAME}_${LAPACK_mkl_OS_NAME}" + "mkl/lib" "mkl/lib/${LAPACK_mkl_ARCH_NAME}_${LAPACK_mkl_OS_NAME}" + "lib/${LAPACK_mkl_ARCH_NAME}_${LAPACK_mkl_OS_NAME}") + + # First try empty lapack libs + if(NOT ${_LIBRARIES}) + check_lapack_libraries( + ${_LIBRARIES} + LAPACK + ${LAPACK_mkl_SEARCH_SYMBOL} + "" + "" + "${CMAKE_THREAD_LIBS_INIT};${LAPACK_mkl_LM};${LAPACK_mkl_LDL}" + "${LAPACK_mkl_MKLROOT}" + "${LAPACK_mkl_LIB_PATH_SUFFIXES}" + "${_BLAS_LIBRARIES}" + ) + endif() + + # Then try the search libs + foreach(IT ${LAPACK_SEARCH_LIBS}) + string(REPLACE " " ";" SEARCH_LIBS ${IT}) + if(NOT ${_LIBRARIES}) + check_lapack_libraries( + ${_LIBRARIES} + LAPACK + ${LAPACK_mkl_SEARCH_SYMBOL} + "" + "${SEARCH_LIBS}" + "${CMAKE_THREAD_LIBS_INIT};${LAPACK_mkl_LM};${LAPACK_mkl_LDL}" + "${LAPACK_mkl_MKLROOT}" + "${LAPACK_mkl_LIB_PATH_SUFFIXES}" + "${_BLAS_LIBRARIES}" + ) + endif() + endforeach() + + unset(LAPACK_mkl_ILP_MODE) + unset(LAPACK_mkl_SEARCH_SYMBOL) + unset(LAPACK_mkl_LM) + unset(LAPACK_mkl_LDL) + unset(LAPACK_mkl_MKLROOT) + unset(LAPACK_mkl_ARCH_NAME) + unset(LAPACK_mkl_OS_NAME) + unset(LAPACK_mkl_LIB_PATH_SUFFIXES) + endif() + endif() + endif() + + # gotoblas? (http://www.tacc.utexas.edu/tacc-projects/gotoblas2) + if(BLA_VENDOR STREQUAL "Goto" OR BLA_VENDOR STREQUAL "All") + if(NOT LAPACK_LIBRARIES) + check_lapack_libraries( + LAPACK_LIBRARIES + LAPACK + cheev + "" + "goto2" + "" + "" + "" + "${BLAS_LIBRARIES}" + ) + endif() + endif() + + # OpenBLAS? (http://www.openblas.net) + if(BLA_VENDOR STREQUAL "OpenBLAS" OR BLA_VENDOR STREQUAL "All") + if(NOT LAPACK_LIBRARIES) + check_lapack_libraries( + LAPACK_LIBRARIES + LAPACK + cheev + "" + "openblas" + "" + "" + "" + "${BLAS_LIBRARIES}" + ) + endif() + endif() + + # ArmPL? (https://developer.arm.com/tools-and-software/server-and-hpc/compile/arm-compiler-for-linux/arm-performance-libraries) + if(BLA_VENDOR MATCHES "Arm" OR BLA_VENDOR STREQUAL "All") + + # Check for 64bit Integer support + if(BLA_VENDOR MATCHES "_ilp64") + set(LAPACK_armpl_LIB "armpl_ilp64") + else() + set(LAPACK_armpl_LIB "armpl_lp64") + endif() + + # Check for OpenMP support, VIA BLA_VENDOR of Arm_mp or Arm_ipl64_mp + if(BLA_VENDOR MATCHES "_mp") + set(LAPACK_armpl_LIB "${LAPACK_armpl_LIB}_mp") + endif() + + if(NOT LAPACK_LIBRARIES) + check_lapack_libraries( + LAPACK_LIBRARIES + LAPACK + cheev + "" + "${LAPACK_armpl_LIB}" + "" + "" + "" + "${BLAS_LIBRARIES}" + ) + endif() + endif() + + # FLAME's blis library? (https://github.com/flame/blis) + if(BLA_VENDOR STREQUAL "FLAME" OR BLA_VENDOR STREQUAL "All") + if(NOT LAPACK_LIBRARIES) + check_lapack_libraries( + LAPACK_LIBRARIES + LAPACK + cheev + "" + "flame" + "" + "" + "" + "${BLAS_LIBRARIES}" + ) + endif() + endif() + + # BLAS in acml library? + if(BLA_VENDOR MATCHES "ACML" OR BLA_VENDOR STREQUAL "All") + if(BLAS_LIBRARIES MATCHES ".+acml.+") + set(LAPACK_LIBRARIES ${BLAS_LIBRARIES}) + endif() + endif() + + # Apple LAPACK library? + if(BLA_VENDOR STREQUAL "Apple" OR BLA_VENDOR STREQUAL "All") + if(NOT LAPACK_LIBRARIES) + check_lapack_libraries( + LAPACK_LIBRARIES + LAPACK + cheev + "" + "Accelerate" + "" + "" + "" + "${BLAS_LIBRARIES}" + ) + endif() + endif() + + # Apple NAS (vecLib) library? + if(BLA_VENDOR STREQUAL "NAS" OR BLA_VENDOR STREQUAL "All") + if(NOT LAPACK_LIBRARIES) + check_lapack_libraries( + LAPACK_LIBRARIES + LAPACK + cheev + "" + "vecLib" + "" + "" + "" + "${BLAS_LIBRARIES}" + ) + endif() + endif() + + # Generic LAPACK library? + if(BLA_VENDOR STREQUAL "Generic" OR + BLA_VENDOR STREQUAL "ATLAS" OR + BLA_VENDOR STREQUAL "All") + if(NOT LAPACK_LIBRARIES) + check_lapack_libraries( + LAPACK_LIBRARIES + LAPACK + cheev + "" + "lapack" + "" + "" + "" + "${BLAS_LIBRARIES}" + ) + endif() + if(NOT LAPACK_LIBRARIES AND NOT WIN32) + check_lapack_libraries( + LAPACK_LIBRARIES + LAPACK + cheev + "" + "lapack;-lm;-lgfortran" + "" + "" + "" + "${BLAS_LIBRARIES}" + ) + endif() + endif() +else() + message(STATUS "LAPACK requires BLAS") +endif() + +if(BLA_F95) + if(LAPACK95_LIBRARIES) + set(LAPACK95_FOUND TRUE) + else() + set(LAPACK95_FOUND FALSE) + endif() + if(NOT LAPACK_FIND_QUIETLY) + if(LAPACK95_FOUND) + message(STATUS "A library with LAPACK95 API found.") + else() + if(LAPACK_FIND_REQUIRED) + message(FATAL_ERROR + "A required library with LAPACK95 API not found. Please specify library location." + ) + else() + message(STATUS + "A library with LAPACK95 API not found. Please specify library location." + ) + endif() + endif() + endif() + set(LAPACK_FOUND "${LAPACK95_FOUND}") + set(LAPACK_LIBRARIES "${LAPACK95_LIBRARIES}") +else() + if(LAPACK_LIBRARIES) + set(LAPACK_FOUND TRUE) + else() + set(LAPACK_FOUND FALSE) + endif() + + if(NOT LAPACK_FIND_QUIETLY) + if(LAPACK_FOUND) + message(STATUS "A library with LAPACK API found.") + else() + if(LAPACK_FIND_REQUIRED) + message(FATAL_ERROR + "A required library with LAPACK API not found. Please specify library location." + ) + else() + message(STATUS + "A library with LAPACK API not found. Please specify library location." + ) + endif() + endif() + endif() +endif() + +# On compilers that implicitly link LAPACK (such as ftn, cc, and CC on Cray HPC machines) +# we used a placeholder for empty LAPACK_LIBRARIES to get through our logic above. +if(LAPACK_LIBRARIES STREQUAL "LAPACK_LIBRARIES-PLACEHOLDER-FOR-EMPTY-LIBRARIES") + set(LAPACK_LIBRARIES "") +endif() + +if(NOT TARGET LAPACK::LAPACK) + add_library(LAPACK::LAPACK INTERFACE IMPORTED) + set(_lapack_libs "${LAPACK_LIBRARIES}") + if(_lapack_libs AND TARGET BLAS::BLAS) + # remove the ${BLAS_LIBRARIES} from the interface and replace it + # with the BLAS::BLAS target + list(REMOVE_ITEM _lapack_libs "${BLAS_LIBRARIES}") + endif() + + if(_lapack_libs) + set_target_properties(LAPACK::LAPACK PROPERTIES + INTERFACE_LINK_LIBRARIES "${_lapack_libs}" + ) + endif() + unset(_lapack_libs) +endif() + +cmake_pop_check_state() +set(CMAKE_FIND_LIBRARY_SUFFIXES ${_lapack_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES}) diff --git a/ports/lapack-reference/portfile.cmake b/ports/lapack-reference/portfile.cmake index 8b0163f9abb536..52e29880bfb98a 100644 --- a/ports/lapack-reference/portfile.cmake +++ b/ports/lapack-reference/portfile.cmake @@ -113,3 +113,8 @@ if(VCPKG_TARGET_IS_WINDOWS) endif() endif() endif() + +if(NOT VCPKG_TARGET_IS_WINDOWS) + file(COPY ${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake DESTINATION ${CURRENT_PACKAGES_DIR}/share/lapack) + file(COPY ${CMAKE_CURRENT_LIST_DIR}/FindLAPACK.cmake DESTINATION ${CURRENT_PACKAGES_DIR}/share/lapack) +endif() \ No newline at end of file diff --git a/ports/lapack-reference/vcpkg-cmake-wrapper.cmake b/ports/lapack-reference/vcpkg-cmake-wrapper.cmake new file mode 100644 index 00000000000000..a91b040ca90298 --- /dev/null +++ b/ports/lapack-reference/vcpkg-cmake-wrapper.cmake @@ -0,0 +1,2 @@ +message(STATUS "Using VCPKG FindLAPACK. Remove if CMake has been updated to account for -lm and -lgfortran in lapack-reference!") +include(${CMAKE_CURRENT_LIST_DIR}/FindLAPACK.cmake) From fdfb8c62b1524f8a0fa8f671e28a818e0b89d8b4 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Fri, 7 Aug 2020 22:10:53 +0200 Subject: [PATCH 21/30] PREPEND mingw path to make sure cmake picks it up correctly --- scripts/cmake/vcpkg_find_fortran.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/cmake/vcpkg_find_fortran.cmake b/scripts/cmake/vcpkg_find_fortran.cmake index c4d57aa487059d..5a3cf49851e81e 100644 --- a/scripts/cmake/vcpkg_find_fortran.cmake +++ b/scripts/cmake/vcpkg_find_fortran.cmake @@ -37,7 +37,7 @@ function(vcpkg_find_fortran additional_cmake_args_out) endif() vcpkg_acquire_msys(MSYS_ROOT "mingw-w64-${MSYS_TARGET}-gcc-fortran") set(MINGW_BIN "${MSYS_ROOT}/${MINGW_PATH}/bin") - vcpkg_add_to_path("${MINGW_BIN}") + vcpkg_add_to_path(PREPEND "${MINGW_BIN}") list(APPEND ARGS_OUT -DCMAKE_GNUtoMS=ON "-DCMAKE_Fortran_COMPILER=${MINGW_BIN}/gfortran.exe" "-DCMAKE_Fortran_FLAGS_INIT:STRING= -mabi=ms ${MACHINE_FLAG} ${VCPKG_Fortran_FLAGS}") From 7f786742dff37bc15f3f739b972318677569ec02 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Fri, 7 Aug 2020 22:11:40 +0200 Subject: [PATCH 22/30] depend on openblas also on osx --- ports/lapack-reference/CONTROL | 2 +- ports/openblas/CONTROL | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ports/lapack-reference/CONTROL b/ports/lapack-reference/CONTROL index 3a54072a07f391..493e7f50e4cd36 100644 --- a/ports/lapack-reference/CONTROL +++ b/ports/lapack-reference/CONTROL @@ -8,7 +8,7 @@ Feature: cblas Description: Builds CBLAS Feature: noblas -Build-Depends: openblas (!osx) +Build-Depends: openblas Description: Use external optimized BLAS Feature: blas-select diff --git a/ports/openblas/CONTROL b/ports/openblas/CONTROL index e72fba70188af8..ea246834dd9953 100644 --- a/ports/openblas/CONTROL +++ b/ports/openblas/CONTROL @@ -2,5 +2,5 @@ Source: openblas Version: 0.3.9 Port-Version: 2 Homepage: https://github.com/xianyi/OpenBLAS -Build-Depends: pthread (linux) +Build-Depends: pthread (linux&osx) Description: OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version. From 824aa9ca30cd69ebc44b59729dbe1e138484ca20 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Sat, 8 Aug 2020 00:26:07 +0200 Subject: [PATCH 23/30] add clapack on windows to skip due to conflicting library installs --- scripts/ci.baseline.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/ci.baseline.txt b/scripts/ci.baseline.txt index 082003f1cefc77..58ef8dbf3fbe92 100644 --- a/scripts/ci.baseline.txt +++ b/scripts/ci.baseline.txt @@ -228,6 +228,10 @@ chmlib:x64-uwp=fail civetweb:arm64-windows = skip civetweb:arm-uwp = skip civetweb:x64-uwp = skip +# clapack is replaced by lapack-reference on windows. +clapack:x64-windows = skip +clapack:x64-windows-static = skip +clapack:x86-windows = skip clapack:x64-uwp=fail clblas:arm64-windows=fail clblast:x64-linux=fail From 4460b3313e9c94be6ab0bf7787ffdcce1ba9aca0 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Sat, 8 Aug 2020 00:54:40 +0200 Subject: [PATCH 24/30] add clapack to skip on linux --- scripts/ci.baseline.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/ci.baseline.txt b/scripts/ci.baseline.txt index 58ef8dbf3fbe92..4583db9d1a6923 100644 --- a/scripts/ci.baseline.txt +++ b/scripts/ci.baseline.txt @@ -228,7 +228,8 @@ chmlib:x64-uwp=fail civetweb:arm64-windows = skip civetweb:arm-uwp = skip civetweb:x64-uwp = skip -# clapack is replaced by lapack-reference on windows. +# clapack is replaced by lapack-reference. +clapack:x64-linux = skip clapack:x64-windows = skip clapack:x64-windows-static = skip clapack:x86-windows = skip From 6239ba95982b1b0922997748be43853a0a77daa5 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Sat, 8 Aug 2020 00:56:06 +0200 Subject: [PATCH 25/30] add -fPIC as a fortran compiler flag --- ports/lapack-reference/portfile.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/ports/lapack-reference/portfile.cmake b/ports/lapack-reference/portfile.cmake index 52e29880bfb98a..6b36907d46ce33 100644 --- a/ports/lapack-reference/portfile.cmake +++ b/ports/lapack-reference/portfile.cmake @@ -17,6 +17,7 @@ vcpkg_from_github( HEAD_REF master ) +set(ENV{FFLAGS} "$ENV{FFLAGS} -fPIC") set(CBLAS OFF) if("cblas" IN_LIST FEATURES) From 0fa6f86401fdee983ccb8b01fb40ffdc58565248 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Sat, 8 Aug 2020 00:58:52 +0200 Subject: [PATCH 26/30] do not add the flag on windows --- ports/lapack-reference/portfile.cmake | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ports/lapack-reference/portfile.cmake b/ports/lapack-reference/portfile.cmake index 6b36907d46ce33..a14f251f3c9ad8 100644 --- a/ports/lapack-reference/portfile.cmake +++ b/ports/lapack-reference/portfile.cmake @@ -17,7 +17,9 @@ vcpkg_from_github( HEAD_REF master ) -set(ENV{FFLAGS} "$ENV{FFLAGS} -fPIC") +if(NOT VCPKG_TARGET_IS_WINDOWS) + set(ENV{FFLAGS} "$ENV{FFLAGS} -fPIC") +endif() set(CBLAS OFF) if("cblas" IN_LIST FEATURES) From 147e01e090b7dde9977e59a44507c0f07afcdac9 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Sat, 8 Aug 2020 01:29:56 +0200 Subject: [PATCH 27/30] add gcc explicitly to the cmake args. --- scripts/cmake/vcpkg_find_fortran.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/cmake/vcpkg_find_fortran.cmake b/scripts/cmake/vcpkg_find_fortran.cmake index 5a3cf49851e81e..e6be2722e5d911 100644 --- a/scripts/cmake/vcpkg_find_fortran.cmake +++ b/scripts/cmake/vcpkg_find_fortran.cmake @@ -40,6 +40,7 @@ function(vcpkg_find_fortran additional_cmake_args_out) vcpkg_add_to_path(PREPEND "${MINGW_BIN}") list(APPEND ARGS_OUT -DCMAKE_GNUtoMS=ON "-DCMAKE_Fortran_COMPILER=${MINGW_BIN}/gfortran.exe" + "-DCMAKE_C_COMPILER=${MINGW_BIN}/gcc.exe" "-DCMAKE_Fortran_FLAGS_INIT:STRING= -mabi=ms ${MACHINE_FLAG} ${VCPKG_Fortran_FLAGS}") set(VCPKG_USE_INTERNAL_Fortran TRUE PARENT_SCOPE) set(VCPKG_POLICY_SKIP_DUMPBIN_CHECKS enabled PARENT_SCOPE) From 5e40b0a1135cb1f3b39ddf3e763e9d9f7119cda1 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Sat, 8 Aug 2020 01:31:02 +0200 Subject: [PATCH 28/30] ws change --- ports/lapack-reference/portfile.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/lapack-reference/portfile.cmake b/ports/lapack-reference/portfile.cmake index a14f251f3c9ad8..1e3f8d6b653539 100644 --- a/ports/lapack-reference/portfile.cmake +++ b/ports/lapack-reference/portfile.cmake @@ -120,4 +120,4 @@ endif() if(NOT VCPKG_TARGET_IS_WINDOWS) file(COPY ${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake DESTINATION ${CURRENT_PACKAGES_DIR}/share/lapack) file(COPY ${CMAKE_CURRENT_LIST_DIR}/FindLAPACK.cmake DESTINATION ${CURRENT_PACKAGES_DIR}/share/lapack) -endif() \ No newline at end of file +endif() From 9c2641d98c3e9af0bb891f5ba6115faeb4dbae07 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Mon, 10 Aug 2020 14:35:44 +0200 Subject: [PATCH 29/30] applyrequested changes from CR --- ports/clapack/CONTROL | 2 +- ports/lapack/portfile.cmake | 4 ++-- ports/mlpack/cmakelists.patch | 8 +------- ports/openblas/portfile.cmake | 7 +++---- ports/vcpkg-gfortran/portfile.cmake | 1 + 5 files changed, 8 insertions(+), 14 deletions(-) diff --git a/ports/clapack/CONTROL b/ports/clapack/CONTROL index 76e53e29fa4b5e..bbabc6ad89f306 100644 --- a/ports/clapack/CONTROL +++ b/ports/clapack/CONTROL @@ -1,6 +1,6 @@ Source: clapack Version: 3.2.1 -Port-Version: 13 +Port-Version: 14 Homepage: https://www.netlib.org/clapack Description: CLAPACK (f2c'ed version of LAPACK) Build-Depends: openblas (!osx) diff --git a/ports/lapack/portfile.cmake b/ports/lapack/portfile.cmake index 92f8db18a4c39f..ab7f28a0bf0f46 100644 --- a/ports/lapack/portfile.cmake +++ b/ports/lapack/portfile.cmake @@ -3,8 +3,8 @@ SET(VCPKG_POLICY_EMPTY_PACKAGE enabled) if(VCPKG_TARGET_IS_UWP OR VCPKG_TARGET_IS_WINDOWS AND VCPKG_TARGET_ARCHITECTURE MATCHES "arm") # Install clapack wrappers. - file(INSTALL ${CMAKE_CURRENT_LIST_DIR}/clapack/vcpkg-cmake-wrapper.cmake DESTINATION ${CURRENT_PACKAGES_DIR}/share/lapack) - file(INSTALL ${CMAKE_CURRENT_LIST_DIR}/clapack/FindLAPACK.cmake DESTINATION ${CURRENT_PACKAGES_DIR}/share/lapack) + file(INSTALL ${CMAKE_CURRENT_LIST_DIR}/clapack/vcpkg-cmake-wrapper.cmake DESTINATION ${CURRENT_PACKAGES_DIR}/share//${PORT}) + file(INSTALL ${CMAKE_CURRENT_LIST_DIR}/clapack/FindLAPACK.cmake DESTINATION ${CURRENT_PACKAGES_DIR}/share//${PORT}) endif() vcpkg_configure_cmake(SOURCE_PATH ${CURRENT_PORT_DIR} OPTIONS -DCMAKE_PREFIX_PATH="${CURRENT_PACKAGES_DIR}") diff --git a/ports/mlpack/cmakelists.patch b/ports/mlpack/cmakelists.patch index 2a08b1366de89c..66da821bb37fbe 100644 --- a/ports/mlpack/cmakelists.patch +++ b/ports/mlpack/cmakelists.patch @@ -2,7 +2,7 @@ diff --git a/CMakeLists.txt b/CMakeLists.txt index 26757a5..c200b40 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt -@@ -288,6 +288,7 @@ endif() +@@ -288,6 +282,7 @@ endif() # and find LAPACK and BLAS ourselves, using a slightly modified variant of the # script Armadillo uses to find these. if (WIN32) @@ -17,9 +17,7 @@ index 26757a5..c200b40 100644 + endif() + find_package(LAPACK REQUIRED) -+ #set(LAPACK_LIBRARIES lapack) + find_package(BLAS REQUIRED) -+ #set(BLAS_LIBRARIES BLAS::BLAS) # Piggyback LAPACK and BLAS linking into Armadillo link. set(ARMADILLO_LIBRARIES - ${ARMADILLO_LIBRARIES} ${BLAS_LIBRARY} ${LAPACK_LIBRARY}) @@ -28,10 +26,6 @@ index 26757a5..c200b40 100644 # Ensure that the libraries are added to the MSVC IDE runtime path. - get_filename_component(BLAS_DIR ${BLAS_LIBRARY} DIRECTORY) - get_filename_component(LAPACK_DIR ${LAPACK_LIBRARY} DIRECTORY) -+ #get_property(BLAS_DIR TARGET OpenBLAS::OpenBLAS PROPERTY IMPORTED_LOCATION_RELEASE) -+ #get_filename_component(BLAS_DIR ${BLAS_DIR} DIRECTORY) -+ #get_property(LAPACK_DIR TARGET lapack PROPERTY IMPORTED_LOCATION_RELEASE) -+ #get_filename_component(LAPACK_DIR ${LAPACK_DIR} DIRECTORY) # Sometimes, especially with an OpenBLAS install via nuget, the DLLs are # actually in ../../bin/x64/. Automatically add these. diff --git a/ports/openblas/portfile.cmake b/ports/openblas/portfile.cmake index a17bdf6348f7bc..57b9236ace6cd6 100644 --- a/ports/openblas/portfile.cmake +++ b/ports/openblas/portfile.cmake @@ -28,7 +28,7 @@ set(COMMON_OPTIONS -DBUILD_WITHOUT_LAPACK=ON) # for UWP version, must build non uwp first for helper # binaries. -if(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") +if(VCPKG_TARGET_IS_UWP) message(STATUS "Building Windows helper files") set(TEMP_CMAKE_SYSTEM_NAME "${VCPKG_CMAKE_SYSTEM_NAME}") set(TEMP_CMAKE_SYSTEM_VERSION "${VCPKG_CMAKE_SYSTEM_VERSION}") @@ -63,7 +63,7 @@ if(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") -DVS_WINRT_COMPONENT=TRUE "-DBLASHELPER_BINARY_DIR=${CURRENT_BUILDTREES_DIR}/x64-windows-rel") -elseif(NOT VCPKG_CMAKE_SYSTEM_NAME) +elseif(VCPKG_TARGET_IS_WINDOWS) vcpkg_configure_cmake( PREFER_NINJA SOURCE_PATH ${SOURCE_PATH} @@ -114,8 +114,7 @@ string(REPLACE "#include \"common.h\"" "#include \"openblas_common.h\"" CBLAS_H file(WRITE ${CURRENT_PACKAGES_DIR}/include/cblas.h "${CBLAS_H}") # openblas is BSD -file(COPY ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/openblas) -file(RENAME ${CURRENT_PACKAGES_DIR}/share/openblas/LICENSE ${CURRENT_PACKAGES_DIR}/share/openblas/copyright) +file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright) file(COPY ${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake DESTINATION ${CURRENT_PACKAGES_DIR}/share/blas) file(COPY ${CMAKE_CURRENT_LIST_DIR}/FindBLAS.cmake DESTINATION ${CURRENT_PACKAGES_DIR}/share/blas) diff --git a/ports/vcpkg-gfortran/portfile.cmake b/ports/vcpkg-gfortran/portfile.cmake index f5d8a9b65d83a2..5dd1965cd8b1c2 100644 --- a/ports/vcpkg-gfortran/portfile.cmake +++ b/ports/vcpkg-gfortran/portfile.cmake @@ -1,3 +1,4 @@ +vcpkg_fail_port_install(ON_ARCH "arm" ON_TARGET "linux" "osx") include(vcpkg_find_fortran) vcpkg_find_fortran(FORTRAN_CMAKE) if(VCPKG_USE_INTERNAL_Fortran) From 3887876e87294b89c3b15ed2d293622af759b560 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Mon, 10 Aug 2020 22:26:28 +0200 Subject: [PATCH 30/30] fix the failing patch --- ports/mlpack/cmakelists.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/mlpack/cmakelists.patch b/ports/mlpack/cmakelists.patch index 66da821bb37fbe..79f176419bed90 100644 --- a/ports/mlpack/cmakelists.patch +++ b/ports/mlpack/cmakelists.patch @@ -10,7 +10,7 @@ index 26757a5..c200b40 100644 find_library(LAPACK_LIBRARY NAMES lapack liblapack lapack_win32_MT lapack_win32 PATHS "C:/Program Files/Armadillo" -@@ -305,24 +306,31 @@ if (WIN32) +@@ -305,24 +306,25 @@ if (WIN32) if (NOT BLAS_LIBRARY) message(FATAL_ERROR "Cannot find BLAS library (.lib)!") endif ()