aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Neumann <30894796+Neumann-A@users.noreply.github.com>2019-03-14 23:24:31 +0100
committerPhil Christensen <philc@microsoft.com>2019-03-14 15:24:31 -0700
commit68a540d84c9096a252239ad3e248b9873709a5d0 (patch)
tree363a27b385393fc192eb828716e45ad671360397
parentcfdc331b4b8c3ffc5962d7dfdf5c6ec01510db97 (diff)
downloadvcpkg-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/CONTROL19
-rw-r--r--ports/fftw3/fftw3_arch_fix.patch23
-rw-r--r--ports/fftw3/patch_targets.patch41
-rw-r--r--ports/fftw3/portfile.cmake108
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)