Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

- add fft #4928

Merged
merged 8 commits into from
Apr 12, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions recipes/fft/all/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
cmake_minimum_required(VERSION 3.2)

project(fft LANGUAGES C)

include(conanbuildinfo.cmake)
conan_basic_setup()

option(THREADS "use threads")

set(SOURCES "fft_build.c")
set(HEADERS "fft.h;fft2.h;fft3.h;dct.h;${CMAKE_CURRENT_BINARY_DIR}/fft_export.h")

add_library(${PROJECT_NAME} ${SOURCES} ${HEADERS})

set_target_properties(${PROJECT_NAME} PROPERTIES
PUBLIC_HEADER "${HEADERS}"
C_VISIBILITY_PRESET hidden)
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_BINARY_DIR})

if(THREADS)
find_package(Threads REQUIRED)
if(WIN32)
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_CDFT_WINTHREADS)
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_FFT2D_WINTHREADS)
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_FFT3D_WINTHREADS)
else()
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_CDFT_PTHREADS)
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_FFT2D_PTHREADS)
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_FFT3D_PTHREADS)
endif()
target_compile_definitions(${PROJECT_NAME} PRIVATE CDFT_THREADS_BEGIN_N ${THREADS_BEGIN_WITH})
target_compile_definitions(${PROJECT_NAME} PRIVATE CDFT_4THREADS_BEGIN_N ${THREADS_BEGIN_WITH})
target_compile_definitions(${PROJECT_NAME} PRIVATE FFT2D_THREADS_BEGIN_N ${THREADS_BEGIN_WITH})
target_compile_definitions(${PROJECT_NAME} PRIVATE FFT2D_MAX_THREADS ${MAX_THREADS})
target_compile_definitions(${PROJECT_NAME} PRIVATE FFT3D_THREADS_BEGIN_N ${THREADS_BEGIN_WITH})
target_compile_definitions(${PROJECT_NAME} PRIVATE FFT3D_MAX_THREADS ${MAX_THREADS})

target_link_libraries(${PROJECT_NAME} PUBLIC Threads::Threads)
endif()

include(GenerateExportHeader)
generate_export_header(${PROJECT_NAME})

include(GNUInstallDirs)
install(TARGETS ${PROJECT_NAME}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/fft
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
4 changes: 4 additions & 0 deletions recipes/fft/all/conandata.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
sources:
"cci.20061228":
url: "http://www.kurims.kyoto-u.ac.jp/~ooura/fft2d.tgz"
sha256: "ada7e99087c4ed477bfdf11413f2ba8db8a840ba9bbf8ac94f4f3972e2a7cec9"
87 changes: 87 additions & 0 deletions recipes/fft/all/conanfile.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
import os
from conans import ConanFile, CMake, tools
from conans.errors import ConanInvalidConfiguration


class FftConan(ConanFile):
name = "fft"
license = "LicenseRef-LICENSE"
SSE4 marked this conversation as resolved.
Show resolved Hide resolved
url = "https://github.com/conan-io/conan-center-index"
homepage = "http://www.kurims.kyoto-u.ac.jp/~ooura/fft.html"
description = "This is a package to calculate Discrete Fourier/Cosine/Sine Transforms of 2,3-dimensional sequences of length 2^N."
topics = ("conan", "fft", "fft2d", "fft3d", "dct", "dst", "dft")
settings = "os", "arch", "compiler", "build_type"
options = {"shared": [True, False],
"fPIC": [True, False],
"threads": [True, False],
"max_threads": "ANY",
"threads_begin_n": "ANY"}
default_options = {"shared": False,
"fPIC": True,
"threads": False,
"max_threads": 4,
"threads_begin_n": 65536}
exports_sources = ["CMakeLists.txt", "fft_build.c", "fft.h", "fft2.h", "fft3.h", "dct.h"]
generators = "cmake",

@property
def _build_subfolder(self):
return "_build_subfolder"

def source(self):
tools.get(**self.conan_data["sources"][self.version], strip_root=True)

def config_options(self):
if self.settings.os == "Windows":
del self.options.fPIC

def configure(self):
SSE4 marked this conversation as resolved.
Show resolved Hide resolved
if self.options.shared:
del self.options.fPIC
if not self.options.threads:
del self.options.max_threads
del self.options.threads_begin_n
del self.settings.compiler.libcxx
del self.settings.compiler.cppstd

def validate(self):
def _is_power_of_two(n):
return (n != 0) and (n & (n-1) == 0)

if self.options.threads:
if not self.options.max_threads.value.isdigit():
raise ConanInvalidConfiguration("max_threads must be an integer")
if not self.options.threads_begin_n.value.isdigit():
raise ConanInvalidConfiguration("threads_begin_n must be an integer")
if not _is_power_of_two(int(self.options.max_threads.value)):
raise ConanInvalidConfiguration("max_threads must be a power of 2")

def _configure_cmake(self):
cmake = CMake(self)
cmake.definitions["THREADS"] = self.options.threads
if self.options.threads:
cmake.definitions["MAX_THREADS"] = self.options.max_threads
cmake.definitions["THREADS_BEGIN_N"] = self.options.threads_begin_n
cmake.configure(build_folder=self._build_subfolder)
return cmake

def build(self):
cmake = self._configure_cmake()
cmake.build()

def package(self):
tools.save(os.path.join(self.package_folder, "licenses", "LICENSE"),
"""Copyright
Copyright(C) 1997,2001 Takuya OOURA (email: ooura@kurims.kyoto-u.ac.jp).
You may use, copy, modify this code for any purpose and
without fee. You may distribute this ORIGINAL package.""")
cmake = self._configure_cmake()
cmake.install()

def package_info(self):
self.cpp_info.libs = ["fft"]
if self.settings.os in ["Linux", "FreeBSD"]:
if self.options.threads:
self.cpp_info.system_libs.append("pthread")
if self.settings.os == "Linux":
self.cpp_info.system_libs.append("m")
19 changes: 19 additions & 0 deletions recipes/fft/all/dct.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#pragma once

#ifndef __FFT_DCT_H_AC3FBB1E_47B8_49E2_8271_1E44DAB78490__
#define __FFT_DCT_H_AC3FBB1E_47B8_49E2_8271_1E44DAB78490__

#include "fft_export.h"

#ifdef __cplusplus
extern "C" {
#endif

FFT_EXPORT void ddct8x8s(int isgn, double **a);
FFT_EXPORT void ddct16x16s(int isgn, double **a);

#ifdef __cplusplus
}
#endif

#endif /* __FFT_DCT_H_AC3FBB1E_47B8_49E2_8271_1E44DAB78490__ */
23 changes: 23 additions & 0 deletions recipes/fft/all/fft.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#pragma once

#ifndef __FFT_FFT_H_796A834A_D06E_4C88_A15C_E611857B108F__
#define __FFT_FFT_H_796A834A_D06E_4C88_A15C_E611857B108F__

#include "fft_export.h"

#ifdef __cplusplus
extern "C" {
#endif

FFT_EXPORT void cdft(int, int, double *, int *, double *);
FFT_EXPORT void rdft(int, int, double *, int *, double *);
FFT_EXPORT void ddct(int, int, double *, int *, double *);
FFT_EXPORT void ddst(int, int, double *, int *, double *);
FFT_EXPORT void dfct(int, double *, double *, int *, double *);
FFT_EXPORT void dfst(int, double *, double *, int *, double *);

#ifdef __cplusplus
}
#endif

#endif /* __FFT_FFT_H_796A834A_D06E_4C88_A15C_E611857B108F__ */
22 changes: 22 additions & 0 deletions recipes/fft/all/fft2.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#pragma once

#ifndef __FFT_FFT2_H_F6EDD639_4BBB_4536_9F32_C7DFEC1608A3__
#define __FFT_FFT2_H_F6EDD639_4BBB_4536_9F32_C7DFEC1608A3__

#include "fft_export.h"

#ifdef __cplusplus
extern "C" {
#endif

FFT_EXPORT void cdft2d(int, int, int, double **, double *, int *, double *);
FFT_EXPORT void rdft2d(int, int, int, double **, double *, int *, double *);
FFT_EXPORT void rdft2dsort(int, int, int, double **);
FFT_EXPORT void ddct2d(int, int, int, double **, double *, int *, double *);
FFT_EXPORT void ddst2d(int, int, int, double **, double *, int *, double *);

#ifdef __cplusplus
}
#endif

#endif /* __FFT_FFT2_H_F6EDD639_4BBB_4536_9F32_C7DFEC1608A3__ */
22 changes: 22 additions & 0 deletions recipes/fft/all/fft3.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#pragma once

#ifndef __FFT_FFT3_H_F55B14B4_B254_4440_B623_B689DEFA3E0D__
#define __FFT_FFT3_H_F55B14B4_B254_4440_B623_B689DEFA3E0D__

#include "fft_export.h"

#ifdef __cplusplus
extern "C" {
#endif

FFT_EXPORT void cdft3d(int, int, int, int, double ***, double *, int *, double *);
FFT_EXPORT void rdft3d(int, int, int, int, double ***, double *, int *, double *);
FFT_EXPORT void rdft3dsort(int, int, int, int, double ***);
FFT_EXPORT void ddct3d(int, int, int, int, double ***, double *, int *, double *);
FFT_EXPORT void ddst3d(int, int, int, int, double ***, double *, int *, double *);

#ifdef __cplusplus
}
#endif

#endif /* __FFT_FFT3_H_F55B14B4_B254_4440_B623_B689DEFA3E0D__ */
19 changes: 19 additions & 0 deletions recipes/fft/all/fft_build.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/* 2D-array Allocation */
#include "alloc.h"
#include "alloc.c"

/* 1D FFT Package in C - Fast Version (Split-Radix) */
#include "fft.h"
#include "fftsg.c"

/* 2D FFT Package in C - Version II (Split-Radix) */
#include "fft2.h"
#include "fftsg2d.c"

/* fftsg3d.c : 3D FFT Package in C - Version II (Split-Radix) */
#include "fft3.h"
#include "fftsg3d.c"

/* 8x8, 16x16 DCT Package */
#include "dct.h"
#include "shrtdct.c"
12 changes: 12 additions & 0 deletions recipes/fft/all/test_package/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
cmake_minimum_required(VERSION 3.1)
project(test_package LANGUAGES C)

include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()

if(MSVC)
add_definitions("-D_CRT_SECURE_NO_WARNINGS=1")
endif()

add_executable(${PROJECT_NAME} test_package.c)
target_link_libraries(${PROJECT_NAME} ${CONAN_LIBS})
16 changes: 16 additions & 0 deletions recipes/fft/all/test_package/conanfile.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
from conans import ConanFile, CMake, tools
import os


class TestPackageConan(ConanFile):
settings = "os", "compiler", "build_type", "arch"
generators = "cmake", "cmake_find_package"

def build(self):
cmake = CMake(self)
cmake.configure()
cmake.build()

def test(self):
if not tools.cross_building(self.settings):
self.run(os.path.join("bin", "test_package"), run_environment=True)
26 changes: 26 additions & 0 deletions recipes/fft/all/test_package/test_package.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fft/fft.h>
#include <fft/fft2.h>

#define N 2

int main()
{
double A1[N];
double A2[N];
double * A[N] = {A1, A2};
double B[N];
int ip[N * 2];

memset(A1, 0, sizeof(double) * N);
memset(A2, 0, sizeof(double) * N);
memset(B, 0, sizeof(double) * N);
memset(ip, 0, sizeof(int) * N * 2);

cdft2d(N, N, 1, A, NULL, ip, B);

return EXIT_SUCCESS;
}
3 changes: 3 additions & 0 deletions recipes/fft/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
versions:
"cci.20061228":
folder: "all"