icl-utk-edu / heffte

BSD 3-Clause "New" or "Revised" License
20 stars 15 forks source link

FFTW link error on M1 #8

Closed aaadelmann closed 1 year ago

aaadelmann commented 1 year ago

Hi try to build heffte (heffte-2.2.0) on my mac (13.1) with ffw (3.3.10). I use Apple clang version 14.0.3. The FFTW installation is fine and my build scripts are working fine on linux.

Here my build:

bash-3.2$ CXX=clang CC=clang cmake -D CMAKE_BUILD_TYPE=Release -D BUILD_SHARED_LIBS=ON -D CMAKE_INSTALL_PREFIX=$HOME/opal -D Heffte_ENABLE_AVX=OFF -D Heffte_ENABLE_FFTW=ON -D FFTW_ROOT=$HOME/opal -D Heffte_ENABLE_CUDA=OFF .. fatal: not a git repository (or any of the parent directories): .git -- -- heFFTe 2.2.0 -- -D CMAKE_INSTALL_PREFIX=/Users/adelmann/opal -- -D BUILD_SHARED_LIBS=ON -- -D CMAKE_BUILD_TYPE=Release -- -D CMAKE_CXX_FLAGS_RELEASE=-O3 -DNDEBUG -- -D CMAKE_CXX_FLAGS= -- -D MPI_CXX_COMPILER=/Users/adelmann/OPAL/bin/mpicxx -- -D MPI_CXX_COMPILE_OPTIONS= -- -D Heffte_ENABLE_FFTW=ON -- -D Heffte_ENABLE_MKL=OFF -- -D Heffte_ENABLE_CUDA=OFF -- -D Heffte_ENABLE_ROCM=OFF -- -D Heffte_ENABLE_ONEAPI=OFF -- -D Heffte_ENABLE_AVX=OFF -- -D Heffte_ENABLE_AVX512=OFF -- -D Heffte_ENABLE_PYTHON=OFF -- -D Heffte_ENABLE_FORTRAN=OFF -- -D Heffte_ENABLE_TRACING=OFF -- -- Setting Heffte INSTALL_RPATH = /Users/adelmann/OPAL/lib;/Users/adelmann/opal/lib -- Configuring done -- Generating done -- Build files have been written to: /Users/adelmann/opal/tmp/src/heffte bash-3.2$ make VERBOSE=1 /opt/local/bin/cmake -S/Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0 -B/Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0_build --check-build-system CMakeFiles/Makefile.cmake 0 /opt/local/bin/cmake -E cmake_progress_start /Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0_build/CMakeFiles /Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0_build//CMakeFiles/progress.marks /Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/Makefile2 all /Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/Heffte.dir/build.make CMakeFiles/Heffte.dir/depend cd /Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0_build && /opt/local/bin/cmake -E cmake_depends "Unix Makefiles" /Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0 /Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0 /Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0_build /Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0_build /Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0_build/CMakeFiles/Heffte.dir/DependInfo.cmake --color= /Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/Heffte.dir/build.make CMakeFiles/Heffte.dir/build [ 2%] Building CXX object CMakeFiles/Heffte.dir/src/heffte_c.cpp.o /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -I/Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0/include -I/Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0_build/include -O3 -DNDEBUG -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -mmacosx-version-min=13.1 -std=c++11 -MD -MT CMakeFiles/Heffte.dir/src/heffte_c.cpp.o -MF CMakeFiles/Heffte.dir/src/heffte_c.cpp.o.d -o CMakeFiles/Heffte.dir/src/heffte_c.cpp.o -c /Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0/src/heffte_c.cpp [ 4%] Building CXX object CMakeFiles/Heffte.dir/src/heffte_plan_logic.cpp.o /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -I/Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0/include -I/Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0_build/include -O3 -DNDEBUG -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -mmacosx-version-min=13.1 -std=c++11 -MD -MT CMakeFiles/Heffte.dir/src/heffte_plan_logic.cpp.o -MF CMakeFiles/Heffte.dir/src/heffte_plan_logic.cpp.o.d -o CMakeFiles/Heffte.dir/src/heffte_plan_logic.cpp.o -c /Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0/src/heffte_plan_logic.cpp [ 6%] Building CXX object CMakeFiles/Heffte.dir/src/heffte_magma_helpers.cpp.o /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -I/Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0/include -I/Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0_build/include -O3 -DNDEBUG -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -mmacosx-version-min=13.1 -std=c++11 -MD -MT CMakeFiles/Heffte.dir/src/heffte_magma_helpers.cpp.o -MF CMakeFiles/Heffte.dir/src/heffte_magma_helpers.cpp.o.d -o CMakeFiles/Heffte.dir/src/heffte_magma_helpers.cpp.o -c /Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0/src/heffte_magma_helpers.cpp [ 8%] Building CXX object CMakeFiles/Heffte.dir/src/heffte_reshape3d.cpp.o /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -I/Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0/include -I/Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0_build/include -O3 -DNDEBUG -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -mmacosx-version-min=13.1 -std=c++11 -MD -MT CMakeFiles/Heffte.dir/src/heffte_reshape3d.cpp.o -MF CMakeFiles/Heffte.dir/src/heffte_reshape3d.cpp.o.d -o CMakeFiles/Heffte.dir/src/heffte_reshape3d.cpp.o -c /Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0/src/heffte_reshape3d.cpp [ 11%] Building CXX object CMakeFiles/Heffte.dir/src/heffte_fft3d.cpp.o /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -I/Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0/include -I/Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0_build/include -O3 -DNDEBUG -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -mmacosx-version-min=13.1 -std=c++11 -MD -MT CMakeFiles/Heffte.dir/src/heffte_fft3d.cpp.o -MF CMakeFiles/Heffte.dir/src/heffte_fft3d.cpp.o.d -o CMakeFiles/Heffte.dir/src/heffte_fft3d.cpp.o -c /Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0/src/heffte_fft3d.cpp [ 13%] Building CXX object CMakeFiles/Heffte.dir/src/heffte_fft3d_r2c.cpp.o /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -I/Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0/include -I/Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0_build/include -O3 -DNDEBUG -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -mmacosx-version-min=13.1 -std=c++11 -MD -MT CMakeFiles/Heffte.dir/src/heffte_fft3d_r2c.cpp.o -MF CMakeFiles/Heffte.dir/src/heffte_fft3d_r2c.cpp.o.d -o CMakeFiles/Heffte.dir/src/heffte_fft3d_r2c.cpp.o -c /Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0/src/heffte_fft3d_r2c.cpp [ 15%] Linking CXX static library libheffte.a /opt/local/bin/cmake -P CMakeFiles/Heffte.dir/cmake_clean_target.cmake /opt/local/bin/cmake -E cmake_link_script CMakeFiles/Heffte.dir/link.txt --verbose=1 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar qc libheffte.a CMakeFiles/Heffte.dir/src/heffte_c.cpp.o CMakeFiles/Heffte.dir/src/heffte_plan_logic.cpp.o CMakeFiles/Heffte.dir/src/heffte_magma_helpers.cpp.o CMakeFiles/Heffte.dir/src/heffte_reshape3d.cpp.o CMakeFiles/Heffte.dir/src/heffte_fft3d.cpp.o CMakeFiles/Heffte.dir/src/heffte_fft3d_r2c.cpp.o /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib libheffte.a [ 15%] Built target Heffte /Applications/Xcode.app/Contents/Developer/usr/bin/make -f benchmarks/CMakeFiles/speed3d_c2c.dir/build.make benchmarks/CMakeFiles/speed3d_c2c.dir/depend cd /Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0_build && /opt/local/bin/cmake -E cmake_depends "Unix Makefiles" /Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0 /Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0/benchmarks /Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0_build /Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0_build/benchmarks /Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0_build/benchmarks/CMakeFiles/speed3d_c2c.dir/DependInfo.cmake --color= /Applications/Xcode.app/Contents/Developer/usr/bin/make -f benchmarks/CMakeFiles/speed3d_c2c.dir/build.make benchmarks/CMakeFiles/speed3d_c2c.dir/build [ 17%] Building CXX object benchmarks/CMakeFiles/speed3d_c2c.dir/speed3d_c2c.cpp.o cd /Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0_build/benchmarks && /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -I/Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0/benchmarks/../test -I/Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0/include -I/Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0_build/include -O3 -DNDEBUG -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -mmacosx-version-min=13.1 -std=gnu++11 -MD -MT benchmarks/CMakeFiles/speed3d_c2c.dir/speed3d_c2c.cpp.o -MF CMakeFiles/speed3d_c2c.dir/speed3d_c2c.cpp.o.d -o CMakeFiles/speed3d_c2c.dir/speed3d_c2c.cpp.o -c /Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0/benchmarks/speed3d_c2c.cpp [ 20%] Linking CXX executable speed3d_c2c cd /Users/adelmann/OPAL/tmp/src/heffte/heffte-2.2.0_build/benchmarks && /opt/local/bin/cmake -E cmake_link_script CMakeFiles/speed3d_c2c.dir/link.txt --verbose=1 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -O3 -DNDEBUG -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -mmacosx-version-min=13.1 -Wl,-search_paths_first -Wl,-headerpad_max_install_names -Wl,-flat_namespace CMakeFiles/speed3d_c2c.dir/speed3d_c2c.cpp.o -o speed3d_c2c ../libheffte.a /Users/adelmann/OPAL/lib/libmpicxx.dylib /Users/adelmann/OPAL/lib/libmpi.dylib /Users/adelmann/OPAL/lib/libpmpi.dylib /Users/adelmann/OPAL/lib/libfftw3.dylib /Users/adelmann/OPAL/lib/libfftw3_threads.dylib Undefined symbols for architecture arm64: "_fftwf_destroy_plan", referenced from: heffte::fftw_executor::~fftw_executor() in speed3d_c2c.cpp.o void heffte::fftw_executor::make_plan<std::1::complex, (heffte::direction)0>(std::1::unique_ptr<heffte::plan_fftw<std::1::complex, (heffte::direction)0>, std::1::default_delete<heffte::plan_fftw<std::1::complex, (heffte::direction)0> > >&) const in libheffte.a(heffte_fft3d.cpp.o) void heffte::fftw_executor::make_plan<std::1::complex, (heffte::direction)1>(std::1::unique_ptr<heffte::plan_fftw<std::1::complex, (heffte::direction)1>, std::1::default_delete<heffte::plan_fftw<std::1::complex, (heffte::direction)1> > >&) const in libheffte.a(heffte_fft3d.cpp.o) void heffte::fftw_executor_r2c::make_plan<float, (heffte::direction)0>(std::1::unique_ptr<heffte::plan_fftw<float, (heffte::direction)0>, std::1::default_delete<heffte::plan_fftw<float, (heffte::direction)0> > >&) const in libheffte.a(heffte_fft3d.cpp.o) void heffte::fftw_executor_r2c::make_plan<float, (heffte::direction)1>(std::1::unique_ptr<heffte::plan_fftw<float, (heffte::direction)1>, std::__1::default_delete<heffte::plan_fftw<float, (heffte::direction)1> > >&) const in libheffte.a(heffte_fft3d.cpp.o) heffte::fftw_executor::~fftw_executor() in libheffte.a(heffte_fft3d.cpp.o) heffte::fftw_executor_r2c::~fftw_executor_r2c() in libheffte.a(heffte_fft3d.cpp.o) ... "_fftwf_execute_dft", referenced from: void heffte::fft3d<heffte::backend::fftw, int>::standard_transform(float const*, std::1::complex, std::__1::complex, std::1::array<std::1::unique_ptr<heffte::reshape3d_base, std::1::default_delete<heffte::reshape3d_base > >, 4ul> const&, std::1::array<heffte::fftw_executor, 3ul>, heffte::direction, heffte::scale) const in libheffte.a(heffte_fft3d.cpp.o) void heffte::fft3d<heffte::backend::fftw, int>::standard_transform(std::__1::complex const, float, std::__1::complex, std::1::array<std::1::unique_ptr<heffte::reshape3d_base, std::1::default_delete<heffte::reshape3d_base > >, 4ul> const&, std::1::array<heffte::fftw_executor, 3ul>, heffte::direction, heffte::scale) const in libheffte.a(heffte_fft3d.cpp.o) void heffte::fft3d<heffte::backend::fftw, int>::standard_transform<std::1::complex >(std::1::complex const, std::1::complex*, std::1::complex, std::1::array<std::1::unique_ptr<heffte::reshape3d_base, std::1::default_delete<heffte::reshape3d_base > >, 4ul> const&, std::1::array<heffte::fftw_executor, 3ul>, heffte::direction, heffte::scale) const in libheffte.a(heffte_fft3d.cpp.o) void heffte::fft3d<heffte::backend::fftw, long long>::standard_transform(float const, std::__1::complex, std::1::complex*, std::1::array<std::1::unique_ptr<heffte::reshape3d_base, std::1::default_delete<heffte::reshape3d_base > >, 4ul> const&, std::1::array<heffte::fftw_executor, 3ul>, heffte::direction, heffte::scale) const in libheffte.a(heffte_fft3d.cpp.o) void heffte::fft3d<heffte::backend::fftw, long long>::standard_transform(std::__1::complex const, float, std::__1::complex, std::1::array<std::1::unique_ptr<heffte::reshape3d_base, std::1::default_delete<heffte::reshape3d_base > >, 4ul> const&, std::1::array<heffte::fftw_executor*, 3ul>, heffte::direction, heffte::scale) const in libheffte.a(heffte_fft3d.cpp.o) void heffte::fft3d<heffte::backend::fftw, long long>::standard_transform<std::1::complex >(std::1::complex const*, std::1::complex, std::__1::complex, std::1::array<std::1::unique_ptr<heffte::reshape3d_base, std::1::default_delete<heffte::reshape3d_base > >, 4ul> const&, std::1::array<heffte::fftw_executor, 3ul>, heffte::direction, heffte::scale) const in libheffte.a(heffte_fft3d.cpp.o) "_fftwf_execute_dft_c2r", referenced from: void heffte::real2real_executor<heffte::backend::fftw, heffte::cpu_cos_pre_pos_processor>::backward(float, float) const in libheffte.a(heffte_fft3d.cpp.o) void heffte::real2real_executor<heffte::backend::fftw, heffte::cpu_sin_pre_pos_processor>::backward(float, float) const in libheffte.a(heffte_fft3d.cpp.o) "_fftwf_execute_dft_r2c", referenced from: void heffte::real2real_executor<heffte::backend::fftw, heffte::cpu_cos_pre_pos_processor>::forward(float, float) const in libheffte.a(heffte_fft3d.cpp.o) void heffte::real2real_executor<heffte::backend::fftw, heffte::cpu_sin_pre_pos_processor>::forward(float, float*) const in libheffte.a(heffte_fft3d.cpp.o) "_fftwf_plan_many_dft", referenced from: void heffte::fftw_executor::make_plan<std::1::complex, (heffte::direction)0>(std::1::unique_ptr<heffte::plan_fftw<std::1::complex, (heffte::direction)0>, std::1::default_delete<heffte::plan_fftw<std::1::complex, (heffte::direction)0> > >&) const in libheffte.a(heffte_fft3d.cpp.o) void heffte::fftw_executor::make_plan<std::1::complex, (heffte::direction)1>(std::1::unique_ptr<heffte::plan_fftw<std::1::complex, (heffte::direction)1>, std::1::default_delete<heffte::plan_fftw<std::__1::complex, (heffte::direction)1> > >&) const in libheffte.a(heffte_fft3d.cpp.o) "_fftwf_plan_many_dft_c2r", referenced from: void heffte::fftw_executor_r2c::make_plan<float, (heffte::direction)1>(std::1::unique_ptr<heffte::plan_fftw<float, (heffte::direction)1>, std::__1::default_delete<heffte::plan_fftw<float, (heffte::direction)1> > >&) const in libheffte.a(heffte_fft3d.cpp.o) "_fftwf_plan_many_dft_r2c", referenced from: void heffte::fftw_executor_r2c::make_plan<float, (heffte::direction)0>(std::1::unique_ptr<heffte::plan_fftw<float, (heffte::direction)0>, std::1::default_delete<heffte::plan_fftw<float, (heffte::direction)0> > >&) const in libheffte.a(heffte_fft3d.cpp.o) ld: symbol(s) not found for architecture arm64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make[2]: [benchmarks/speed3d_c2c] Error 1 make[1]: [benchmarks/CMakeFiles/speed3d_c2c.dir/all] Error 2 make: *** [all] Error 2

however I get an linker error on my mac:

Consolidate compiler generated dependencies of target Heffte [ 15%] Built target Heffte Consolidate compiler generated dependencies of target speed3d_c2c [ 17%] Linking CXX executable speed3d_c2c Undefined symbols for architecture arm64: "_fftwf_destroy_plan", referenced from: heffte::fftw_executor::~fftw_executor() in speed3d_c2c.cpp.o void heffte::fftw_executor::make_plan<std::1::complex, (heffte::direction)0>(std::1::unique_ptr<heffte::plan_fftw<std::1::complex, (heffte::direction)0>, std::1::default_delete<heffte::plan_fftw<std::1::complex, (heffte::direction)0> > >&) const in libheffte.a(heffte_fft3d.cpp.o) void heffte::fftw_executor::make_plan<std::1::complex, (heffte::direction)1>(std::1::unique_ptr<heffte::plan_fftw<std::1::complex, (heffte::direction)1>, std::1::default_delete<heffte::plan_fftw<std::1::complex, (heffte::direction)1> > >&) const in libheffte.a(heffte_fft3d.cpp.o) void heffte::fftw_executor_r2c::make_plan<float, (heffte::direction)0>(std::1::unique_ptr<heffte::plan_fftw<float, (heffte::direction)0>, std::1::default_delete<heffte::plan_fftw<float, (heffte::direction)0> > >&) const in libheffte.a(heffte_fft3d.cpp.o) void heffte::fftw_executor_r2c::make_plan<float, (heffte::direction)1>(std::1::unique_ptr<heffte::plan_fftw<float, (heffte::direction)1>, std::__1::default_delete<heffte::plan_fftw<float, (heffte::direction)1> > >&) const in libheffte.a(heffte_fft3d.cpp.o) heffte::fftw_executor::~fftw_executor() in libheffte.a(heffte_fft3d.cpp.o) heffte::fftw_executor_r2c::~fftw_executor_r2c() in libheffte.a(heffte_fft3d.cpp.o) ... "_fftwf_execute_dft", referenced from: void heffte::fft3d<heffte::backend::fftw, int>::standard_transform(float const*, std::1::complex, std::__1::complex, std::1::array<std::1::unique_ptr<heffte::reshape3d_base, std::1::default_delete<heffte::reshape3d_base > >, 4ul> const&, std::1::array<heffte::fftw_executor, 3ul>, heffte::direction, heffte::scale) const in libheffte.a(heffte_fft3d.cpp.o) void heffte::fft3d<heffte::backend::fftw, int>::standard_transform(std::__1::complex const, float, std::__1::complex, std::1::array<std::1::unique_ptr<heffte::reshape3d_base, std::1::default_delete<heffte::reshape3d_base > >, 4ul> const&, std::1::array<heffte::fftw_executor, 3ul>, heffte::direction, heffte::scale) const in libheffte.a(heffte_fft3d.cpp.o) void heffte::fft3d<heffte::backend::fftw, int>::standard_transform<std::1::complex >(std::1::complex const, std::1::complex*, std::1::complex, std::1::array<std::1::unique_ptr<heffte::reshape3d_base, std::1::default_delete<heffte::reshape3d_base > >, 4ul> const&, std::1::array<heffte::fftw_executor, 3ul>, heffte::direction, heffte::scale) const in libheffte.a(heffte_fft3d.cpp.o) void heffte::fft3d<heffte::backend::fftw, long long>::standard_transform(float const, std::__1::complex, std::1::complex*, std::1::array<std::1::unique_ptr<heffte::reshape3d_base, std::1::default_delete<heffte::reshape3d_base > >, 4ul> const&, std::1::array<heffte::fftw_executor, 3ul>, heffte::direction, heffte::scale) const in libheffte.a(heffte_fft3d.cpp.o) void heffte::fft3d<heffte::backend::fftw, long long>::standard_transform(std::__1::complex const, float, std::__1::complex, std::1::array<std::1::unique_ptr<heffte::reshape3d_base, std::1::default_delete<heffte::reshape3d_base > >, 4ul> const&, std::1::array<heffte::fftw_executor*, 3ul>, heffte::direction, heffte::scale) const in libheffte.a(heffte_fft3d.cpp.o) void heffte::fft3d<heffte::backend::fftw, long long>::standard_transform<std::1::complex >(std::1::complex const*, std::1::complex, std::__1::complex, std::1::array<std::1::unique_ptr<heffte::reshape3d_base, std::1::default_delete<heffte::reshape3d_base > >, 4ul> const&, std::1::array<heffte::fftw_executor, 3ul>, heffte::direction, heffte::scale) const in libheffte.a(heffte_fft3d.cpp.o) "_fftwf_execute_dft_c2r", referenced from: void heffte::real2real_executor<heffte::backend::fftw, heffte::cpu_cos_pre_pos_processor>::backward(float, float) const in libheffte.a(heffte_fft3d.cpp.o) void heffte::real2real_executor<heffte::backend::fftw, heffte::cpu_sin_pre_pos_processor>::backward(float, float) const in libheffte.a(heffte_fft3d.cpp.o) "_fftwf_execute_dft_r2c", referenced from: void heffte::real2real_executor<heffte::backend::fftw, heffte::cpu_cos_pre_pos_processor>::forward(float, float) const in libheffte.a(heffte_fft3d.cpp.o) void heffte::real2real_executor<heffte::backend::fftw, heffte::cpu_sin_pre_pos_processor>::forward(float, float*) const in libheffte.a(heffte_fft3d.cpp.o) "_fftwf_plan_many_dft", referenced from: void heffte::fftw_executor::make_plan<std::1::complex, (heffte::direction)0>(std::1::unique_ptr<heffte::plan_fftw<std::1::complex, (heffte::direction)0>, std::1::default_delete<heffte::plan_fftw<std::1::complex, (heffte::direction)0> > >&) const in libheffte.a(heffte_fft3d.cpp.o) void heffte::fftw_executor::make_plan<std::1::complex, (heffte::direction)1>(std::1::unique_ptr<heffte::plan_fftw<std::1::complex, (heffte::direction)1>, std::1::default_delete<heffte::plan_fftw<std::__1::complex, (heffte::direction)1> > >&) const in libheffte.a(heffte_fft3d.cpp.o) "_fftwf_plan_many_dft_c2r", referenced from: void heffte::fftw_executor_r2c::make_plan<float, (heffte::direction)1>(std::1::unique_ptr<heffte::plan_fftw<float, (heffte::direction)1>, std::__1::default_delete<heffte::plan_fftw<float, (heffte::direction)1> > >&) const in libheffte.a(heffte_fft3d.cpp.o) "_fftwf_plan_many_dft_r2c", referenced from: void heffte::fftw_executor_r2c::make_plan<float, (heffte::direction)0>(std::1::unique_ptr<heffte::plan_fftw<float, (heffte::direction)0>, std::1::default_delete<heffte::plan_fftw<float, (heffte::direction)0> > >&) const in libheffte.a(heffte_fft3d.cpp.o) ld: symbol(s) not found for architecture arm64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make[2]: [benchmarks/speed3d_c2c] Error 1 make[1]: [benchmarks/CMakeFiles/speed3d_c2c.dir/all] Error 2 make: *** [all] Error 2 ./600-build-heffte: error in setting everything up!

mkstoyanov commented 1 year ago

You have to build fftw twice, once with single and once with double precision.

heFFTe is a C++ library and uses template to deduce the precision on compile time. FFTW is a C library and even though they have different names for the single and double precision methods (just an added f) and could build both precisions, their build system builds only one precision at a time.

You need to build FFTW twice, once with single and once with double precision and you will get two libraries, libfftw3 and libfftwf3 and heFFTe will link against both.

DoE facilities already do that across the board (e.g., OLCF Summit or Frontier), Linux distributions (e.g., Ubuntu) also do that if you install libfftw3. The issue comes only if you build from source.

aaadelmann commented 1 year ago

Hi Miro indeed that solved the problem. Thanks and Cheers A

Dr. sc. math. Andreas (Andy) Adelmann Head a.i. Labor for Scientific Computing and Modelling Paul Scherrer Institut OHSA/D09 CH-5232 Villigen PSI Phone Office: xx41 56 310 42 33 Fax: xx41 56 310 31 91 Zoom ID: 470-582-4086 Password: AdA Zoom Link: https://ethz.zoom.us/j/4705824086?pwd=dFcvT1pMMGY0bHg0dTNncUNZZTJkZz09


Friday: ETH HPK G 28 +41 44 633 3076

The more exotic, the more abstract the knowledge, the more profound will be its consequences. Leon Lederman

On 12 Mar 2023, at 17:50, Miroslav Stoyanov @.***> wrote:

You have to build fftw twice, once with single and once with double precision.

heFFTe is a C++ library and uses template to deduce the precision on compile time. FFTW is a C library and even though they have different names for the single and double precision methods (just an added f) and could build both precisions, their build system builds only one precision at a time.

You need to build FFTW twice, once with single and once with double precision and you will get two libraries, libfftw3 and libfftwf3 and heFFTe will link against both.

DoE facilities already do that across the board (e.g., OLCF Summit or Frontier), Linux distributions (e.g., Ubuntu) also do that if you install libfftw3. The issue comes only if you build from source.

— Reply to this email directly, view it on GitHubhttps://github.com/icl-utk-edu/heffte/issues/8#issuecomment-1465246182, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AC2WFI35GVIOXP2YH4ZE5ZDW3YEIDANCNFSM6AAAAAAVYGXGCM. You are receiving this because you authored the thread.Message ID: @.***>