diff options
| author | Alexander Neumann <30894796+Neumann-A@users.noreply.github.com> | 2019-03-14 23:24:31 +0100 |
|---|---|---|
| committer | Phil Christensen <philc@microsoft.com> | 2019-03-14 15:24:31 -0700 |
| commit | 68a540d84c9096a252239ad3e248b9873709a5d0 (patch) | |
| tree | 363a27b385393fc192eb828716e45ad671360397 | |
| parent | cfdc331b4b8c3ffc5962d7dfdf5c6ec01510db97 (diff) | |
| download | vcpkg-68a540d84c9096a252239ad3e248b9873709a5d0.tar.gz vcpkg-68a540d84c9096a252239ad3e248b9873709a5d0.zip | |
fix find_package for fftw3 and add arch features (#4783)
* fix find_package for fftw3
* the patch took care of moving the files
* Additional Patch to add Suffix to LibraryDepends
* fixed minsizerel and relwithdebinfo for vs cmake configs
* remove fix for minsizerel and relwithdeb info. Use global cmake mappings of these targets instead!
* added feature packages. unfortunally avx and avx2 create an ICE with Visual Studio 2017 (maybe fixed with 2019?)
* removed sse2 as default (forgot about arm...)
| -rw-r--r-- | ports/fftw3/CONTROL | 19 | ||||
| -rw-r--r-- | ports/fftw3/fftw3_arch_fix.patch | 23 | ||||
| -rw-r--r-- | ports/fftw3/patch_targets.patch | 41 | ||||
| -rw-r--r-- | ports/fftw3/portfile.cmake | 108 |
4 files changed, 163 insertions, 28 deletions
diff --git a/ports/fftw3/CONTROL b/ports/fftw3/CONTROL index 55cd702d2..c1986ce4d 100644 --- a/ports/fftw3/CONTROL +++ b/ports/fftw3/CONTROL @@ -1,6 +1,21 @@ Source: fftw3
-Version: 3.3.8
+Version: 3.3.8-2
Description: FFTW is a C subroutine library for computing the discrete Fourier transform (DFT) in one or more dimensions, of arbitrary input size, and of both real and complex data (as well as of even/odd data, i.e. the discrete cosine/sine transforms or DCT/DST).
Feature: openmp
-Description: Builds openmp enabled lib
\ No newline at end of file +Description: Builds openmp enabled lib
+
+Feature: sse
+Description: Builds part of the library with sse
+
+Feature: sse2
+Description: Builds part of the library with sse2, sse
+
+Feature: avx
+Description: Builds part of the library with avx, sse2, sse
+
+Feature: avx2
+Description: Builds part of the library with avx2, fma, avx, sse2, sse
+
+Feature: threads
+Description: Enable threads in fftw3
diff --git a/ports/fftw3/fftw3_arch_fix.patch b/ports/fftw3/fftw3_arch_fix.patch new file mode 100644 index 000000000..a3462ea60 --- /dev/null +++ b/ports/fftw3/fftw3_arch_fix.patch @@ -0,0 +1,23 @@ +diff --git a/CMakeLists - Kopie.txt b/CMakeLists.txt +index 95bd537a..245acc8f 100644 +--- a/CMakeLists - Kopie.txt ++++ b/CMakeLists.txt +@@ -131,6 +131,7 @@ endif () +
+ include (CheckCCompilerFlag)
+
++#All those checks fail due to linkage errors so we directly set HAVE_<ARCH> in the PORTFILE! We assume the user knows what (s)he is doing!
+ if (ENABLE_SSE)
+ foreach (FLAG "-msse" "/arch:SSE")
+ unset (HAVE_SSE CACHE)
+@@ -176,8 +177,9 @@ if (ENABLE_AVX2) + endif ()
+
+ # AVX2 codelets require FMA support as well
++# AVX2 implicitly includes FMA using Visual Studio (also definition __FMA__ is not set)
+ if (ENABLE_AVX2)
+- foreach (FLAG "-mfma" "/arch:FMA")
++ foreach (FLAG "-mfma" "/arch:AVX2")
+ unset (HAVE_FMA CACHE)
+ check_c_compiler_flag (${FLAG} HAVE_FMA)
+ if (HAVE_FMA)
diff --git a/ports/fftw3/patch_targets.patch b/ports/fftw3/patch_targets.patch new file mode 100644 index 000000000..a0df5cf90 --- /dev/null +++ b/ports/fftw3/patch_targets.patch @@ -0,0 +1,41 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 335808a..90772b4 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -358,7 +358,7 @@ foreach(subtarget ${subtargets}) + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) + endforeach () + install(TARGETS ${fftw3_lib} +- EXPORT FFTW3LibraryDepends ++ EXPORT FFTW3${PREC_SUFFIX}LibraryDepends + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) +@@ -419,11 +419,11 @@ configure_file (FFTW3ConfigVersion.cmake.in FFTW3${PREC_SUFFIX}ConfigVersion.cma + install (FILES + ${CMAKE_CURRENT_BINARY_DIR}/FFTW3${PREC_SUFFIX}Config.cmake + ${CMAKE_CURRENT_BINARY_DIR}/FFTW3${PREC_SUFFIX}ConfigVersion.cmake +- DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/fftw3${PREC_SUFFIX} ++ DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake + COMPONENT Development) + +-export (TARGETS ${fftw3_lib} NAMESPACE FFTW3:: FILE ${PROJECT_BINARY_DIR}/FFTW3LibraryDepends.cmake) +-install(EXPORT FFTW3LibraryDepends ++export (TARGETS ${fftw3_lib} NAMESPACE FFTW3:: FILE ${PROJECT_BINARY_DIR}/FFTW3${PREC_SUFFIX}LibraryDepends.cmake) ++install(EXPORT FFTW3${PREC_SUFFIX}LibraryDepends + NAMESPACE FFTW3:: +- DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/fftw3${PREC_SUFFIX} ++ DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake + COMPONENT Development) +--- a/FFTW3Config.cmake.in ++++ b/FFTW3Config.cmake.in +@@ -10,7 +10,7 @@ set (FFTW3@PREC_SUFFIX@_LIBRARIES fftw3@PREC_SUFFIX@) + set (FFTW3@PREC_SUFFIX@_LIBRARY_DIRS @CMAKE_INSTALL_FULL_LIBDIR@) + set (FFTW3@PREC_SUFFIX@_INCLUDE_DIRS @CMAKE_INSTALL_FULL_INCLUDEDIR@) + +-include ("${CMAKE_CURRENT_LIST_DIR}/FFTW3LibraryDepends.cmake") ++include ("${CMAKE_CURRENT_LIST_DIR}/FFTW3@PREC_SUFFIX@LibraryDepends.cmake") + + if (CMAKE_VERSION VERSION_LESS 2.8.3) + set (CMAKE_CURRENT_LIST_DIR) +
\ No newline at end of file diff --git a/ports/fftw3/portfile.cmake b/ports/fftw3/portfile.cmake index 4efb47075..17ce37ea2 100644 --- a/ports/fftw3/portfile.cmake +++ b/ports/fftw3/portfile.cmake @@ -21,6 +21,8 @@ vcpkg_apply_patches( SOURCE_PATH ${SOURCE_PATH}
PATCHES
${CMAKE_CURRENT_LIST_DIR}/omp_test.patch
+ ${CMAKE_CURRENT_LIST_DIR}/patch_targets.patch
+ ${CMAKE_CURRENT_LIST_DIR}/fftw3_arch_fix.patch
)
if ("openmp" IN_LIST FEATURES)
@@ -29,34 +31,88 @@ else() set(ENABLE_OPENMP OFF)
endif()
+if ("avx" IN_LIST FEATURES)
+ set(HAVE_AVX ON)
+ set(HAVE_SSE ON)
+ set(HAVE_SSE2 ON)
+else()
+ set(HAVE_AVX OFF)
+endif()
+
+if ("avx2" IN_LIST FEATURES)
+ set(HAVE_AVX2 ON)
+ set(HAVE_FMA ON)
+ set(HAVE_SSE ON)
+ set(HAVE_SSE2 ON)
+else()
+ set(HAVE_AVX2 OFF)
+ set(HAVE_FMA OFF)
+endif()
+
+if ("sse" IN_LIST FEATURES)
+ set(HAVE_SSE ON)
+else()
+ set(HAVE_SSE OFF)
+endif()
+
+if ("sse2" IN_LIST FEATURES)
+ set(HAVE_SSE2 ON)
+ set(HAVE_SSE ON)
+else()
+ set(HAVE_SSE2 OFF)
+endif()
+
+if ("threads" IN_LIST FEATURES)
+ set(HAVE_THREADS ON)
+else()
+ set(HAVE_THREADS OFF)
+endif()
+
foreach(PRECISION ENABLE_DEFAULT_PRECISION ENABLE_FLOAT ENABLE_LONG_DOUBLE)
- vcpkg_configure_cmake(
- SOURCE_PATH ${SOURCE_PATH}
- PREFER_NINJA
- OPTIONS
- -D${PRECISION}=ON
- -DENABLE_OPENMP=${ENABLE_OPENMP}
- )
-
- vcpkg_install_cmake()
- vcpkg_copy_pdbs()
-
- file(COPY ${SOURCE_PATH}/api/fftw3.h DESTINATION ${CURRENT_PACKAGES_DIR}/include)
-
- vcpkg_fixup_cmake_targets(CONFIG_PATH lib/cmake)
-
- if (VCPKG_CRT_LINKAGE STREQUAL dynamic)
- vcpkg_apply_patches(
- SOURCE_PATH ${CURRENT_PACKAGES_DIR}/include
- PATCHES
- ${CMAKE_CURRENT_LIST_DIR}/fix-dynamic.patch)
- endif()
-
- # Cleanup
- file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include)
- file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/share)
+ if(${PRECISION} MATCHES "ENABLE_LONG_DOUBLE")
+ vcpkg_configure_cmake(
+ SOURCE_PATH ${SOURCE_PATH}
+ PREFER_NINJA
+ OPTIONS
+ -D${PRECISION}=ON
+ -DENABLE_OPENMP=${ENABLE_OPENMP}
+ -DENABLE_THREADS=${HAVE_THREADS}
+ )
+ else()
+ vcpkg_configure_cmake(
+ SOURCE_PATH ${SOURCE_PATH}
+ PREFER_NINJA
+ OPTIONS
+ -D${PRECISION}=ON
+ -DENABLE_OPENMP=${ENABLE_OPENMP}
+ -DHAVE_SSE=${HAVE_SSE}
+ -DHAVE_SSE2=${HAVE_SSE2}
+ -DHAVE_AVX=${HAVE_AVX}
+ -DHAVE_AVX2=${HAVE_AVX2}
+ -DHAVE_FMA=${HAVE_FMA}
+ -DENABLE_THREADS=${HAVE_THREADS}
+ )
+ endif()
+
+ vcpkg_install_cmake()
+ vcpkg_copy_pdbs()
+
+ file(COPY ${SOURCE_PATH}/api/fftw3.h DESTINATION ${CURRENT_PACKAGES_DIR}/include)
+
+ vcpkg_fixup_cmake_targets(CONFIG_PATH lib/cmake)
+
+ if (VCPKG_CRT_LINKAGE STREQUAL dynamic)
+ vcpkg_apply_patches(
+ SOURCE_PATH ${CURRENT_PACKAGES_DIR}/include
+ PATCHES
+ ${CMAKE_CURRENT_LIST_DIR}/fix-dynamic.patch)
+ endif()
+
+ # Cleanup
+ file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include)
+ file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/share)
endforeach()
-
+
# Handle copyright
file(COPY ${SOURCE_PATH}/COPYING DESTINATION ${CURRENT_PACKAGES_DIR}/share/fftw3)
file(RENAME ${CURRENT_PACKAGES_DIR}/share/fftw3/COPYING ${CURRENT_PACKAGES_DIR}/share/fftw3/copyright)
|
