Skip to content

Commit

Permalink
added ArmPL support
Browse files Browse the repository at this point in the history
  • Loading branch information
AdhocMan committed Sep 16, 2021
1 parent 709dcf1 commit 4f28dcd
Show file tree
Hide file tree
Showing 4 changed files with 118 additions and 3 deletions.
18 changes: 16 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ set_property(CACHE SPFFT_GPU_BACKEND PROPERTY STRINGS

set(SPFFT_FFTW_LIB "AUTO" CACHE STRING "Library providing a FFTW interface")
set_property(CACHE SPFFT_FFTW_LIB PROPERTY STRINGS
"AUTO" "FFTW" "MKL"
"AUTO" "FFTW" "MKL" "ARMPL"
)

# Get GNU standard install prefixes
Expand Down Expand Up @@ -159,6 +159,9 @@ if(NOT ${SPFFT_FFTW_LIB} STREQUAL "AUTO")
endif()

set(SPFFT_MKL OFF)
set(SPFFT_ARMPL OFF)
set(SPFFT_FFTW OFF)

# Look for MKL first
if(${SPFFT_FFTW_LIB} STREQUAL "AUTO" OR ${SPFFT_FFTW_LIB} STREQUAL "MKL")
# Use MKL if available, otherwise require FFTW3
Expand All @@ -180,15 +183,26 @@ if(${SPFFT_FFTW_LIB} STREQUAL "AUTO" OR ${SPFFT_FFTW_LIB} STREQUAL "MKL")
endif()
endif()


# Look for ARM PL
if(NOT SPFFT_MKL AND ${SPFFT_FFTW_LIB} STREQUAL "AUTO" OR ${SPFFT_FFTW_LIB} STREQUAL "ARMPL")
find_package(ARMPL ${_SPFFT_FIND_FFTW_LIB_OPTION})
if(TARGET ARM::pl)
list(APPEND SPFFT_EXTERNAL_LIBS ARM::pl)
set(SPFFT_ARMPL ON)
endif()
endif()

# Look for FFTW library if required
if(NOT TARGET MKL::Sequential)
if(NOT SPFFT_MKL AND NOT SPFFT_ARMPL)
find_package(FFTW REQUIRED)
list(APPEND SPFFT_EXTERNAL_LIBS FFTW::FFTW)
if(SPFFT_SINGLE_PRECISION)
find_package(FFTWF REQUIRED)
list(APPEND SPFFT_EXTERNAL_LIBS FFTWF::FFTWF)
endif()
list(APPEND SPFFT_EXTERNAL_PKG_PACKAGES fftw3)
set(SPFFT_FFTW ON)
endif()


Expand Down
2 changes: 2 additions & 0 deletions cmake/SpFFTSharedConfig.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ set(SPFFT_GPU_BACKEND @SPFFT_GPU_BACKEND@)
set(SPFFT_CUDA @SPFFT_CUDA@)
set(SPFFT_ROCM @SPFFT_ROCM@)
set(SPFFT_MKL @SPFFT_MKL@)
set(SPFFT_ARMPL @SPFFT_ARMPL@)
set(SPFFT_FFTW @SPFFT_FFTW@)


# add version of package
Expand Down
8 changes: 7 additions & 1 deletion cmake/SpFFTStaticConfig.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ set(SPFFT_GPU_BACKEND @SPFFT_GPU_BACKEND@)
set(SPFFT_CUDA @SPFFT_CUDA@)
set(SPFFT_ROCM @SPFFT_ROCM@)
set(SPFFT_MKL @SPFFT_MKL@)
set(SPFFT_ARMPL @SPFFT_ARMPL@)
set(SPFFT_FFTW @SPFFT_FFTW@)

# make sure CXX is enabled
get_property(_LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES)
Expand All @@ -31,7 +33,11 @@ set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/modules")

if(SPFFT_MKL)
find_dependency(MKLSequential)
else()
endif()
if(SPFFT_ARMPL)
find_dependency(ARMPL)
endif()
if(SPFFT_FFTW)
find_dependency(FFTW)
endif()

Expand Down
93 changes: 93 additions & 0 deletions cmake/modules/FindARMPL.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# Copyright (c) 2019 ETH Zurich, Simon Frasch
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. Neither the name of the copyright holder nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.


#.rst:
# FindARMPL
# -----------
#
# This module searches for the sequential 32-bit integer ARM library.
#
#
# The following variables are set
#
# ::
#
# ARMPL_FOUND - True if double precision fftw library is found
# ARMPL_LIBRARIES - The required libraries
# ARMPL_INCLUDE_DIRS - The required include directory
#
# The following import target is created
#
# ::
#
# ARM::pl

# set paths to look for ARM
set(_ARMPL_PATHS ${ARMPL_ROOT} $ENV{MKLROOT})

set(_ARMPL_DEFAULT_PATH_SWITCH)

if(_ARMPL_PATHS)
# do not look at any default paths if a custom path was set
set(_ARMPL_DEFAULT_PATH_SWITCH NO_DEFAULT_PATH)
else()
set(_ARMPL_PATHS /opt/arm)
endif()


# find all ARM libraries / include directories
find_library(
ARMPL_LIBRARIES
NAMES "armpl_lp64"
HINTS ${_ARMPL_PATHS}
PATH_SUFFIXES "lib" "lib64"
${_ARMPL_DEFAULT_PATH_SWITCH}
)
find_path(ARMPL_INCLUDE_DIRS
NAMES "fftw3.h"
HINTS ${_ARMPL_PATHS}
PATH_SUFFIXES "include" "include/fftw" "fftw"
${_ARMPL_DEFAULT_PATH_SWITCH}
)

# check if found
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(ARMPL REQUIRED_VARS ARMPL_LIBRARIES ARMPL_INCLUDE_DIRS)

# add target to link against
if(ARMPL_FOUND)
# create interface target
if(NOT TARGET ARM::pl)
add_library(ARM::pl INTERFACE IMPORTED)
endif()
set_property(TARGET ARM::pl PROPERTY INTERFACE_LINK_LIBRARIES ${ARMPL_LIBRARIES})
set_property(TARGET ARM::pl PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${ARMPL_INCLUDE_DIRS})
endif()

# prevent clutter in gui
MARK_AS_ADVANCED(REQUIRED_VARS ARMPL_LIBRARIES ARMPL_INCLUDE_DIRS)

0 comments on commit 4f28dcd

Please sign in to comment.