Skip to content

Commit

Permalink
Adding install capability (issue with Finding Kokkos)
Browse files Browse the repository at this point in the history
Yuuichi Asahi committed Jan 9, 2024
1 parent 3800bc2 commit b081074
Showing 6 changed files with 107 additions and 4 deletions.
41 changes: 39 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -7,9 +7,10 @@ list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_SOURCE_DIR}/cmake")
# Options
option(BUILD_EXAMPLES "Build kokkos-fft examples" ON)
option(KokkosFFT_ENABLE_HOST_AND_DEVICE "Enable fft on both host and device" OFF)
option(KokkosFFT_ENABLE_INSTALL_TEST "Enable install test" ON)

find_package(Kokkos CONFIG)
if(NOT kokkos_FOUND)
if(NOT Kokkos_FOUND)
add_subdirectory(tpls/kokkos)
endif()

@@ -22,8 +23,44 @@ if(BUILD_TESTING)
endif()
endif()

# Set directories used for install
include(GNUInstallDirs)
set(INSTALL_INCLUDEDIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR})
set(INSTALL_LIBDIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR})

add_subdirectory(common)
add_subdirectory(fft)
if(BUILD_EXAMPLES)
add_subdirectory(examples)
endif()
endif()

# Installation
install(
TARGETS common fft
EXPORT KokkosFFT-targets
)

install(
EXPORT KokkosFFT-targets
DESTINATION ${INSTALL_INCLUDEDIR}
)

install(
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/common/
DESTINATION ${INSTALL_INCLUDEDIR}
)

install(
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/fft/
DESTINATION ${INSTALL_INCLUDEDIR}
)

configure_package_config_file(cmake/KokkosFFTConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/KokkosFFTConfig.cmake
INSTALL_DESTINATION ${INSTALL_INCLUDEDIR}
)

install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/KokkosFFTConfig.cmake
DESTINATION ${INSTALL_INCLUDEDIR}
)
8 changes: 8 additions & 0 deletions cmake/KokkosFFTConfig.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
@PACKAGE_INIT@

include(CMakeFindDependencyMacro)
find_dependency(Kokkos)

include(${CMAKE_CURRENT_LIST_DIR}/KokkosFFT-targets.cmake)

check_required_components(KokkosFFT)
5 changes: 4 additions & 1 deletion common/src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -30,4 +30,7 @@ elseif(Kokkos_ENABLE_SERIAL)
endif()

target_compile_features(common INTERFACE cxx_std_17)
target_include_directories(common INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
target_include_directories(common INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:${INSTALL_INCLUDEDIR}>
)
5 changes: 4 additions & 1 deletion fft/src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -6,5 +6,8 @@ target_link_libraries(fft
Kokkos::kokkos
)

target_include_directories(fft INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
target_include_directories(fft INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:${INSTALL_INCLUDEDIR}>
)
add_library(Kokkos::fft ALIAS fft)
8 changes: 8 additions & 0 deletions install_test/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 3.21)
project(install-test LANGUAGES CXX)

find_package(KokkosFFT CONFIG REQUIRED)

add_executable(install-test main.cpp)
target_compile_features(install-test PUBLIC cxx_std_17)
target_link_libraries(install-test PUBLIC Kokkos::fft)
44 changes: 44 additions & 0 deletions install_test/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#include <Kokkos_Core.hpp>
#include <Kokkos_Complex.hpp>
#include <Kokkos_Random.hpp>
#include <KokkosFFT.hpp>

using execution_space = Kokkos::DefaultExecutionSpace;
template <typename T>
using View1D = Kokkos::View<T*, execution_space>;

int main(int argc, char* argv[]) {
Kokkos::initialize(argc, argv);
{
constexpr int n0 = 128;
const Kokkos::complex<double> I(1.0, 1.0);

// 1D C2C FFT (Forward and Backward)
View1D<Kokkos::complex<double> > xc2c("xc2c", n0);
View1D<Kokkos::complex<double> > xc2c_hat("xc2c_hat", n0);
View1D<Kokkos::complex<double> > xc2c_inv("xc2c_inv", n0);

Kokkos::Random_XorShift64_Pool<> random_pool(12345);
Kokkos::fill_random(xc2c, random_pool, I);

KokkosFFT::fft(execution_space(), xc2c, xc2c_hat);
KokkosFFT::ifft(execution_space(), xc2c_hat, xc2c_inv);

// 1D R2C FFT
View1D<double> xr2c("xr2c", n0);
View1D<Kokkos::complex<double> > xr2c_hat("xr2c_hat", n0 / 2 + 1);
Kokkos::fill_random(xr2c, random_pool, 1);

KokkosFFT::rfft(execution_space(), xr2c, xr2c_hat);

// 1D C2R FFT
View1D<Kokkos::complex<double> > xc2r("xr2c_hat", n0 / 2 + 1);
View1D<double> xc2r_hat("xc2r", n0);
Kokkos::fill_random(xc2r, random_pool, I);

KokkosFFT::irfft(execution_space(), xc2r, xc2r_hat);
}
Kokkos::finalize();

return 0;
}

0 comments on commit b081074

Please sign in to comment.