-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Add wavelet_buffer v0.4.0 * Fix for linter * Fix for linter * Fix for linter * Fix fPic * Fix fPic * Fix import * Fix compiler version check * Fix for conan hook * Bump compilers version * Black reformat * Remove build_type set * Move CmakeDeps * Add can_run() * Add test_v1_package * Refactor requirements set * Change msvc compiler version * Change default options * Remove unnecessary deletions * Refactor and fix test_package * Exclude shared linking * Remove rm import * Fix url attribute * Change compiler check shared exclusion * Fix fPIC deletion * Add more validation for cimg options * Fixes for cpp_info, compiler versions, etc
- Loading branch information
1 parent
b702bf3
commit a076f03
Showing
8 changed files
with
295 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
sources: | ||
"0.4.0": | ||
url: "https://github.com/panda-official/WaveletBuffer/archive/refs/tags/v0.4.0.tar.gz" | ||
sha256: "0a30080a6d1e9e7f8947ae0c3395d3c86888900c7ae09730f8dd0ed5138daab2" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,177 @@ | ||
from conan import ConanFile | ||
from conan.tools.cmake import CMakeToolchain, CMakeDeps, CMake, cmake_layout | ||
from conan.tools.files import get, copy, rmdir | ||
from conan.tools.microsoft import check_min_vs, is_msvc | ||
from conan.tools.build import check_min_cppstd | ||
from conan.tools.scm import Version | ||
from conan.errors import ConanInvalidConfiguration | ||
|
||
import os | ||
|
||
required_conan_version = ">=1.50" | ||
|
||
|
||
class WaveletBufferConan(ConanFile): | ||
name = "wavelet_buffer" | ||
license = "MPL-2.0" | ||
description = "An universal C++ compression library based on wavelet transformation" | ||
topics = ("compression", "signal-processing", "wavelet") | ||
homepage = "https://github.com/panda-official/WaveletBuffer" | ||
url = "https://github.com/conan-io/conan-center-index" | ||
default_options = { | ||
"cimg/*:enable_fftw": False, | ||
"cimg/*:enable_jpeg": False, | ||
"cimg/*:enable_openexr": False, | ||
"cimg/*:enable_png": False, | ||
"cimg/*:enable_tiff": False, | ||
"cimg/*:enable_ffmpeg": False, | ||
"cimg/*:enable_opencv": False, | ||
"shared": False, | ||
"fPIC": True, | ||
} | ||
|
||
# Binary configuration | ||
settings = "os", "compiler", "build_type", "arch" | ||
options = {"shared": [True, False], "fPIC": [True, False]} | ||
|
||
def requirements(self): | ||
self.requires("openblas/0.3.20") | ||
self.requires("blaze/3.8") | ||
self.requires("libjpeg-turbo/2.1.2") | ||
self.requires("cimg/3.0.2") | ||
|
||
def config_options(self): | ||
if self.settings.os == "Windows": | ||
del self.options.fPIC | ||
|
||
def configure(self): | ||
if self.options.shared: | ||
try: | ||
del self.options.fPIC | ||
except Exception: | ||
pass | ||
|
||
def source(self): | ||
get( | ||
self, | ||
**self.conan_data["sources"][self.version], | ||
destination=self.source_folder, | ||
strip_root=True, | ||
) | ||
|
||
def layout(self): | ||
cmake_layout(self) | ||
|
||
def generate(self): | ||
tc = CMakeToolchain(self) | ||
tc.variables["CONAN_EXPORTED"] = True | ||
tc.generate() | ||
|
||
tc = CMakeDeps(self) | ||
tc.generate() | ||
|
||
@property | ||
def _minimum_cpp_standard(self): | ||
return 20 | ||
|
||
@property | ||
def _minimum_compilers_version(self): | ||
return { | ||
"gcc": "8", | ||
"clang": "12", | ||
"apple-clang": "12", | ||
} | ||
|
||
def validate(self): | ||
if self.info.settings.compiler.get_safe("cppstd"): | ||
check_min_cppstd(self, self._minimum_cpp_standard) | ||
|
||
# Compiler version check | ||
check_min_vs(self, 192) | ||
if not is_msvc(self): | ||
minimum_version = self._minimum_compilers_version.get( | ||
str(self.info.settings.compiler), False | ||
) | ||
if not minimum_version: | ||
self.output.warn( | ||
"{} recipe lacks information about the {} compiler support.".format( | ||
self.name, self.settings.compiler | ||
) | ||
) | ||
else: | ||
if Version(self.info.settings.compiler.version) < minimum_version: | ||
raise ConanInvalidConfiguration( | ||
"{} requires C++{} support. The current compiler {} {} does not support it.".format( | ||
self.ref, | ||
self._minimum_cpp_standard, | ||
self.settings.compiler, | ||
self.settings.compiler.version, | ||
) | ||
) | ||
|
||
if is_msvc(self) and self.info.options.shared: | ||
raise ConanInvalidConfiguration( | ||
f"{self.ref} can not be built as shared on Visual Studio and msvc." | ||
) | ||
|
||
# Dependency options check | ||
cimg = self.dependencies["cimg"] | ||
if cimg.options.enable_fftw: | ||
raise ConanInvalidConfiguration( | ||
f"{self.ref} requires the option 'cimg:enable_fftw=False'" | ||
) | ||
if cimg.options.enable_jpeg: | ||
raise ConanInvalidConfiguration( | ||
f"{self.ref} requires the option 'cimg:enable_jpeg=False'" | ||
) | ||
if cimg.options.enable_openexr: | ||
raise ConanInvalidConfiguration( | ||
f"{self.ref} requires the option 'cimg:enable_openexr=False'" | ||
) | ||
if cimg.options.enable_tiff: | ||
raise ConanInvalidConfiguration( | ||
f"{self.ref} requires the option 'cimg:enable_tiff=False'" | ||
) | ||
if cimg.options.enable_png: | ||
raise ConanInvalidConfiguration( | ||
f"{self.ref} requires the option 'cimg:enable_png=False'" | ||
) | ||
if cimg.options.enable_ffmpeg: | ||
raise ConanInvalidConfiguration( | ||
f"{self.ref} requires the option 'cimg:enable_ffmpeg=False'" | ||
) | ||
if cimg.options.enable_opencv: | ||
raise ConanInvalidConfiguration( | ||
f"{self.ref} requires the option 'cimg:enable_opencv=False'" | ||
) | ||
|
||
def build(self): | ||
cmake = CMake(self) | ||
cmake.configure() | ||
cmake.build() | ||
|
||
def package(self): | ||
copy( | ||
self, | ||
pattern="LICENSE", | ||
dst=os.path.join(self.package_folder, "licenses"), | ||
src=self.source_folder, | ||
) | ||
|
||
cmake = CMake(self) | ||
cmake.install() | ||
|
||
rmdir(self, os.path.join(self.package_folder, "share")) | ||
|
||
def package_info(self): | ||
self.cpp_info.libs = ["wavelet_buffer", "sf_compressor"] | ||
self.cpp_info.set_property("cmake_file_name", "wavelet_buffer") | ||
self.cpp_info.set_property( | ||
"cmake_target_name", "wavelet_buffer::wavelet_buffer" | ||
) | ||
|
||
# TODO: to remove in conan v2 once cmake_find_package_* generators removed | ||
self.cpp_info.filenames["cmake_find_package"] = "wavelet_buffer" | ||
self.cpp_info.filenames["cmake_find_package_multi"] = "wavelet_buffer" | ||
self.cpp_info.names["cmake_find_package"] = "wavelet_buffer" | ||
self.cpp_info.names["cmake_find_package_multi"] = "wavelet_buffer" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
cmake_minimum_required(VERSION 3.15) | ||
project(WaveletBufferTest CXX) | ||
|
||
find_package(wavelet_buffer CONFIG REQUIRED) | ||
|
||
add_executable(test_package test_package.cpp) | ||
target_compile_features(test_package PUBLIC cxx_std_20) | ||
target_link_libraries(test_package wavelet_buffer::wavelet_buffer) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
import os | ||
|
||
from conan import ConanFile | ||
from conan.tools.build import can_run | ||
from conan.tools.cmake import CMake | ||
from conan.tools.layout import cmake_layout | ||
|
||
|
||
class HelloTestConan(ConanFile): | ||
settings = "os", "compiler", "build_type", "arch" | ||
generators = "CMakeDeps", "CMakeToolchain", "VirtualRunEnv" | ||
|
||
test_type = "explicit" | ||
|
||
def requirements(self): | ||
self.requires(self.tested_reference_str) | ||
|
||
def build(self): | ||
cmake = CMake(self) | ||
cmake.configure() | ||
cmake.build() | ||
|
||
def layout(self): | ||
cmake_layout(self) | ||
|
||
def test(self): | ||
if can_run(self): | ||
cmd = os.path.join(self.cpp.build.bindirs[0], "test_package") | ||
self.run(cmd, env="conanrun") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
#include <iostream> | ||
|
||
#include <wavelet_buffer/wavelet_buffer.h> | ||
|
||
using drift::Signal1D; | ||
using drift::WaveletBuffer; | ||
using drift::WaveletParameters; | ||
using drift::WaveletTypes; | ||
using DenoiseAlgo = drift::ThresholdAbsDenoiseAlgorithm<float>; | ||
|
||
int main() { | ||
Signal1D original = blaze::generate( | ||
1000, [](auto index) { return static_cast<float>(index % 100); }); | ||
|
||
std::cout << "Original size: " << original.size() * 4 << std::endl; | ||
WaveletBuffer buffer(WaveletParameters{ | ||
.signal_shape = {original.size()}, | ||
.signal_number = 1, | ||
.decomposition_steps = 3, | ||
.wavelet_type = WaveletTypes::kDB1, | ||
}); | ||
|
||
// Wavelet decomposition of the signal and denoising | ||
buffer.Decompose(original, DenoiseAlgo(0, 0.3)); | ||
|
||
// Compress the buffer | ||
std::string arch; | ||
if (buffer.Serialize(&arch, 16)) { | ||
std::cout << "Compressed size: " << arch.size() << std::endl; | ||
} else { | ||
std::cerr << "Serialization error" << std::endl; | ||
return EXIT_FAILURE; | ||
} | ||
|
||
// Decompress the buffer | ||
auto restored_buffer = WaveletBuffer::Parse(arch); | ||
Signal1D output_signal; | ||
|
||
// Restore the signal from wavelet decomposition | ||
restored_buffer->Compose(&output_signal); | ||
|
||
std::cout << "Distance between original and restored signal: " | ||
<< blaze::norm(original - output_signal) / original.size() | ||
<< std::endl; | ||
std::cout << "Compression rate: " << original.size() * 4. / arch.size() * 100 | ||
<< "%" << std::endl; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
cmake_minimum_required(VERSION 3.1) | ||
project(test_package) | ||
|
||
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) | ||
conan_basic_setup(TARGETS) | ||
|
||
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../test_package/ | ||
${CMAKE_CURRENT_BINARY_DIR}/test_package/) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
from conans import ConanFile, CMake | ||
from conan.tools.build import cross_building | ||
import os | ||
|
||
|
||
# legacy validation with Conan 1.x | ||
class TestPackageV1Conan(ConanFile): | ||
settings = "os", "arch", "compiler", "build_type" | ||
generators = "cmake", "cmake_find_package_multi" | ||
|
||
def build(self): | ||
cmake = CMake(self) | ||
cmake.configure() | ||
cmake.build() | ||
|
||
def test(self): | ||
if not cross_building(self): | ||
bin_path = os.path.join("bin", "test_package") | ||
self.run(bin_path, run_environment=True) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
versions: | ||
"0.4.0": | ||
folder: all |