From e900d969ba3bb67fd7043d89a8fc230a38461437 Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Thu, 12 Feb 2026 10:53:16 +0200 Subject: [PATCH 01/29] WASM hacks --- CMakeLists.txt | 24 ++++++++++++------------ src/plugins/compressors/chunking.cc | 2 +- src/plugins/compressors/pipeline.cc | 2 +- src/plugins/compressors/roibin_impl.h | 16 ++++++++-------- src/pressio_posix.cc | 2 +- 5 files changed, 23 insertions(+), 23 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 936c206c..0c22eb8b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -140,9 +140,9 @@ libpressio_plugin_file(domains_metrics/print.cc) libpressio_plugin_file(compressors/noop.cc) libpressio_plugin_file(compressors/pressio.cc) libpressio_plugin_file(metrics/composite.cc) -libpressio_plugin_file(metrics/external.cc) +#libpressio_plugin_file(metrics/external.cc) libpressio_plugin_file(metrics/error_stat.cc) -libpressio_plugin_file(launch/external_forkexec.cc) +#libpressio_plugin_file(launch/external_forkexec.cc) libpressio_plugin_file(launch_metrics/noop.cc) libpressio_plugin_file(launch_metrics/print.cc) libpressio_plugin_file(metrics/noop.cc) @@ -696,16 +696,16 @@ endif() # static libraries and some system linkers will strip the registration classes # causing nothing to be registered -add_executable(pressio_register_generator src/pressio_register_generator.cc) -target_compile_features(pressio_register_generator PRIVATE cxx_std_11) -add_custom_command( - OUTPUT pressio_manual_register.cc - COMMAND "${CMAKE_CURRENT_BINARY_DIR}/pressio_register_generator" -c "${LIBPRESSIO_BUILT_PLUGINS}" -o "${CMAKE_CURRENT_BINARY_DIR}/pressio_manual_register.cc" - COMMENT "generating registration source file" - DEPENDS pressio_register_generator ${LIBPRESSIO_BUILT_PLUGINS} src/pressio_register_generator.cc - VERBATIM -) -target_sources(libpressio PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/pressio_manual_register.cc) +#add_executable(pressio_register_generator src/pressio_register_generator.cc) +#target_compile_features(pressio_register_generator PRIVATE cxx_std_11) +#add_custom_command( +# OUTPUT pressio_manual_register.cc +# COMMAND "${CMAKE_CURRENT_BINARY_DIR}/pressio_register_generator" -c "${LIBPRESSIO_BUILT_PLUGINS}" -o "${CMAKE_CURRENT_BINARY_DIR}/pressio_manual_register.cc" +# COMMENT "generating registration source file" +# DEPENDS pressio_register_generator ${LIBPRESSIO_BUILT_PLUGINS} src/pressio_register_generator.cc +# VERBATIM +#) +#target_sources(libpressio PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/pressio_manual_register.cc) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/src/pressio_version.h.in diff --git a/src/plugins/compressors/chunking.cc b/src/plugins/compressors/chunking.cc index 30e4e7b8..6b39135b 100644 --- a/src/plugins/compressors/chunking.cc +++ b/src/plugins/compressors/chunking.cc @@ -224,7 +224,7 @@ class chunking_plugin: public libpressio_compressor_plugin { outputs_ptr.reserve(n_buffers); size_t accum_size = header_size; for (size_t i = 0; i < n_buffers; ++i) { - inputs.emplace_back(pressio_data::nonowning(pressio_byte_dtype, inptr+accum_size, {sizes[i]})); + inputs.emplace_back(pressio_data::nonowning(pressio_byte_dtype, inptr+accum_size, {static_cast(sizes[i])})); outputs.emplace_back(pressio_data::owning(output->dtype(), (chunk_size.empty() ? output->dimensions(): chunk_size ))); inputs_ptr.emplace_back(&inputs.back()); outputs_ptr.emplace_back(&outputs.back()); diff --git a/src/plugins/compressors/pipeline.cc b/src/plugins/compressors/pipeline.cc index 8ad010e8..7d239ad5 100644 --- a/src/plugins/compressors/pipeline.cc +++ b/src/plugins/compressors/pipeline.cc @@ -92,7 +92,7 @@ class pipeline_compressor_plugin : public libpressio_compressor_plugin { //output needs to be on the host to add the header *output = pressio_data::owning( pressio_byte_dtype, - {tmp_in.size_in_bytes() + header_size} + {static_cast(tmp_in.size_in_bytes() + header_size)} ); uint64_t* metadata_ptr = static_cast(output->data()); metadata_ptr[0] = 1; /*version*/ diff --git a/src/plugins/compressors/roibin_impl.h b/src/plugins/compressors/roibin_impl.h index 1fbf9ab5..b1d2fabd 100644 --- a/src/plugins/compressors/roibin_impl.h +++ b/src/plugins/compressors/roibin_impl.h @@ -30,7 +30,7 @@ void copy_center( T * roi_mem) { auto s_roi = as(roi); auto s_roi_size = as(roi_size); - std::array center{center_ptr[0]}; + std::array center{static_cast(center_ptr[0])}; auto s_center = as(center); auto s_id = as(id); @@ -56,7 +56,7 @@ void copy_center( T * roi_mem) { auto s_roi = as(roi); auto s_roi_size = as(roi_size); - std::array center{center_ptr[0], center_ptr[1]}; + std::array center{static_cast(center_ptr[0]), static_cast(center_ptr[1])}; auto s_center = as(center); auto s_id = as(id); @@ -91,7 +91,7 @@ void copy_center( T * roi_mem) { auto s_roi = as(roi); auto s_roi_size = as(roi_size); - std::array center{center_ptr[0], center_ptr[1], center_ptr[2]}; + std::array center{static_cast(center_ptr[0]), static_cast(center_ptr[1]), static_cast(center_ptr[2])}; auto s_center = as(center); auto s_id = as(id); @@ -137,7 +137,7 @@ void copy_center( T * roi_mem) { auto s_roi = as(roi); auto s_roi_size = as(roi_size); - std::array center{center_ptr[0], center_ptr[1], center_ptr[2], center_ptr[3]}; + std::array center{static_cast(center_ptr[0]), static_cast(center_ptr[1]), static_cast(center_ptr[2]), static_cast(center_ptr[3])}; auto s_center = as(center); auto s_id = as(id); @@ -224,7 +224,7 @@ void restore_center( T const* roi_mem) { auto s_roi = as(roi); auto s_roi_size = as(roi_size); - std::array center{center_ptr[0]}; + std::array center{static_cast(center_ptr[0])}; auto s_center = as(center); auto s_id = as(id); @@ -247,7 +247,7 @@ void restore_center( T const* roi_mem) { auto s_roi = as(roi); auto s_roi_size = as(roi_size); - std::array center{center_ptr[0], center_ptr[1]}; + std::array center{static_cast(center_ptr[0]), static_cast(center_ptr[1])}; auto s_center = as(center); auto s_id = as(id); @@ -274,7 +274,7 @@ void restore_center( T const* roi_mem) { auto s_roi = as(roi); auto s_roi_size = as(roi_size); - std::array center{center_ptr[0], center_ptr[1], center_ptr[2]}; + std::array center{static_cast(center_ptr[0]), static_cast(center_ptr[1]), static_cast(center_ptr[2])}; auto s_center = as(center); auto s_id = as(id); @@ -306,7 +306,7 @@ void restore_center( T const* roi_mem) { auto s_roi = as(roi); auto s_roi_size = as(roi_size); - std::array center{center_ptr[0], center_ptr[1], center_ptr[2], center_ptr[3]}; + std::array center{static_cast(center_ptr[0]), static_cast(center_ptr[1]), static_cast(center_ptr[2]), static_cast(center_ptr[3])}; auto s_center = as(center); auto s_id = as(id); diff --git a/src/pressio_posix.cc b/src/pressio_posix.cc index 77898148..90fe78ba 100644 --- a/src/pressio_posix.cc +++ b/src/pressio_posix.cc @@ -14,7 +14,7 @@ std::string errno_to_error() { auto ec = errno; char err_buf[1024]; std::fill(err_buf, err_buf+1024, '\0'); -#if _GNU_SOURCE +#if _GNU_SOURCE && not(defined(__wasm__)) //assume gnu version char* rc = strerror_r(ec, err_buf, 1024); return rc; From 52ce28f7a0fce6997aed990b60ef459bf4657d78 Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Tue, 17 Feb 2026 09:48:28 +0200 Subject: [PATCH 02/29] don't ask ... --- CMakeLists.txt | 56 ++++++++++++++++++++++++-------------- tools/build/CMakeLists.txt | 7 +++++ 2 files changed, 43 insertions(+), 20 deletions(-) create mode 100644 tools/build/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 0c22eb8b..1f989ed1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,7 @@ project(libpressio VERSION "1.0.7" LANGUAGES CXX C) set(default_build_type "Release") if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) message(STATUS "No build type was set. Setting build type to ${default_build_type}.") - set(CMAKE_BUILD_TYPE ${default_build_type} CACHE + set(CMAKE_BUILD_TYPE ${default_build_type} CACHE STRING "Choose the type to build" FORCE) endif() set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") @@ -110,7 +110,7 @@ add_library(libpressio include/pressio_option.h include/pressio_options.h include/pressio_options_iter.h - + #private headers src/external_parse.h src/multi_dimensional_iterator.h @@ -228,16 +228,16 @@ if(LIBPRESSIO_INTERPROCEDURAL_OPTIMIZATION) endif() target_include_directories(libpressio - PRIVATE - $ + PRIVATE + $ ) target_include_directories(libpressio - PUBLIC - $ + PUBLIC + $ $ $ ) -target_compile_options(libpressio PRIVATE +target_compile_options(libpressio PRIVATE $<$: $<$: -Wall -Wextra -Wpedantic> $<$: ${NO_OMIT_FRAME_POINTER_FLAG}> @@ -442,7 +442,7 @@ if(LIBPRESSIO_HAS_BLOSC) get_filename_component(BLOSC_INCLUDE_DIRS ${BLOSC_INCLUDE_FILE} DIRECTORY) target_link_libraries(libpressio PRIVATE ${BLOSC_LIBRARIES}) target_include_directories(libpressio PRIVATE ${BLOSC_INCLUDE_DIRS}) - + endif() endif() @@ -694,18 +694,34 @@ if(LIBPRESSIO_HAS_GRIB) libpressio_plugin_file(io/grib.cc) endif() -# static libraries and some system linkers will strip the registration classes +# static libraries and some system linkers will strip the registration classes # causing nothing to be registered -#add_executable(pressio_register_generator src/pressio_register_generator.cc) -#target_compile_features(pressio_register_generator PRIVATE cxx_std_11) -#add_custom_command( -# OUTPUT pressio_manual_register.cc -# COMMAND "${CMAKE_CURRENT_BINARY_DIR}/pressio_register_generator" -c "${LIBPRESSIO_BUILT_PLUGINS}" -o "${CMAKE_CURRENT_BINARY_DIR}/pressio_manual_register.cc" -# COMMENT "generating registration source file" -# DEPENDS pressio_register_generator ${LIBPRESSIO_BUILT_PLUGINS} src/pressio_register_generator.cc -# VERBATIM -#) -#target_sources(libpressio PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/pressio_manual_register.cc) +if (CMAKE_CROSSCOMPILING) + set(_pressio_register_generator "bin/pressio_register_generator${CMAKE_HOST_EXECUTABLE_SUFFIX}") + add_custom_command( + OUTPUT ${_pressio_register_generator} + COMMAND ${CMAKE_COMMAND} + -DCMAKE_BUILD_TYPE:STRING="Release" + -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE:PATH="${CMAKE_BINARY_DIR}/bin" + -DCMAKE_CXX_FLAGS="" + -DCMAKE_EXE_LINKER_FLAGS="" + -DCMAKE_VERBOSE_MAKEFILE=ON + -B"bin" + -H"${CMAKE_SOURCE_DIR}/tools/build" + COMMAND ${CMAKE_COMMAND} --build bin --config Release + ) +else() + set(_pressio_register_generator pressio_register_generator) + add_subdirectory(tools/build) +endif() +add_custom_command( + OUTPUT pressio_manual_register.cc + COMMAND ${_pressio_register_generator} -c "${LIBPRESSIO_BUILT_PLUGINS}" -o "${CMAKE_CURRENT_BINARY_DIR}/pressio_manual_register.cc" + COMMENT "generating registration source file" + DEPENDS ${_pressio_register_generator} ${LIBPRESSIO_BUILT_PLUGINS} src/pressio_register_generator.cc + VERBATIM +) +target_sources(libpressio PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/pressio_manual_register.cc) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/src/pressio_version.h.in @@ -859,7 +875,7 @@ endif() option(BUILD_DOCKER_CONTAINERS "build docker containers for testing" OFF) if(BUILD_DOCKER_CONTAINERS) - + foreach(CONTAINER Fedora Ubuntu18.04 CentOS) set(BuildSentinel ${CMAKE_BINARY_DIR}/${CONTAINER}-built) set(Dockerfile docker/Dockerfile-${CONTAINER}) diff --git a/tools/build/CMakeLists.txt b/tools/build/CMakeLists.txt new file mode 100644 index 00000000..b7ffca04 --- /dev/null +++ b/tools/build/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 3.15 FATAL_ERROR) +project(libpressio-build-tools VERSION "1.0.7" LANGUAGES CXX) + +set(CMAKE_CXX_FLAGS "-isysroot /nix/store/5gfsv5n8zhpnl9yhggjpxrxg0jyflwja-apple-sdk-11.3/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -isystem /nix/store/rcaj8r2chyqccxgzf62d8j3iyyjxgs2x-libcxx-19.1.7-dev/include/c++/v1/ -isystem /nix/store/v5a0gqs9r5v406xma832691y8k6srn1i-clang-20.1.8-lib/lib/clang/20/include/") + +add_executable(pressio_register_generator ../../src/pressio_register_generator.cc) +target_compile_features(pressio_register_generator PRIVATE cxx_std_11) From bd9bc9007f6d40e798b531253bde48fd8f79c89a Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Tue, 17 Feb 2026 14:13:37 +0200 Subject: [PATCH 03/29] no verbose Makefile --- CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1f989ed1..0b9f547f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -705,7 +705,6 @@ if (CMAKE_CROSSCOMPILING) -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE:PATH="${CMAKE_BINARY_DIR}/bin" -DCMAKE_CXX_FLAGS="" -DCMAKE_EXE_LINKER_FLAGS="" - -DCMAKE_VERBOSE_MAKEFILE=ON -B"bin" -H"${CMAKE_SOURCE_DIR}/tools/build" COMMAND ${CMAKE_COMMAND} --build bin --config Release From 47c32a03e9ab6b494ef82eb4ad22eb4a47a459cc Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Tue, 17 Feb 2026 15:49:23 +0200 Subject: [PATCH 04/29] Add messages for enabled optional components --- CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0b9f547f..5a2ae432 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -152,6 +152,8 @@ libpressio_plugin_file(io/posix.cc) libpressio_plugin_file(domains/malloc.cc) libpressio_plugin_file(domains/nonowning.cc) +message("STATUS" "LIBPRESSIO_BUILD_MODE = ${LIBPRESSIO_BUILD_MODE}") + #optional components created with libpressio_optional_component don't require dependencies #they can be enabled in two (non-exclusive) ways: # 1 by 1 using -DLIBPRESSIO_HAS_${NAME}=ON @@ -162,9 +164,12 @@ function(libpressio_optional_component name description file_names) string(TOUPPER "${name}" name_upper) cmake_dependent_option(LIBPRESSIO_HAS_${name_upper} ${description} OFF "LIBPRESSIO_BUILD_MODE STREQUAL CORE" OFF) if(LIBPRESSIO_HAS_${name_upper} OR LIBPRESSIO_BUILD_MODE STREQUAL FULL) + message("STATUS" "LIBPRESSIO_HAS_${name_upper} = ON") foreach(file_name IN LISTS file_names) libpressio_plugin_file(/${file_name}) endforeach() + else() + message("STATUS" "LIBPRESSIO_HAS_${name_upper} = OFF") endif() endfunction() From 46e9829cb5b78b24bba6413adee1e0e0d4992727 Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Wed, 18 Feb 2026 07:28:42 +0200 Subject: [PATCH 05/29] Fix LIBPRESSIO_BUILT_PLUGINS propagation --- CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5a2ae432..673b2c59 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -134,6 +134,7 @@ macro(libpressio_plugin_file file_name) ${CMAKE_CURRENT_SOURCE_DIR}/src/plugins/${file_name} ) list(APPEND LIBPRESSIO_BUILT_PLUGINS "${CMAKE_CURRENT_SOURCE_DIR}/src/plugins/${file_name}") + set(LIBPRESSIO_BUILT_PLUGINS "${LIBPRESSIO_BUILT_PLUGINS}" PARENT_SCOPE) endmacro() #REQUIRED CORE plugins included in every build of libpressio libpressio_plugin_file(domains_metrics/print.cc) @@ -699,6 +700,8 @@ if(LIBPRESSIO_HAS_GRIB) libpressio_plugin_file(io/grib.cc) endif() +message("STATUS" "LIBPRESSIO_BUILT_PLUGINS = ${LIBPRESSIO_BUILT_PLUGINS}") + # static libraries and some system linkers will strip the registration classes # causing nothing to be registered if (CMAKE_CROSSCOMPILING) From e562964825498cbfcb1aa4f4d1c4b1404ac1de60 Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Wed, 18 Feb 2026 08:42:59 +0200 Subject: [PATCH 06/29] disabled some plugins to ensure libpressio_instance runs without error on wasm (FIXME) --- CMakeLists.txt | 80 +++++++++++++++++++++++++------------------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 673b2c59..0225272e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -178,48 +178,48 @@ libpressio_optional_component(cast "build the cast compressor plugin" /compresso libpressio_optional_component(threshold_small "build the threshold_small compressor plugin" /compressors/threshold_small.cc) libpressio_optional_component(remove_background "build the remove_background compressor plugin" /compressors/remove_background.cc) libpressio_optional_component(mask_interpolation "build the mask_interpolation compressor plugin" /compressors/mask_interpolation.cc) -libpressio_optional_component(max_error "build the max_error metric plugin" /metrics/max_error.cc) +# libpressio_optional_component(max_error "build the max_error metric plugin" /metrics/max_error.cc) libpressio_optional_component(repeat "build the repeat compressor plugin" /compressors/repeat.cc) libpressio_optional_component(pw_rel "build the pw_rel compressor plugin" /compressors/pw_rel.cc) -libpressio_optional_component(csv "build the CSV io plugin" /io/csv.cc) -libpressio_optional_component(numpy "build the numpy io plugin" /io/numpy.cc) -libpressio_optional_component(copy_template "build the numpy io plugin" /io/copy_template.cc) -libpressio_optional_component(size "build the size metrics plugin" /metrics/size.cc) -libpressio_optional_component(time "build the time metrics plugin" /metrics/time.cc) -libpressio_optional_component(autocorr "build the autocorr metrics plugin" /metrics/autocorr.cc) -libpressio_optional_component(chunking "build the chunking compressor plugin" "/compressors/chunking.cc;/compressors/chunking_impl.cc") -libpressio_optional_component(delta_encoding "build the delta_encoding compressor plugin" /compressors/delta_encoding.cc) -libpressio_optional_component(diff_pdf "build the difference probability distribution function metric" /metrics/diff_pdf.cc) -libpressio_optional_component(empty "build the empty IO plugin" /io/empty.cc) -libpressio_optional_component(entropy "build the entropy metrics plugin" /metrics/entropy.cc) -libpressio_optional_component(historian "build the historian metrics plugin" /metrics/historian.cc) -libpressio_optional_component(input_stats "build the input_stats metrics plugin" /metrics/input_stats.cc) -libpressio_optional_component(iota "build the iota io plugin" /io/iota.cc) -libpressio_optional_component(kl_divergance "build the kl_divergance plugin" /metrics/kl_divergance.cc) -libpressio_optional_component(ks_test "build the KS test metrics plugin" /metrics/ks_test.cc) -libpressio_optional_component(kth_error "build the kth error metrics plugin" /metrics/kth_error.cc) -libpressio_optional_component(linear_quantizer "build the linear quantizer compressor plugin" /compressors/linear_quantizer.cc) -libpressio_optional_component(log_transform "build the log_transform compressor plugin" /compressors/log_transform.cc) -libpressio_optional_component(mask1d "build the mask1d metrics plugin" /metrics/mask1d.cc) -libpressio_optional_component(pearsons "build the pearsons metrics plugin" /metrics/pearsons.cc) -libpressio_optional_component(printer "build the printer metrics plugin" /metrics/printer.cc) -libpressio_optional_component(region_of_interest "build the region_of_interest metrics plugin" /metrics/region_of_interest.cc) -libpressio_optional_component(resize "build the resize compressor plugin" /compressors/resize.cc) -libpressio_optional_component(sampling "build the sampling compressors plugin" /compressors/sampling.cc) -libpressio_optional_component(select "build the io selection plugin" /io/select.cc) -libpressio_optional_component(switch "build the switch comprssor plugin" /compressors/switch.cc) -libpressio_optional_component(transpose "build the transpose compressor plugin" /compressors/transpose.cc) -libpressio_optional_component(print_options "print the options passed to set_options" /metrics/print_options.cc) -libpressio_optional_component(data_gap "compute the data_gap" /metrics/data_gap.cc) -libpressio_optional_component(clipping "compute the number of values that exceed an absolute error bound" /metrics/clipping.cc) -libpressio_optional_component(ssim "computes the SSIM" /metrics/ssim.cc) -libpressio_optional_component(sobolev "computes the sobolev norm" /metrics/sobolevp2.cc) -libpressio_optional_component(gradient "computes the gradient length" /metrics/gradlength.cc) -libpressio_optional_component(out_of_bounds "computes the gradient length" /metrics/out_of_bounds.cc) -libpressio_optional_component(write_debug_inputs "metric that writes output buffers for testing" /metrics/write_debug_inputs.cc) -set(roibin_sources /compressors/roibin.cc /compressors/binning.cc /compressors/masked_binning.cc) -libpressio_optional_component(roibin "build the roibin metacompressor" "${roibin_sources}") -libpressio_optional_component(pipeline "build the pipeline metacompressor" /compressors/pipeline.cc) +# libpressio_optional_component(csv "build the CSV io plugin" /io/csv.cc) +# libpressio_optional_component(numpy "build the numpy io plugin" /io/numpy.cc) +# libpressio_optional_component(copy_template "build the numpy io plugin" /io/copy_template.cc) +# libpressio_optional_component(size "build the size metrics plugin" /metrics/size.cc) +# libpressio_optional_component(time "build the time metrics plugin" /metrics/time.cc) +# libpressio_optional_component(autocorr "build the autocorr metrics plugin" /metrics/autocorr.cc) +# libpressio_optional_component(chunking "build the chunking compressor plugin" "/compressors/chunking.cc;/compressors/chunking_impl.cc") +# libpressio_optional_component(delta_encoding "build the delta_encoding compressor plugin" /compressors/delta_encoding.cc) +# libpressio_optional_component(diff_pdf "build the difference probability distribution function metric" /metrics/diff_pdf.cc) +# libpressio_optional_component(empty "build the empty IO plugin" /io/empty.cc) +# libpressio_optional_component(entropy "build the entropy metrics plugin" /metrics/entropy.cc) +# libpressio_optional_component(historian "build the historian metrics plugin" /metrics/historian.cc) +# libpressio_optional_component(input_stats "build the input_stats metrics plugin" /metrics/input_stats.cc) +# libpressio_optional_component(iota "build the iota io plugin" /io/iota.cc) +# libpressio_optional_component(kl_divergance "build the kl_divergance plugin" /metrics/kl_divergance.cc) +# libpressio_optional_component(ks_test "build the KS test metrics plugin" /metrics/ks_test.cc) +# libpressio_optional_component(kth_error "build the kth error metrics plugin" /metrics/kth_error.cc) +# libpressio_optional_component(linear_quantizer "build the linear quantizer compressor plugin" /compressors/linear_quantizer.cc) +# libpressio_optional_component(log_transform "build the log_transform compressor plugin" /compressors/log_transform.cc) +# libpressio_optional_component(mask1d "build the mask1d metrics plugin" /metrics/mask1d.cc) +# libpressio_optional_component(pearsons "build the pearsons metrics plugin" /metrics/pearsons.cc) +# libpressio_optional_component(printer "build the printer metrics plugin" /metrics/printer.cc) +# libpressio_optional_component(region_of_interest "build the region_of_interest metrics plugin" /metrics/region_of_interest.cc) +# libpressio_optional_component(resize "build the resize compressor plugin" /compressors/resize.cc) +# libpressio_optional_component(sampling "build the sampling compressors plugin" /compressors/sampling.cc) +# libpressio_optional_component(select "build the io selection plugin" /io/select.cc) +# libpressio_optional_component(switch "build the switch comprssor plugin" /compressors/switch.cc) +# libpressio_optional_component(transpose "build the transpose compressor plugin" /compressors/transpose.cc) +# libpressio_optional_component(print_options "print the options passed to set_options" /metrics/print_options.cc) +# libpressio_optional_component(data_gap "compute the data_gap" /metrics/data_gap.cc) +# libpressio_optional_component(clipping "compute the number of values that exceed an absolute error bound" /metrics/clipping.cc) +# libpressio_optional_component(ssim "computes the SSIM" /metrics/ssim.cc) +# libpressio_optional_component(sobolev "computes the sobolev norm" /metrics/sobolevp2.cc) +# libpressio_optional_component(gradient "computes the gradient length" /metrics/gradlength.cc) +# libpressio_optional_component(out_of_bounds "computes the gradient length" /metrics/out_of_bounds.cc) +# libpressio_optional_component(write_debug_inputs "metric that writes output buffers for testing" /metrics/write_debug_inputs.cc) +# set(roibin_sources /compressors/roibin.cc /compressors/binning.cc /compressors/masked_binning.cc) +# libpressio_optional_component(roibin "build the roibin metacompressor" "${roibin_sources}") +# libpressio_optional_component(pipeline "build the pipeline metacompressor" /compressors/pipeline.cc) option(LIBPRESSIO_INTERPROCEDURAL_OPTIMIZATION "Use interprocedural optimization (LTO)" OFF) if(LIBPRESSIO_INTERPROCEDURAL_OPTIMIZATION) From fefdcb45f0202bcd7acb103714b3b54bf16497ee Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Wed, 18 Feb 2026 14:56:57 +0200 Subject: [PATCH 07/29] enable all plugins that register successfully --- CMakeLists.txt | 28 ++++++++++++++-------------- src/pressio_register_generator.cc | 2 ++ 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0225272e..bae85d2d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -181,20 +181,20 @@ libpressio_optional_component(mask_interpolation "build the mask_interpolation c # libpressio_optional_component(max_error "build the max_error metric plugin" /metrics/max_error.cc) libpressio_optional_component(repeat "build the repeat compressor plugin" /compressors/repeat.cc) libpressio_optional_component(pw_rel "build the pw_rel compressor plugin" /compressors/pw_rel.cc) -# libpressio_optional_component(csv "build the CSV io plugin" /io/csv.cc) -# libpressio_optional_component(numpy "build the numpy io plugin" /io/numpy.cc) -# libpressio_optional_component(copy_template "build the numpy io plugin" /io/copy_template.cc) -# libpressio_optional_component(size "build the size metrics plugin" /metrics/size.cc) -# libpressio_optional_component(time "build the time metrics plugin" /metrics/time.cc) +libpressio_optional_component(csv "build the CSV io plugin" /io/csv.cc) +libpressio_optional_component(numpy "build the numpy io plugin" /io/numpy.cc) +libpressio_optional_component(copy_template "build the numpy io plugin" /io/copy_template.cc) +libpressio_optional_component(size "build the size metrics plugin" /metrics/size.cc) +libpressio_optional_component(time "build the time metrics plugin" /metrics/time.cc) # libpressio_optional_component(autocorr "build the autocorr metrics plugin" /metrics/autocorr.cc) # libpressio_optional_component(chunking "build the chunking compressor plugin" "/compressors/chunking.cc;/compressors/chunking_impl.cc") # libpressio_optional_component(delta_encoding "build the delta_encoding compressor plugin" /compressors/delta_encoding.cc) # libpressio_optional_component(diff_pdf "build the difference probability distribution function metric" /metrics/diff_pdf.cc) -# libpressio_optional_component(empty "build the empty IO plugin" /io/empty.cc) +libpressio_optional_component(empty "build the empty IO plugin" /io/empty.cc) # libpressio_optional_component(entropy "build the entropy metrics plugin" /metrics/entropy.cc) # libpressio_optional_component(historian "build the historian metrics plugin" /metrics/historian.cc) # libpressio_optional_component(input_stats "build the input_stats metrics plugin" /metrics/input_stats.cc) -# libpressio_optional_component(iota "build the iota io plugin" /io/iota.cc) +libpressio_optional_component(iota "build the iota io plugin" /io/iota.cc) # libpressio_optional_component(kl_divergance "build the kl_divergance plugin" /metrics/kl_divergance.cc) # libpressio_optional_component(ks_test "build the KS test metrics plugin" /metrics/ks_test.cc) # libpressio_optional_component(kth_error "build the kth error metrics plugin" /metrics/kth_error.cc) @@ -206,20 +206,20 @@ libpressio_optional_component(pw_rel "build the pw_rel compressor plugin" /compr # libpressio_optional_component(region_of_interest "build the region_of_interest metrics plugin" /metrics/region_of_interest.cc) # libpressio_optional_component(resize "build the resize compressor plugin" /compressors/resize.cc) # libpressio_optional_component(sampling "build the sampling compressors plugin" /compressors/sampling.cc) -# libpressio_optional_component(select "build the io selection plugin" /io/select.cc) +libpressio_optional_component(select "build the io selection plugin" /io/select.cc) # libpressio_optional_component(switch "build the switch comprssor plugin" /compressors/switch.cc) # libpressio_optional_component(transpose "build the transpose compressor plugin" /compressors/transpose.cc) # libpressio_optional_component(print_options "print the options passed to set_options" /metrics/print_options.cc) -# libpressio_optional_component(data_gap "compute the data_gap" /metrics/data_gap.cc) +libpressio_optional_component(data_gap "compute the data_gap" /metrics/data_gap.cc) # libpressio_optional_component(clipping "compute the number of values that exceed an absolute error bound" /metrics/clipping.cc) -# libpressio_optional_component(ssim "computes the SSIM" /metrics/ssim.cc) -# libpressio_optional_component(sobolev "computes the sobolev norm" /metrics/sobolevp2.cc) +libpressio_optional_component(ssim "computes the SSIM" /metrics/ssim.cc) +libpressio_optional_component(sobolev "computes the sobolev norm" /metrics/sobolevp2.cc) # libpressio_optional_component(gradient "computes the gradient length" /metrics/gradlength.cc) # libpressio_optional_component(out_of_bounds "computes the gradient length" /metrics/out_of_bounds.cc) # libpressio_optional_component(write_debug_inputs "metric that writes output buffers for testing" /metrics/write_debug_inputs.cc) -# set(roibin_sources /compressors/roibin.cc /compressors/binning.cc /compressors/masked_binning.cc) -# libpressio_optional_component(roibin "build the roibin metacompressor" "${roibin_sources}") -# libpressio_optional_component(pipeline "build the pipeline metacompressor" /compressors/pipeline.cc) +set(roibin_sources /compressors/roibin.cc /compressors/binning.cc) # /compressors/masked_binning.cc) +libpressio_optional_component(roibin "build the roibin metacompressor" "${roibin_sources}") +libpressio_optional_component(pipeline "build the pipeline metacompressor" /compressors/pipeline.cc) option(LIBPRESSIO_INTERPROCEDURAL_OPTIMIZATION "Use interprocedural optimization (LTO)" OFF) if(LIBPRESSIO_INTERPROCEDURAL_OPTIMIZATION) diff --git a/src/pressio_register_generator.cc b/src/pressio_register_generator.cc index 1d8cdbf8..526a6046 100644 --- a/src/pressio_register_generator.cc +++ b/src/pressio_register_generator.cc @@ -92,7 +92,9 @@ int main(int argc, char* argv[]) { fwd_decl << "\t\t\textern pressio_register registration;" << std::endl; fwd_decl << "\t\t}" << std::endl; + body << R"(std::cerr << "pre: " << ")" << p.type << R"(" << "," << ")" << p.name << R"(" << std::endl;)" << std::endl; body << "libpressio::" << p.type << "::" << p.name << "_ns::registration.ensure_registered();" << std::endl;; + body << R"(std::cerr << "post: " << ")" << p.type << R"(" << "," << ")" << p.name << R"(" << std::endl;)" << std::endl; } fwd_decl << "\t} /*namespace " << last_type << "*/" << std::endl; fwd_decl << "} /*namespace libpressio*/" << std::endl; From 4257b2b17916478b3a0d2f78572d78647f96ce1b Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Mon, 23 Feb 2026 12:38:18 +0200 Subject: [PATCH 08/29] slightly fewer hacks --- tools/build/CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/build/CMakeLists.txt b/tools/build/CMakeLists.txt index b7ffca04..a488d59c 100644 --- a/tools/build/CMakeLists.txt +++ b/tools/build/CMakeLists.txt @@ -1,7 +1,9 @@ cmake_minimum_required(VERSION 3.15 FATAL_ERROR) project(libpressio-build-tools VERSION "1.0.7" LANGUAGES CXX) -set(CMAKE_CXX_FLAGS "-isysroot /nix/store/5gfsv5n8zhpnl9yhggjpxrxg0jyflwja-apple-sdk-11.3/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -isystem /nix/store/rcaj8r2chyqccxgzf62d8j3iyyjxgs2x-libcxx-19.1.7-dev/include/c++/v1/ -isystem /nix/store/v5a0gqs9r5v406xma832691y8k6srn1i-clang-20.1.8-lib/lib/clang/20/include/") +if(DEFINED ENV{CXXFLAGSHOST}) + set(CMAKE_CXX_FLAGS ENV{CXXFLAGSHOST}) +endif() add_executable(pressio_register_generator ../../src/pressio_register_generator.cc) target_compile_features(pressio_register_generator PRIVATE cxx_std_11) From 2826604eabe0eb7fc343ad429dbc30f39bddd76d Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Mon, 23 Feb 2026 13:03:19 +0200 Subject: [PATCH 09/29] Fix cmake env variable lookup --- tools/build/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/build/CMakeLists.txt b/tools/build/CMakeLists.txt index a488d59c..9126fa72 100644 --- a/tools/build/CMakeLists.txt +++ b/tools/build/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.15 FATAL_ERROR) project(libpressio-build-tools VERSION "1.0.7" LANGUAGES CXX) if(DEFINED ENV{CXXFLAGSHOST}) - set(CMAKE_CXX_FLAGS ENV{CXXFLAGSHOST}) + set(CMAKE_CXX_FLAGS "$ENV{CXXFLAGSHOST}") endif() add_executable(pressio_register_generator ../../src/pressio_register_generator.cc) From 640c5f37fa0f20e2431efb09f5db6444ac1ad34b Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Mon, 2 Mar 2026 10:01:48 +0200 Subject: [PATCH 10/29] add debug message for pressio_register_generator CMAKE_CXX_FLAGS --- tools/build/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/build/CMakeLists.txt b/tools/build/CMakeLists.txt index 9126fa72..c43b9a34 100644 --- a/tools/build/CMakeLists.txt +++ b/tools/build/CMakeLists.txt @@ -5,5 +5,7 @@ if(DEFINED ENV{CXXFLAGSHOST}) set(CMAKE_CXX_FLAGS "$ENV{CXXFLAGSHOST}") endif() +message("STATUS" "pressio_register_generator CMAKE_CXX_FLAGS = ${CMAKE_CXX_FLAGS}") + add_executable(pressio_register_generator ../../src/pressio_register_generator.cc) target_compile_features(pressio_register_generator PRIVATE cxx_std_11) From fef8c01e744c23284aecd93765f2712b3f77c8cf Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Tue, 3 Mar 2026 10:51:37 +0200 Subject: [PATCH 11/29] pressio_data_new_copy takes const src --- include/pressio_data.h | 2 +- src/pressio_data.cc | 2 +- tools/swig/pypressio.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/pressio_data.h b/include/pressio_data.h index 509fd021..a2e42416 100644 --- a/include/pressio_data.h +++ b/include/pressio_data.h @@ -98,7 +98,7 @@ struct pressio_data* pressio_data_new_clone(const struct pressio_data* src); * \param[in] num_dimensions the number of dimensions; must match the length of dimensions * \param[in] dimensions an array corresponding to the dimensions of the data, a copy is made of this on construction */ -struct pressio_data* pressio_data_new_copy(const enum pressio_dtype dtype, void* src, size_t const num_dimensions, size_t const dimensions[]); +struct pressio_data* pressio_data_new_copy(const enum pressio_dtype dtype, const void* src, size_t const num_dimensions, size_t const dimensions[]); /** * allocates a new pressio_data structure and corresponding data. The corresponding data is uninitialized * diff --git a/src/pressio_data.cc b/src/pressio_data.cc index ddac6d76..f7642f8f 100644 --- a/src/pressio_data.cc +++ b/src/pressio_data.cc @@ -459,7 +459,7 @@ struct pressio_data* pressio_data_new_move(const enum pressio_dtype dtype, void* return new pressio_data(pressio_data::move(dtype, data, num_dimensions, dimensions, deleter, metadata)); } -struct pressio_data* pressio_data_new_copy(const enum pressio_dtype dtype, void* src, size_t const num_dimensions, size_t const dimensions[]) { +struct pressio_data* pressio_data_new_copy(const enum pressio_dtype dtype, const void* src, size_t const num_dimensions, size_t const dimensions[]) { return new pressio_data(pressio_data::copy(dtype, src, num_dimensions, dimensions)); } diff --git a/tools/swig/pypressio.h b/tools/swig/pypressio.h index faeca854..db39265e 100644 --- a/tools/swig/pypressio.h +++ b/tools/swig/pypressio.h @@ -187,7 +187,7 @@ std::string io_data_to_bytes(pressio_data* data) { } pressio_data* io_data_from_bytes(const char* buffer, size_t buffer_size) { - return pressio_data_new_copy(pressio_byte_dtype, (void*)buffer, 1, &buffer_size); + return pressio_data_new_copy(pressio_byte_dtype, (const void*)buffer, 1, &buffer_size); } std::vector option_get_strings(pressio_option const* options) { From 1b8bf8428dd1f26b508ec3d988b6e0d9e5fe45c2 Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Mon, 9 Mar 2026 10:33:16 +0200 Subject: [PATCH 12/29] Fix plugin namespaces for plugin registration --- CMakeLists.txt | 53 ++++++++++--------- docs/WritingACompressorPlugin.md | 2 +- docs/WritingAMetricsPlugin.md | 2 +- src/plugins/compressors/MGARDx.cc | 2 +- src/plugins/compressors/chunking.cc | 6 +-- src/plugins/compressors/chunking_impl.cc | 2 +- src/plugins/compressors/chunking_impl.h | 2 +- src/plugins/compressors/delta_encoding.cc | 2 +- src/plugins/compressors/digit_rounding.cc | 2 +- src/plugins/compressors/linear_quantizer.cc | 2 +- src/plugins/compressors/log_transform.cc | 2 +- src/plugins/compressors/resize.cc | 2 +- src/plugins/compressors/sampling.cc | 2 +- src/plugins/compressors/switch.cc | 2 +- src/plugins/compressors/sz_auto.cc | 2 +- src/plugins/compressors/sz_common.cc | 2 +- src/plugins/compressors/sz_common.h | 2 +- src/plugins/compressors/transpose.cc | 2 +- src/plugins/metrics/autocorr.cc | 6 +-- src/plugins/metrics/clipping.cc | 2 +- src/plugins/metrics/diff_pdf.cc | 6 +-- src/plugins/metrics/entropy.cc | 6 +-- src/plugins/metrics/gradlength.cc | 2 +- src/plugins/metrics/historian.cc | 2 +- src/plugins/metrics/input_stats.cc | 2 +- .../{kl_divergance.cc => kl_divergence.cc} | 14 ++--- src/plugins/metrics/ks_test.cc | 2 +- src/plugins/metrics/kth_error.cc | 2 +- src/plugins/metrics/mask1d.cc | 2 +- src/plugins/metrics/max_error.cc | 2 +- src/plugins/metrics/out_of_bounds.cc | 2 +- src/plugins/metrics/pearsons.cc | 8 +-- src/plugins/metrics/print_options.cc | 4 +- src/plugins/metrics/printer.cc | 2 +- src/plugins/metrics/region_of_interest.cc | 2 +- src/plugins/metrics/write_debug_inputs.cc | 2 +- test/test_highlevel.cc | 2 +- 37 files changed, 81 insertions(+), 80 deletions(-) rename src/plugins/metrics/{kl_divergance.cc => kl_divergence.cc} (90%) diff --git a/CMakeLists.txt b/CMakeLists.txt index bae85d2d..bffc0bac 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -178,7 +178,7 @@ libpressio_optional_component(cast "build the cast compressor plugin" /compresso libpressio_optional_component(threshold_small "build the threshold_small compressor plugin" /compressors/threshold_small.cc) libpressio_optional_component(remove_background "build the remove_background compressor plugin" /compressors/remove_background.cc) libpressio_optional_component(mask_interpolation "build the mask_interpolation compressor plugin" /compressors/mask_interpolation.cc) -# libpressio_optional_component(max_error "build the max_error metric plugin" /metrics/max_error.cc) +libpressio_optional_component(max_error "build the max_error metric plugin" /metrics/max_error.cc) libpressio_optional_component(repeat "build the repeat compressor plugin" /compressors/repeat.cc) libpressio_optional_component(pw_rel "build the pw_rel compressor plugin" /compressors/pw_rel.cc) libpressio_optional_component(csv "build the CSV io plugin" /io/csv.cc) @@ -186,37 +186,38 @@ libpressio_optional_component(numpy "build the numpy io plugin" /io/numpy.cc) libpressio_optional_component(copy_template "build the numpy io plugin" /io/copy_template.cc) libpressio_optional_component(size "build the size metrics plugin" /metrics/size.cc) libpressio_optional_component(time "build the time metrics plugin" /metrics/time.cc) -# libpressio_optional_component(autocorr "build the autocorr metrics plugin" /metrics/autocorr.cc) -# libpressio_optional_component(chunking "build the chunking compressor plugin" "/compressors/chunking.cc;/compressors/chunking_impl.cc") -# libpressio_optional_component(delta_encoding "build the delta_encoding compressor plugin" /compressors/delta_encoding.cc) -# libpressio_optional_component(diff_pdf "build the difference probability distribution function metric" /metrics/diff_pdf.cc) +libpressio_optional_component(autocorr "build the autocorr metrics plugin" /metrics/autocorr.cc) +libpressio_optional_component(chunking "build the chunking compressor plugin" "/compressors/chunking.cc;/compressors/chunking_impl.cc") +list(REMOVE_ITEM LIBPRESSIO_BUILT_PLUGINS "${CMAKE_CURRENT_SOURCE_DIR}/src/plugins///compressors/chunking_impl.cc") +libpressio_optional_component(delta_encoding "build the delta_encoding compressor plugin" /compressors/delta_encoding.cc) +libpressio_optional_component(diff_pdf "build the difference probability distribution function metric" /metrics/diff_pdf.cc) libpressio_optional_component(empty "build the empty IO plugin" /io/empty.cc) -# libpressio_optional_component(entropy "build the entropy metrics plugin" /metrics/entropy.cc) -# libpressio_optional_component(historian "build the historian metrics plugin" /metrics/historian.cc) -# libpressio_optional_component(input_stats "build the input_stats metrics plugin" /metrics/input_stats.cc) +libpressio_optional_component(entropy "build the entropy metrics plugin" /metrics/entropy.cc) +libpressio_optional_component(historian "build the historian metrics plugin" /metrics/historian.cc) +libpressio_optional_component(input_stats "build the input_stats metrics plugin" /metrics/input_stats.cc) libpressio_optional_component(iota "build the iota io plugin" /io/iota.cc) -# libpressio_optional_component(kl_divergance "build the kl_divergance plugin" /metrics/kl_divergance.cc) -# libpressio_optional_component(ks_test "build the KS test metrics plugin" /metrics/ks_test.cc) -# libpressio_optional_component(kth_error "build the kth error metrics plugin" /metrics/kth_error.cc) -# libpressio_optional_component(linear_quantizer "build the linear quantizer compressor plugin" /compressors/linear_quantizer.cc) -# libpressio_optional_component(log_transform "build the log_transform compressor plugin" /compressors/log_transform.cc) -# libpressio_optional_component(mask1d "build the mask1d metrics plugin" /metrics/mask1d.cc) -# libpressio_optional_component(pearsons "build the pearsons metrics plugin" /metrics/pearsons.cc) -# libpressio_optional_component(printer "build the printer metrics plugin" /metrics/printer.cc) -# libpressio_optional_component(region_of_interest "build the region_of_interest metrics plugin" /metrics/region_of_interest.cc) -# libpressio_optional_component(resize "build the resize compressor plugin" /compressors/resize.cc) -# libpressio_optional_component(sampling "build the sampling compressors plugin" /compressors/sampling.cc) +libpressio_optional_component(kl_divergence "build the kl_divergence plugin" /metrics/kl_divergence.cc) +libpressio_optional_component(ks_test "build the KS test metrics plugin" /metrics/ks_test.cc) +libpressio_optional_component(kth_error "build the kth error metrics plugin" /metrics/kth_error.cc) +libpressio_optional_component(linear_quantizer "build the linear quantizer compressor plugin" /compressors/linear_quantizer.cc) +libpressio_optional_component(log_transform "build the log_transform compressor plugin" /compressors/log_transform.cc) +libpressio_optional_component(mask1d "build the mask1d metrics plugin" /metrics/mask1d.cc) +libpressio_optional_component(pearsons "build the pearsons metrics plugin" /metrics/pearsons.cc) +libpressio_optional_component(printer "build the printer metrics plugin" /metrics/printer.cc) +libpressio_optional_component(region_of_interest "build the region_of_interest metrics plugin" /metrics/region_of_interest.cc) +libpressio_optional_component(resize "build the resize compressor plugin" /compressors/resize.cc) +libpressio_optional_component(sampling "build the sampling compressors plugin" /compressors/sampling.cc) libpressio_optional_component(select "build the io selection plugin" /io/select.cc) -# libpressio_optional_component(switch "build the switch comprssor plugin" /compressors/switch.cc) -# libpressio_optional_component(transpose "build the transpose compressor plugin" /compressors/transpose.cc) -# libpressio_optional_component(print_options "print the options passed to set_options" /metrics/print_options.cc) +libpressio_optional_component(switch "build the switch comprssor plugin" /compressors/switch.cc) +libpressio_optional_component(transpose "build the transpose compressor plugin" /compressors/transpose.cc) +libpressio_optional_component(print_options "print the options passed to set_options" /metrics/print_options.cc) libpressio_optional_component(data_gap "compute the data_gap" /metrics/data_gap.cc) -# libpressio_optional_component(clipping "compute the number of values that exceed an absolute error bound" /metrics/clipping.cc) +libpressio_optional_component(clipping "compute the number of values that exceed an absolute error bound" /metrics/clipping.cc) libpressio_optional_component(ssim "computes the SSIM" /metrics/ssim.cc) libpressio_optional_component(sobolev "computes the sobolev norm" /metrics/sobolevp2.cc) -# libpressio_optional_component(gradient "computes the gradient length" /metrics/gradlength.cc) -# libpressio_optional_component(out_of_bounds "computes the gradient length" /metrics/out_of_bounds.cc) -# libpressio_optional_component(write_debug_inputs "metric that writes output buffers for testing" /metrics/write_debug_inputs.cc) +libpressio_optional_component(gradient "computes the gradient length" /metrics/gradlength.cc) +libpressio_optional_component(out_of_bounds "computes the gradient length" /metrics/out_of_bounds.cc) +libpressio_optional_component(write_debug_inputs "metric that writes output buffers for testing" /metrics/write_debug_inputs.cc) set(roibin_sources /compressors/roibin.cc /compressors/binning.cc) # /compressors/masked_binning.cc) libpressio_optional_component(roibin "build the roibin metacompressor" "${roibin_sources}") libpressio_optional_component(pipeline "build the pipeline metacompressor" /compressors/pipeline.cc) diff --git a/docs/WritingACompressorPlugin.md b/docs/WritingACompressorPlugin.md index de20e62f..db0c2e5e 100644 --- a/docs/WritingACompressorPlugin.md +++ b/docs/WritingACompressorPlugin.md @@ -136,7 +136,7 @@ We finally register the library with libpressio: ```cpp -static pressio_register X(compressor_plugins(), "log", [](){ return std::make_unique();}); +static pressio_register registration(compressor_plugins(), "log", [](){ return std::make_unique();}); ``` High quality compressor modules may be accepted into libpressio. Contributed modules should be placed in to diff --git a/docs/WritingAMetricsPlugin.md b/docs/WritingAMetricsPlugin.md index dac5f3fe..6a822534 100644 --- a/docs/WritingAMetricsPlugin.md +++ b/docs/WritingAMetricsPlugin.md @@ -75,7 +75,7 @@ class counting_metric: public libpressio_metrics_plugin { Finally, we will register the plugin in the under the names "counts" in the metrics plugging registry ```cpp -static pressio_register X(metrics_plugins(), "counts", [](){ return std::make_unique(); }); +static pressio_register registration(metrics_plugins(), "counts", [](){ return std::make_unique(); }); ``` Then a user of the library can then ask libpressio to construct their new plugin as normal. diff --git a/src/plugins/compressors/MGARDx.cc b/src/plugins/compressors/MGARDx.cc index f2c07cf4..2f6cbeb9 100644 --- a/src/plugins/compressors/MGARDx.cc +++ b/src/plugins/compressors/MGARDx.cc @@ -132,7 +132,7 @@ class mgardx_compressor_plugin : public libpressio_compressor_plugin { double eb = 1e-5; }; -pressio_register plugin(compressor_plugins(), "mgardx", []() { +pressio_register registration(compressor_plugins(), "mgardx", []() { return compat::make_unique(); }); diff --git a/src/plugins/compressors/chunking.cc b/src/plugins/compressors/chunking.cc index 6b39135b..c88416ad 100644 --- a/src/plugins/compressors/chunking.cc +++ b/src/plugins/compressors/chunking.cc @@ -13,7 +13,7 @@ #include "std_compat/numeric.h" #include "std_compat/functional.h" -namespace libpressio { namespace compressors { namespace chunking { +namespace libpressio { namespace compressors { namespace chunking_ns { class chunking_plugin: public libpressio_compressor_plugin { public: @@ -133,7 +133,7 @@ class chunking_plugin: public libpressio_compressor_plugin { } else { //non-contigious, need to copy pressio_data input = domain_manager().make_readable(domain_plugins().build("malloc"), *real_input); - tmp = libpressio::compressors::chunking::chunk_data(input, chunk_size, {{"nthreads", nthreads}}); + tmp = libpressio::compressors::chunking_ns::chunk_data(input, chunk_size, {{"nthreads", nthreads}}); auto ptr = static_cast(tmp.data()); for (size_t i = 0; i < num_chunks; ++i) { inputs.emplace_back(pressio_data::nonowning(real_input->dtype(), ptr+(i*stride), chunk_size, "malloc")); @@ -265,7 +265,7 @@ class chunking_plugin: public libpressio_compressor_plugin { memcpy(outptr+accum_size_out, outputs[i].data(), stride_in_bytes); accum_size_out += stride_in_bytes; } - libpressio::compressors::chunking::restore_data(*output, combined, chunk_size, {{"nthreads", nthreads}}); + libpressio::compressors::chunking_ns::restore_data(*output, combined, chunk_size, {{"nthreads", nthreads}}); } auto dechunk_end = std::chrono::steady_clock::now(); dechunk_time = std::chrono::duration_cast(dechunk_end-dechunk_begin).count(); diff --git a/src/plugins/compressors/chunking_impl.cc b/src/plugins/compressors/chunking_impl.cc index 4ccfd5b2..99a551ab 100644 --- a/src/plugins/compressors/chunking_impl.cc +++ b/src/plugins/compressors/chunking_impl.cc @@ -11,7 +11,7 @@ namespace libpressio { namespace compressors { -namespace chunking { +namespace chunking_ns { namespace detail { struct copy_from_blocks { diff --git a/src/plugins/compressors/chunking_impl.h b/src/plugins/compressors/chunking_impl.h index f5b42cd8..d2b06085 100644 --- a/src/plugins/compressors/chunking_impl.h +++ b/src/plugins/compressors/chunking_impl.h @@ -9,7 +9,7 @@ struct pressio_options; namespace libpressio { namespace compressors { -namespace chunking { +namespace chunking_ns { /** * preform the chunking as optimal-ally we know how to diff --git a/src/plugins/compressors/delta_encoding.cc b/src/plugins/compressors/delta_encoding.cc index b462a344..0b07e338 100644 --- a/src/plugins/compressors/delta_encoding.cc +++ b/src/plugins/compressors/delta_encoding.cc @@ -4,7 +4,7 @@ #include #include -namespace libpressio { namespace compressors { namespace delta_encoder { +namespace libpressio { namespace compressors { namespace delta_encoding_ns { struct delta_encoder { template diff --git a/src/plugins/compressors/digit_rounding.cc b/src/plugins/compressors/digit_rounding.cc index b74cdd45..0821fcc7 100644 --- a/src/plugins/compressors/digit_rounding.cc +++ b/src/plugins/compressors/digit_rounding.cc @@ -11,7 +11,7 @@ #include "pressio_compressor.h" #include "std_compat/memory.h" -namespace libpressio { namespace compressors { namespace digit_rounding { +namespace libpressio { namespace compressors { namespace digit_rounding_ns { #define INVALID_TYPE -1 diff --git a/src/plugins/compressors/linear_quantizer.cc b/src/plugins/compressors/linear_quantizer.cc index ee51a734..097c3cf7 100644 --- a/src/plugins/compressors/linear_quantizer.cc +++ b/src/plugins/compressors/linear_quantizer.cc @@ -4,7 +4,7 @@ #include #include -namespace libpressio { namespace compressors { namespace linear_quantizer { +namespace libpressio { namespace compressors { namespace linear_quantizer_ns { struct linear_quantizer_step_finder { template diff --git a/src/plugins/compressors/log_transform.cc b/src/plugins/compressors/log_transform.cc index 83040a8e..eeecb100 100644 --- a/src/plugins/compressors/log_transform.cc +++ b/src/plugins/compressors/log_transform.cc @@ -5,7 +5,7 @@ #include #include -namespace libpressio { namespace compressors { namespace log_transform { +namespace libpressio { namespace compressors { namespace log_transform_ns { struct log_encoder { template diff --git a/src/plugins/compressors/resize.cc b/src/plugins/compressors/resize.cc index 048825a5..a57982f3 100644 --- a/src/plugins/compressors/resize.cc +++ b/src/plugins/compressors/resize.cc @@ -11,7 +11,7 @@ #include "pressio_compressor.h" #include "std_compat/memory.h" -namespace libpressio { namespace compressors { namespace resize { +namespace libpressio { namespace compressors { namespace resize_ns { class resize_meta_compressor_plugin : public libpressio_compressor_plugin { diff --git a/src/plugins/compressors/sampling.cc b/src/plugins/compressors/sampling.cc index 0964d84b..a5b935e5 100644 --- a/src/plugins/compressors/sampling.cc +++ b/src/plugins/compressors/sampling.cc @@ -12,7 +12,7 @@ #include "pressio_compressor.h" #include "std_compat/memory.h" -namespace libpressio { namespace compressors { namespace sampling { +namespace libpressio { namespace compressors { namespace sampling_ns { class sample_compressor_plugin: public libpressio_compressor_plugin { public: diff --git a/src/plugins/compressors/switch.cc b/src/plugins/compressors/switch.cc index 9b828f1d..7598fa3f 100644 --- a/src/plugins/compressors/switch.cc +++ b/src/plugins/compressors/switch.cc @@ -3,7 +3,7 @@ #include #include -namespace libpressio { namespace compressors { namespace switch_plugin { +namespace libpressio { namespace compressors { namespace switch_ns { class switch_compressor: public libpressio_compressor_plugin { pressio_options get_options_impl() const override { diff --git a/src/plugins/compressors/sz_auto.cc b/src/plugins/compressors/sz_auto.cc index 3b181543..e9a15ce1 100644 --- a/src/plugins/compressors/sz_auto.cc +++ b/src/plugins/compressors/sz_auto.cc @@ -12,7 +12,7 @@ #include "pressio_compressor.h" #include "std_compat/memory.h" -namespace libpressio { namespace compressor { namespace sz_auto { +namespace libpressio { namespace compressor { namespace sz_auto_ns { class sz_auto_plugin: public libpressio_compressor_plugin { public: diff --git a/src/plugins/compressors/sz_common.cc b/src/plugins/compressors/sz_common.cc index 75cb26fb..e40fbd46 100644 --- a/src/plugins/compressors/sz_common.cc +++ b/src/plugins/compressors/sz_common.cc @@ -9,7 +9,7 @@ #include "pressio_option.h" #include "sz_common.h" -namespace libpressio { namespace compressors { namespace sz_common { +namespace libpressio { namespace compressors { namespace sz_common_ns { int libpressio_type_to_sz_type(pressio_dtype type) { switch(type) diff --git a/src/plugins/compressors/sz_common.h b/src/plugins/compressors/sz_common.h index 09a8cdba..ddadb09f 100644 --- a/src/plugins/compressors/sz_common.h +++ b/src/plugins/compressors/sz_common.h @@ -15,7 +15,7 @@ (SZ_VER_MAJOR == major && SZ_VER_MINOR == minor && SZ_VER_BUILD > build) || \ (SZ_VER_MAJOR == major && SZ_VER_MINOR == minor && SZ_VER_BUILD == build && SZ_VER_REVISION >= revision)) -namespace libpressio { namespace compressors { namespace sz_common { +namespace libpressio { namespace compressors { namespace sz_common_ns { int libpressio_type_to_sz_type(pressio_dtype type); struct sz_init_handle { diff --git a/src/plugins/compressors/transpose.cc b/src/plugins/compressors/transpose.cc index dee90aba..8dc36686 100644 --- a/src/plugins/compressors/transpose.cc +++ b/src/plugins/compressors/transpose.cc @@ -10,7 +10,7 @@ #include "pressio_compressor.h" #include "std_compat/memory.h" -namespace libpressio { namespace compressors { namespace transpose { +namespace libpressio { namespace compressors { namespace transpose_ns { class transpose_meta_compressor_plugin : public libpressio_compressor_plugin { diff --git a/src/plugins/metrics/autocorr.cc b/src/plugins/metrics/autocorr.cc index 8bd52230..8cbe31cc 100644 --- a/src/plugins/metrics/autocorr.cc +++ b/src/plugins/metrics/autocorr.cc @@ -10,7 +10,7 @@ #include "std_compat/memory.h" namespace libpressio { namespace metrics { -namespace autocorr { +namespace autocorr_ns { struct metrics { pressio_data autocorr; }; @@ -130,7 +130,7 @@ class autocorr_plugin : public libpressio_metrics_plugin { } int end_decompress_impl(struct pressio_data const*, struct pressio_data const* output, int ) override { if(!output || !output->has_data() || !input_data.has_data()) return 0; - err_metrics = pressio_data_for_each(input_data, domain_manager().make_readable(domain_plugins().build("malloc"), *output), autocorr::compute_metrics{autocorr_lags}); + err_metrics = pressio_data_for_each(input_data, domain_manager().make_readable(domain_plugins().build("malloc"), *output), autocorr_ns::compute_metrics{autocorr_lags}); return 0; } @@ -181,7 +181,7 @@ class autocorr_plugin : public libpressio_metrics_plugin { private: uint64_t autocorr_lags = 100; pressio_data input_data = pressio_data::empty(pressio_byte_dtype, {}); - compat::optional err_metrics; + compat::optional err_metrics; }; pressio_register registration(metrics_plugins(), "autocorr", [](){ return compat::make_unique(); }); diff --git a/src/plugins/metrics/clipping.cc b/src/plugins/metrics/clipping.cc index 6daca007..c7f9c5a1 100644 --- a/src/plugins/metrics/clipping.cc +++ b/src/plugins/metrics/clipping.cc @@ -7,7 +7,7 @@ #include "libpressio_ext/cpp/domain_manager.h" #include "std_compat/memory.h" -namespace libpressio { namespace metrics { namespace clipping_metrics_ns { +namespace libpressio { namespace metrics { namespace clipping_ns { class clipping_plugin : public libpressio_metrics_plugin { public: diff --git a/src/plugins/metrics/diff_pdf.cc b/src/plugins/metrics/diff_pdf.cc index f35920b0..83c53e51 100644 --- a/src/plugins/metrics/diff_pdf.cc +++ b/src/plugins/metrics/diff_pdf.cc @@ -9,7 +9,7 @@ #include "std_compat/memory.h" namespace libpressio { namespace metrics { -namespace diff_pdf { +namespace diff_pdf_ns { static const uint64_t zero = 0; struct metrics { pressio_data histogram = pressio_data::copy(pressio_uint64_dtype, &zero, {1}); @@ -67,7 +67,7 @@ class diff_pdf_plugin : public libpressio_metrics_plugin { } int end_decompress_impl(struct pressio_data const*, struct pressio_data const* output, int ) override { if(!output || !output->has_data() || !input_data.has_data()) return 0; - err_metrics = pressio_data_for_each(input_data, domain_manager().make_readable(domain_plugins().build("malloc"), *output), diff_pdf::compute_metrics{pdf_intervals}); + err_metrics = pressio_data_for_each(input_data, domain_manager().make_readable(domain_plugins().build("malloc"), *output), diff_pdf_ns::compute_metrics{pdf_intervals}); return 0; } @@ -129,7 +129,7 @@ class diff_pdf_plugin : public libpressio_metrics_plugin { private: uint64_t pdf_intervals = 2000; pressio_data input_data = pressio_data::empty(pressio_byte_dtype, {}); - compat::optional err_metrics; + compat::optional err_metrics; }; pressio_register registration(metrics_plugins(), "diff_pdf", [](){ return compat::make_unique(); }); diff --git a/src/plugins/metrics/entropy.cc b/src/plugins/metrics/entropy.cc index d02528dd..0aecc8a5 100644 --- a/src/plugins/metrics/entropy.cc +++ b/src/plugins/metrics/entropy.cc @@ -13,7 +13,7 @@ #include namespace libpressio { namespace metrics { -namespace entropy { +namespace entropy_ns { struct compute_metrics{ template double operator()(ForwardIt1 input_begin, ForwardIt1 input_end) @@ -46,13 +46,13 @@ class entropy_plugin : public libpressio_metrics_plugin int begin_compress_impl(const struct pressio_data* input, struct pressio_data const*) override { if(!input || !input->has_data()) return 0; - input_entropy = pressio_data_for_each(domain_manager().make_readable(domain_plugins().build("malloc"), *input), entropy::compute_metrics{}); + input_entropy = pressio_data_for_each(domain_manager().make_readable(domain_plugins().build("malloc"), *input), entropy_ns::compute_metrics{}); return 0; } int end_decompress_impl(struct pressio_data const*, struct pressio_data const* output, int) override { if(!output || !output->has_data()) return 0; - dec_entropy = pressio_data_for_each(domain_manager().make_readable(domain_plugins().build("malloc"), *output), entropy::compute_metrics{}); + dec_entropy = pressio_data_for_each(domain_manager().make_readable(domain_plugins().build("malloc"), *output), entropy_ns::compute_metrics{}); return 0; } diff --git a/src/plugins/metrics/gradlength.cc b/src/plugins/metrics/gradlength.cc index 0908b745..4b4367f2 100644 --- a/src/plugins/metrics/gradlength.cc +++ b/src/plugins/metrics/gradlength.cc @@ -9,7 +9,7 @@ #include "libpressio_ext/cpp/domain_manager.h" #include -namespace libpressio { namespace metrics { namespace gradlength_metrics_ns { +namespace libpressio { namespace metrics { namespace gradlength_ns { #define QCAT_FLOAT 0 #define QCAT_DOUBLE 1 #define QCAT_INT32 2 diff --git a/src/plugins/metrics/historian.cc b/src/plugins/metrics/historian.cc index d9c9c868..53bf92bf 100644 --- a/src/plugins/metrics/historian.cc +++ b/src/plugins/metrics/historian.cc @@ -5,7 +5,7 @@ #include "std_compat/memory.h" #include "std_compat/string_view.h" -namespace libpressio { namespace metrics { namespace historian { +namespace libpressio { namespace metrics { namespace historian_ns { class pressio_historian_metric: public libpressio_metrics_plugin { diff --git a/src/plugins/metrics/input_stats.cc b/src/plugins/metrics/input_stats.cc index 8e5f7759..fde418de 100644 --- a/src/plugins/metrics/input_stats.cc +++ b/src/plugins/metrics/input_stats.cc @@ -7,7 +7,7 @@ #include "libpressio_ext/cpp/options.h" #include "std_compat/memory.h" -namespace libpressio { namespace metrics { namespace input_stats_metrics_ns { +namespace libpressio { namespace metrics { namespace input_stats_ns { struct input_stat{ input_stat(compat::span const& inputs, diff --git a/src/plugins/metrics/kl_divergance.cc b/src/plugins/metrics/kl_divergence.cc similarity index 90% rename from src/plugins/metrics/kl_divergance.cc rename to src/plugins/metrics/kl_divergence.cc index f8c3489a..598471c9 100644 --- a/src/plugins/metrics/kl_divergance.cc +++ b/src/plugins/metrics/kl_divergence.cc @@ -13,7 +13,7 @@ #include "libpressio_ext/cpp/domain_manager.h" namespace libpressio { namespace metrics { -namespace kl_divergence{ +namespace kl_divergence_ns { struct kl_metrics { double p_q=0; double q_p=0; @@ -45,7 +45,7 @@ namespace kl_divergence{ } }; -class kl_divergance_plugin : public libpressio_metrics_plugin { +class kl_divergence_plugin : public libpressio_metrics_plugin { public: int begin_compress_impl(const struct pressio_data* input, @@ -59,8 +59,8 @@ class kl_divergance_plugin : public libpressio_metrics_plugin { struct pressio_data const* output, int) override { if(!output || !output->has_data() || !input_data.has_data()) return 0; - err_metrics = pressio_data_for_each(input_data, domain_manager().make_readable(domain_plugins().build("malloc"), *output), - kl_divergence::compute_metrics{}); + err_metrics = pressio_data_for_each(input_data, domain_manager().make_readable(domain_plugins().build("malloc"), *output), + kl_divergence_ns::compute_metrics{}); return 0; } @@ -94,7 +94,7 @@ class kl_divergance_plugin : public libpressio_metrics_plugin { } std::unique_ptr clone() override { - return compat::make_unique(*this); + return compat::make_unique(*this); } const char* prefix() const override { @@ -103,10 +103,10 @@ class kl_divergance_plugin : public libpressio_metrics_plugin { private: pressio_data input_data = pressio_data::empty(pressio_byte_dtype, {}); - compat::optional err_metrics; + compat::optional err_metrics; }; pressio_register registration(metrics_plugins(), "kl_divergence", - []() { return compat::make_unique(); }); + []() { return compat::make_unique(); }); } }} diff --git a/src/plugins/metrics/ks_test.cc b/src/plugins/metrics/ks_test.cc index 754cf05f..52d99dd1 100644 --- a/src/plugins/metrics/ks_test.cc +++ b/src/plugins/metrics/ks_test.cc @@ -47,7 +47,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -namespace libpressio { namespace metrics { namespace ks_test { +namespace libpressio { namespace metrics { namespace ks_test_ns { template void cdf(ForwardItItems items_begin, ForwardItItems items_end, ForwardItValues values_begin, ForwardItValues values_end, diff --git a/src/plugins/metrics/kth_error.cc b/src/plugins/metrics/kth_error.cc index b26d2616..ff1b589b 100644 --- a/src/plugins/metrics/kth_error.cc +++ b/src/plugins/metrics/kth_error.cc @@ -12,7 +12,7 @@ #include "libpressio_ext/cpp/domain_manager.h" namespace libpressio { namespace metrics { - namespace kth_error { + namespace kth_error_ns { struct kth_error{ template double operator()(ForwardIt1 input_begin, ForwardIt1 input_end, diff --git a/src/plugins/metrics/mask1d.cc b/src/plugins/metrics/mask1d.cc index e819ab65..5a6cf50c 100644 --- a/src/plugins/metrics/mask1d.cc +++ b/src/plugins/metrics/mask1d.cc @@ -2,7 +2,7 @@ #include #include "libpressio_ext/cpp/domain_manager.h" -namespace libpressio { namespace metrics { namespace mask1d { +namespace libpressio { namespace metrics { namespace mask1d_ns { struct apply_mask{ template diff --git a/src/plugins/metrics/max_error.cc b/src/plugins/metrics/max_error.cc index b02ffd5d..f98236d5 100644 --- a/src/plugins/metrics/max_error.cc +++ b/src/plugins/metrics/max_error.cc @@ -9,7 +9,7 @@ #include "std_compat/optional.h" #include -namespace libpressio { namespace metrics { namespace max_error_metrics_ns { +namespace libpressio { namespace metrics { namespace max_error_ns { class max_error_plugin : public libpressio_metrics_plugin { struct max_error_info { diff --git a/src/plugins/metrics/out_of_bounds.cc b/src/plugins/metrics/out_of_bounds.cc index 90856b64..50e89f3a 100644 --- a/src/plugins/metrics/out_of_bounds.cc +++ b/src/plugins/metrics/out_of_bounds.cc @@ -11,7 +11,7 @@ #include "libpressio_ext/cpp/domain_manager.h" #include "std_compat/memory.h" -namespace libpressio { namespace metrics { namespace out_of_bounds_metrics_ns { +namespace libpressio { namespace metrics { namespace out_of_bounds_ns { class out_of_bounds_plugin : public libpressio_metrics_plugin { public: diff --git a/src/plugins/metrics/pearsons.cc b/src/plugins/metrics/pearsons.cc index b65a14ab..bae438d4 100644 --- a/src/plugins/metrics/pearsons.cc +++ b/src/plugins/metrics/pearsons.cc @@ -11,7 +11,7 @@ namespace libpressio { namespace metrics { -namespace pearson { +namespace pearsons_ns { struct pearson_metrics { double r = 0.0; double r2 = 0.0; @@ -83,8 +83,8 @@ class pearsons_plugin : public libpressio_metrics_plugin struct pressio_data const* output, int) override { if(!output || !output->has_data() || !input_data.has_data()) return 0; - err_metrics = pressio_data_for_each(input_data, domain_manager().make_readable(domain_plugins().build("malloc"), *output), - pearson::compute_metrics{}); + err_metrics = pressio_data_for_each(input_data, domain_manager().make_readable(domain_plugins().build("malloc"), *output), + pearsons_ns::compute_metrics{}); return 0; } @@ -129,7 +129,7 @@ class pearsons_plugin : public libpressio_metrics_plugin private: pressio_data input_data = pressio_data::empty(pressio_byte_dtype, {}); - compat::optional err_metrics; + compat::optional err_metrics; }; pressio_register registration(metrics_plugins(), "pearson", []() { diff --git a/src/plugins/metrics/print_options.cc b/src/plugins/metrics/print_options.cc index 2fe084ea..5d920b8d 100644 --- a/src/plugins/metrics/print_options.cc +++ b/src/plugins/metrics/print_options.cc @@ -8,7 +8,7 @@ #include "std_compat/memory.h" #include -namespace libpressio { namespace metrics { namespace print_options_metrics_ns { +namespace libpressio { namespace metrics { namespace print_options_ns { class print_options_plugin : public libpressio_metrics_plugin { public: @@ -50,6 +50,6 @@ class print_options_plugin : public libpressio_metrics_plugin { }; -pressio_register metrics_print_options_plugin(metrics_plugins(), "print_options", [](){ return compat::make_unique(); }); +pressio_register registration(metrics_plugins(), "print_options", [](){ return compat::make_unique(); }); }} } diff --git a/src/plugins/metrics/printer.cc b/src/plugins/metrics/printer.cc index 30bc3fd5..1f60cc96 100644 --- a/src/plugins/metrics/printer.cc +++ b/src/plugins/metrics/printer.cc @@ -6,7 +6,7 @@ #include "std_compat/memory.h" #include -namespace libpressio { namespace metrics { namespace printer { +namespace libpressio { namespace metrics { namespace printer_ns { class printer_plugin : public libpressio_metrics_plugin { std::string maybe_name() { if(get_name().empty()) return ""; diff --git a/src/plugins/metrics/region_of_interest.cc b/src/plugins/metrics/region_of_interest.cc index cf29d366..bc8b36a2 100644 --- a/src/plugins/metrics/region_of_interest.cc +++ b/src/plugins/metrics/region_of_interest.cc @@ -12,7 +12,7 @@ namespace libpressio { namespace metrics { -namespace region_of_interest { +namespace region_of_interest_ns { struct region_of_interest_metrics { compat::optional input_avg; compat::optional input_sum; diff --git a/src/plugins/metrics/write_debug_inputs.cc b/src/plugins/metrics/write_debug_inputs.cc index d5a2f897..06c2fdd8 100644 --- a/src/plugins/metrics/write_debug_inputs.cc +++ b/src/plugins/metrics/write_debug_inputs.cc @@ -11,7 +11,7 @@ #include #include -namespace libpressio { namespace metrics { namespace write_debug_inputs_metrics_ns { +namespace libpressio { namespace metrics { namespace write_debug_inputs_ns { std::mutex idx_mutex; uint64_t input_write_idx = 0; diff --git a/test/test_highlevel.cc b/test/test_highlevel.cc index da58d952..2d59532c 100644 --- a/test/test_highlevel.cc +++ b/test/test_highlevel.cc @@ -76,7 +76,7 @@ class highlevel_mock_compressor_plugin : public libpressio_compressor_plugin { std::string s = ""; }; -pressio_register compressor_many_fields_plugin(compressor_plugins(), "highlevel_mock", []() { +pressio_register registration(compressor_plugins(), "highlevel_mock", []() { return compat::make_unique(); }); From 9b9984c6f57824270a4ed1b92915845dcfed84af Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Mon, 9 Mar 2026 10:44:47 +0200 Subject: [PATCH 13/29] fix one more plugin --- CMakeLists.txt | 2 +- src/plugins/compressors/masked_binning.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bffc0bac..235c9e2a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -218,7 +218,7 @@ libpressio_optional_component(sobolev "computes the sobolev norm" /metrics/sobol libpressio_optional_component(gradient "computes the gradient length" /metrics/gradlength.cc) libpressio_optional_component(out_of_bounds "computes the gradient length" /metrics/out_of_bounds.cc) libpressio_optional_component(write_debug_inputs "metric that writes output buffers for testing" /metrics/write_debug_inputs.cc) -set(roibin_sources /compressors/roibin.cc /compressors/binning.cc) # /compressors/masked_binning.cc) +set(roibin_sources /compressors/roibin.cc /compressors/binning.cc compressors/masked_binning.cc) libpressio_optional_component(roibin "build the roibin metacompressor" "${roibin_sources}") libpressio_optional_component(pipeline "build the pipeline metacompressor" /compressors/pipeline.cc) diff --git a/src/plugins/compressors/masked_binning.cc b/src/plugins/compressors/masked_binning.cc index 99be1e24..7866634f 100644 --- a/src/plugins/compressors/masked_binning.cc +++ b/src/plugins/compressors/masked_binning.cc @@ -6,7 +6,7 @@ #include "libpressio_ext/cpp/domain_manager.h" #include "roibin_impl.h" -namespace libpressio { namespace compressors { namespace mask_binning_ns { +namespace libpressio { namespace compressors { namespace masked_binning_ns { using namespace utilities; From 98ea03f7ebf3684eb54ef4aaa759d9b2566fecc6 Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Mon, 9 Mar 2026 10:46:12 +0200 Subject: [PATCH 14/29] fix diff --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 235c9e2a..cc8021be 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -218,7 +218,7 @@ libpressio_optional_component(sobolev "computes the sobolev norm" /metrics/sobol libpressio_optional_component(gradient "computes the gradient length" /metrics/gradlength.cc) libpressio_optional_component(out_of_bounds "computes the gradient length" /metrics/out_of_bounds.cc) libpressio_optional_component(write_debug_inputs "metric that writes output buffers for testing" /metrics/write_debug_inputs.cc) -set(roibin_sources /compressors/roibin.cc /compressors/binning.cc compressors/masked_binning.cc) +set(roibin_sources /compressors/roibin.cc /compressors/binning.cc /compressors/masked_binning.cc) libpressio_optional_component(roibin "build the roibin metacompressor" "${roibin_sources}") libpressio_optional_component(pipeline "build the pipeline metacompressor" /compressors/pipeline.cc) From a616f4c7201636c9b4f40ebe53d2e183f8a05b02 Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Tue, 10 Mar 2026 09:29:24 +0200 Subject: [PATCH 15/29] port pressio_register_generator to CMake --- CMakeLists.txt | 48 ++++++------- src/pressio_register_generator.cc | 110 ------------------------------ tools/build/CMakeLists.txt | 11 --- 3 files changed, 22 insertions(+), 147 deletions(-) delete mode 100644 src/pressio_register_generator.cc delete mode 100644 tools/build/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index cc8021be..75930f54 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -701,34 +701,30 @@ if(LIBPRESSIO_HAS_GRIB) libpressio_plugin_file(io/grib.cc) endif() -message("STATUS" "LIBPRESSIO_BUILT_PLUGINS = ${LIBPRESSIO_BUILT_PLUGINS}") - # static libraries and some system linkers will strip the registration classes # causing nothing to be registered -if (CMAKE_CROSSCOMPILING) - set(_pressio_register_generator "bin/pressio_register_generator${CMAKE_HOST_EXECUTABLE_SUFFIX}") - add_custom_command( - OUTPUT ${_pressio_register_generator} - COMMAND ${CMAKE_COMMAND} - -DCMAKE_BUILD_TYPE:STRING="Release" - -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE:PATH="${CMAKE_BINARY_DIR}/bin" - -DCMAKE_CXX_FLAGS="" - -DCMAKE_EXE_LINKER_FLAGS="" - -B"bin" - -H"${CMAKE_SOURCE_DIR}/tools/build" - COMMAND ${CMAKE_COMMAND} --build bin --config Release - ) -else() - set(_pressio_register_generator pressio_register_generator) - add_subdirectory(tools/build) -endif() -add_custom_command( - OUTPUT pressio_manual_register.cc - COMMAND ${_pressio_register_generator} -c "${LIBPRESSIO_BUILT_PLUGINS}" -o "${CMAKE_CURRENT_BINARY_DIR}/pressio_manual_register.cc" - COMMENT "generating registration source file" - DEPENDS ${_pressio_register_generator} ${LIBPRESSIO_BUILT_PLUGINS} src/pressio_register_generator.cc - VERBATIM -) +message("STATUS" "LIBPRESSIO_BUILT_PLUGINS = ${LIBPRESSIO_BUILT_PLUGINS}") +list(TRANSFORM LIBPRESSIO_BUILT_PLUGINS REPLACE ".*\\/([a-zA-Z0-9_]*)\\/([a-zA-Z0-9_]*)\.[a-zA-Z0-9_]*\$" "\\1/\\2" OUTPUT_VARIABLE LIBPRESSIO_REGISTRATION_PLUGINS) +list(SORT LIBPRESSIO_REGISTRATION_PLUGINS) +list(TRANSFORM LIBPRESSIO_REGISTRATION_PLUGINS REPLACE "([a-zA-Z0-9_]*)\\/([a-zA-Z0-9_]*)\$" " namespace \\1 { namespace \\2_ns { extern pressio_register registration! } }" OUTPUT_VARIABLE LIBPRESSIO_REGISTRATION_EXTERNS) +string(REPLACE ";" "\n" LIBPRESSIO_REGISTRATION_EXTERNS "${LIBPRESSIO_REGISTRATION_EXTERNS}") +string(REPLACE "!" ";" LIBPRESSIO_REGISTRATION_EXTERNS "${LIBPRESSIO_REGISTRATION_EXTERNS}") +list(TRANSFORM LIBPRESSIO_REGISTRATION_PLUGINS REPLACE "([a-zA-Z0-9_]*)\\/([a-zA-Z0-9_]*)\$" " libpressio::\\1::\\2_ns::registration.ensure_registered()!" OUTPUT_VARIABLE LIBPRESSIO_REGISTRATION_CALLS) +string(REPLACE ";" "\n" LIBPRESSIO_REGISTRATION_CALLS "${LIBPRESSIO_REGISTRATION_CALLS}") +string(REPLACE "!" ";" LIBPRESSIO_REGISTRATION_CALLS "${LIBPRESSIO_REGISTRATION_CALLS}") +set(LIBPRESSIO_REGISTRATIONS " +#include +#include \"libpressio_ext/cpp/registry.h\" + +namespace libpressio { +${LIBPRESSIO_REGISTRATION_EXTERNS} +} /*namespace libpressio*/ + +extern \"C\" void pressio_register_all() { +${LIBPRESSIO_REGISTRATION_CALLS} +} +") +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/pressio_manual_register.cc "${LIBPRESSIO_REGISTRATIONS}") target_sources(libpressio PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/pressio_manual_register.cc) configure_file( diff --git a/src/pressio_register_generator.cc b/src/pressio_register_generator.cc deleted file mode 100644 index 526a6046..00000000 --- a/src/pressio_register_generator.cc +++ /dev/null @@ -1,110 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -struct cli_args { - std::string config; - std::string output_path; -}; -template -std::basic_ostream& operator<<(std::basic_ostream& out, cli_args const& args) { - return out << "{.path=" << std::quoted(args.output_path) << ", .config=" << std::quoted(args.config.substr(0,50) + "...") << "}"; -} - -struct plugin { - std::string type; - std::string name; - std::string path; -}; -template -std::basic_ostream& operator<<(std::basic_ostream& out, plugin const& args) { - return out << "{.path=" << std::quoted(args.path) << ", .name=" << std::quoted(args.name) << ", .type=" << std::quoted(args.type) << "}"; -} - -int main(int argc, char* argv[]) { - cli_args args; - int opt = 0; - while((opt = getopt(argc, argv, "o:c:")) != -1) { - switch(opt) { - case 'o': - args.output_path = optarg; - break; - case 'c': - args.config = optarg; - break; - default: - std::cerr << "unknown argument \"" << opt << "\"" << std::endl; - return 1; - } - } - std::cerr << args << std::endl; - - - std::vector plugins; - std::stringstream ss(args.config); - std::string item; - while(std::getline(ss, item, ';')) { - std::string name,type; - auto extension_pos = item.find_last_of("."); - auto suffix_pos = item.find_last_of("/"); - auto parent_pos = item.find_last_of("/", suffix_pos - 1); - if (extension_pos == std::string::npos || suffix_pos == std::string::npos || - parent_pos == std::string::npos) { - std::cout << "unable to parse path " << std::quoted(item); - return 1; - } - name = item.substr(suffix_pos+1, extension_pos - suffix_pos - 1); - type = item.substr(parent_pos+1, suffix_pos - parent_pos - 1); - plugins.emplace_back(plugin{type, name, item}); - std::cerr << plugins.back() << std::endl; - } - - std::sort(plugins.begin(), plugins.end(), [](plugin const& lhs, plugin const& rhs) { - if(lhs.type == rhs.type) return lhs.name < rhs.name; - else return lhs.type < rhs.type; - }); - - std::string header = R"( - #include - #include "libpressio_ext/cpp/registry.h" - - - )"; - std::stringstream fwd_decl; - std::stringstream body; - body << R"(extern "C" void pressio_register_all() {)" < Date: Tue, 10 Mar 2026 09:42:35 +0200 Subject: [PATCH 16/29] reduce CMakeLists diff --- CMakeLists.txt | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 75930f54..d363de67 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,7 @@ project(libpressio VERSION "1.0.7" LANGUAGES CXX C) set(default_build_type "Release") if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) message(STATUS "No build type was set. Setting build type to ${default_build_type}.") - set(CMAKE_BUILD_TYPE ${default_build_type} CACHE + set(CMAKE_BUILD_TYPE ${default_build_type} CACHE STRING "Choose the type to build" FORCE) endif() set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") @@ -110,7 +110,7 @@ add_library(libpressio include/pressio_option.h include/pressio_options.h include/pressio_options_iter.h - + #private headers src/external_parse.h src/multi_dimensional_iterator.h @@ -235,16 +235,16 @@ if(LIBPRESSIO_INTERPROCEDURAL_OPTIMIZATION) endif() target_include_directories(libpressio - PRIVATE - $ + PRIVATE + $ ) target_include_directories(libpressio - PUBLIC - $ + PUBLIC + $ $ $ ) -target_compile_options(libpressio PRIVATE +target_compile_options(libpressio PRIVATE $<$: $<$: -Wall -Wextra -Wpedantic> $<$: ${NO_OMIT_FRAME_POINTER_FLAG}> @@ -449,7 +449,7 @@ if(LIBPRESSIO_HAS_BLOSC) get_filename_component(BLOSC_INCLUDE_DIRS ${BLOSC_INCLUDE_FILE} DIRECTORY) target_link_libraries(libpressio PRIVATE ${BLOSC_LIBRARIES}) target_include_directories(libpressio PRIVATE ${BLOSC_INCLUDE_DIRS}) - + endif() endif() @@ -701,7 +701,7 @@ if(LIBPRESSIO_HAS_GRIB) libpressio_plugin_file(io/grib.cc) endif() -# static libraries and some system linkers will strip the registration classes +# static libraries and some system linkers will strip the registration classes # causing nothing to be registered message("STATUS" "LIBPRESSIO_BUILT_PLUGINS = ${LIBPRESSIO_BUILT_PLUGINS}") list(TRANSFORM LIBPRESSIO_BUILT_PLUGINS REPLACE ".*\\/([a-zA-Z0-9_]*)\\/([a-zA-Z0-9_]*)\.[a-zA-Z0-9_]*\$" "\\1/\\2" OUTPUT_VARIABLE LIBPRESSIO_REGISTRATION_PLUGINS) @@ -879,7 +879,7 @@ endif() option(BUILD_DOCKER_CONTAINERS "build docker containers for testing" OFF) if(BUILD_DOCKER_CONTAINERS) - + foreach(CONTAINER Fedora Ubuntu18.04 CentOS) set(BuildSentinel ${CMAKE_BINARY_DIR}/${CONTAINER}-built) set(Dockerfile docker/Dockerfile-${CONTAINER}) From 3fae38ee1a5f74f5fa5205c48eaa8c01f21294ac Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Tue, 10 Mar 2026 09:49:29 +0200 Subject: [PATCH 17/29] add LIBPRESSIO_WITH_EXTERNAL option --- CMakeLists.txt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d363de67..9738229e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -125,6 +125,8 @@ else() set_property(CACHE LIBPRESSIO_BUILD_MODE PROPERTY STRINGS "CORE" "FULL") endif() +option(LIBPRESSIO_WITH_EXTERNAL "Support external plugins" ON) + #instead of using target_sources libpressio_plugin_source to gather the list of plugin files #in order to generate a source file for static linking of libpressio set(LIBPRESSIO_BUILT_PLUGINS "") @@ -141,9 +143,13 @@ libpressio_plugin_file(domains_metrics/print.cc) libpressio_plugin_file(compressors/noop.cc) libpressio_plugin_file(compressors/pressio.cc) libpressio_plugin_file(metrics/composite.cc) -#libpressio_plugin_file(metrics/external.cc) +if(LIBPRESSIO_WITH_EXTERNAL) + libpressio_plugin_file(metrics/external.cc) +endif() libpressio_plugin_file(metrics/error_stat.cc) -#libpressio_plugin_file(launch/external_forkexec.cc) +if(LIBPRESSIO_WITH_EXTERNAL) + libpressio_plugin_file(launch/external_forkexec.cc) +endif() libpressio_plugin_file(launch_metrics/noop.cc) libpressio_plugin_file(launch_metrics/print.cc) libpressio_plugin_file(metrics/noop.cc) From 2013711b5921c04efad87e9ca76255bdde2930bb Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Sun, 15 Mar 2026 07:04:16 +0200 Subject: [PATCH 18/29] fix some non-writeable outputs --- src/plugins/compressors/cusz.cc | 2 +- src/plugins/compressors/linear_quantizer.cc | 2 +- src/plugins/compressors/remove_background.cc | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plugins/compressors/cusz.cc b/src/plugins/compressors/cusz.cc index 508d556a..965cfa23 100644 --- a/src/plugins/compressors/cusz.cc +++ b/src/plugins/compressors/cusz.cc @@ -327,7 +327,7 @@ class cusz_compressor_plugin : public libpressio_compressor_plugin { &ptr_compressed, &compressed_len, &header, &timerecord, *stream.get()); *output = pressio_data::move(pressio_byte_dtype, ptr_compressed, {compressed_len}, domain_plugins().build("cudamalloc")); - *output = domain_manager().make_readable(domain_plugins().build("malloc"), std::move(*output)); + *output = domain_manager().make_writeable(domain_plugins().build("malloc"), std::move(*output)); memcpy(output->data(), &header, sizeof(psz_header)); //call when we are done diff --git a/src/plugins/compressors/linear_quantizer.cc b/src/plugins/compressors/linear_quantizer.cc index 097c3cf7..18b8673a 100644 --- a/src/plugins/compressors/linear_quantizer.cc +++ b/src/plugins/compressors/linear_quantizer.cc @@ -121,7 +121,7 @@ applies linear_quantizer encoding to prior to compression and reverses it post d } else if(ret < 0) { set_error(meta->error_code(), meta->error_msg()); } - *output = domain_manager().make_readable(domain_plugins().build("malloc"), std::move(*output)); + *output = domain_manager().make_writeable(domain_plugins().build("malloc"), std::move(*output)); pressio_data_for_each(quantized_output, *output, linear_quantizer_decoder{step}); return ret; } diff --git a/src/plugins/compressors/remove_background.cc b/src/plugins/compressors/remove_background.cc index 727fd295..fc7a52db 100644 --- a/src/plugins/compressors/remove_background.cc +++ b/src/plugins/compressors/remove_background.cc @@ -103,7 +103,7 @@ class remove_background_compressor_plugin : public libpressio_compressor_plugin if(rc) { return set_error(compressor->error_code(), compressor->error_msg()); } - *output = domain_manager().make_readable(domain_plugins().build("malloc"), std::move(*output)); + *output = domain_manager().make_writeable(domain_plugins().build("malloc"), std::move(*output)); pressio_data_for_each(*output, restore_background{*output, background}); return 0; } From cb4be0ff9f8b75d7af6bc07b2a9faf42cd1b6b7d Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Mon, 16 Mar 2026 10:53:37 +0200 Subject: [PATCH 19/29] fix bzip2 lossless config --- src/plugins/compressors/bzip2.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plugins/compressors/bzip2.cc b/src/plugins/compressors/bzip2.cc index 4e4a8264..9a236632 100644 --- a/src/plugins/compressors/bzip2.cc +++ b/src/plugins/compressors/bzip2.cc @@ -27,8 +27,8 @@ class bzip2_compressor_plugin : public libpressio_compressor_plugin { struct pressio_options options; set(options, "pressio:thread_safe", pressio_thread_safety_multiple); set(options, "pressio:stability", "experimental"); - set(options, "pressio:lossless:min", 0); - set(options, "pressio:lossless:max", 250); + set(options, "pressio:lossless:min", 1); + set(options, "pressio:lossless:max", 9); set(options, "bzip2:block_size_100k:min", 1); set(options, "bzip2:block_size_100k:max", 9); set(options, "bzip2:work_factor:min", 0); @@ -67,7 +67,7 @@ class bzip2_compressor_plugin : public libpressio_compressor_plugin { get(options, "bzip2:small", &small); int temp = 0; if(get(options, "pressio:lossless", &temp) == pressio_options_key_set) { - if(temp >= 0 && temp <= 250) { + if(temp >= 1 && temp <= 9) { blockSize100k = temp; } else { set_error(1, "lossless out of range"); From e099bceeb1f90f90a9d096e1fbfe7298547a70cb Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Sat, 21 Mar 2026 21:02:14 +0200 Subject: [PATCH 20/29] revert cusz make_writeable --- src/plugins/compressors/cusz.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/compressors/cusz.cc b/src/plugins/compressors/cusz.cc index 965cfa23..508d556a 100644 --- a/src/plugins/compressors/cusz.cc +++ b/src/plugins/compressors/cusz.cc @@ -327,7 +327,7 @@ class cusz_compressor_plugin : public libpressio_compressor_plugin { &ptr_compressed, &compressed_len, &header, &timerecord, *stream.get()); *output = pressio_data::move(pressio_byte_dtype, ptr_compressed, {compressed_len}, domain_plugins().build("cudamalloc")); - *output = domain_manager().make_writeable(domain_plugins().build("malloc"), std::move(*output)); + *output = domain_manager().make_readable(domain_plugins().build("malloc"), std::move(*output)); memcpy(output->data(), &header, sizeof(psz_header)); //call when we are done From 14cbc063f43a0a0bdf76020a120d94c1d9bd20e6 Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Sat, 21 Mar 2026 21:02:31 +0200 Subject: [PATCH 21/29] clean up static casts --- src/plugins/compressors/chunking.cc | 12 ++++++-- src/plugins/compressors/pipeline.cc | 2 +- src/plugins/compressors/roibin_impl.h | 40 +++++++++++++++------------ 3 files changed, 33 insertions(+), 21 deletions(-) diff --git a/src/plugins/compressors/chunking.cc b/src/plugins/compressors/chunking.cc index c88416ad..f6ec8a2f 100644 --- a/src/plugins/compressors/chunking.cc +++ b/src/plugins/compressors/chunking.cc @@ -211,7 +211,15 @@ class chunking_plugin: public libpressio_compressor_plugin { uint64_t* inptr64 = reinterpret_cast(input->data()); size_t n_buffers = *inptr64; const size_t header_size = sizeof(uint64_t) *(n_buffers+1); - std::vector sizes(inptr64+1, inptr64+(1+n_buffers)); + std::vector sizes64(inptr64+1, inptr64+(1+n_buffers)); + std::vector sizes(sizes64.size()); + std::transform( + std::begin(sizes64), + std::end(sizes64), + std::begin(sizes), + [](const uint64_t x) { + return static_cast(x); + }); //create the buffers to decompress std::vector inputs; @@ -224,7 +232,7 @@ class chunking_plugin: public libpressio_compressor_plugin { outputs_ptr.reserve(n_buffers); size_t accum_size = header_size; for (size_t i = 0; i < n_buffers; ++i) { - inputs.emplace_back(pressio_data::nonowning(pressio_byte_dtype, inptr+accum_size, {static_cast(sizes[i])})); + inputs.emplace_back(pressio_data::nonowning(pressio_byte_dtype, inptr+accum_size, {sizes[i]})); outputs.emplace_back(pressio_data::owning(output->dtype(), (chunk_size.empty() ? output->dimensions(): chunk_size ))); inputs_ptr.emplace_back(&inputs.back()); outputs_ptr.emplace_back(&outputs.back()); diff --git a/src/plugins/compressors/pipeline.cc b/src/plugins/compressors/pipeline.cc index 7d239ad5..17f48874 100644 --- a/src/plugins/compressors/pipeline.cc +++ b/src/plugins/compressors/pipeline.cc @@ -92,7 +92,7 @@ class pipeline_compressor_plugin : public libpressio_compressor_plugin { //output needs to be on the host to add the header *output = pressio_data::owning( pressio_byte_dtype, - {static_cast(tmp_in.size_in_bytes() + header_size)} + {tmp_in.size_in_bytes() + static_cast(header_size)} ); uint64_t* metadata_ptr = static_cast(output->data()); metadata_ptr[0] = 1; /*version*/ diff --git a/src/plugins/compressors/roibin_impl.h b/src/plugins/compressors/roibin_impl.h index b1d2fabd..160b8af2 100644 --- a/src/plugins/compressors/roibin_impl.h +++ b/src/plugins/compressors/roibin_impl.h @@ -24,13 +24,12 @@ void copy_center( indexer<1> const &id, indexer<1> const &roi_size, indexer<2> const &roi, - uint64_t const* center_ptr, + std::array const center, std::size_t const center_idx, T const* origin, T * roi_mem) { auto s_roi = as(roi); auto s_roi_size = as(roi_size); - std::array center{static_cast(center_ptr[0])}; auto s_center = as(center); auto s_id = as(id); @@ -50,13 +49,12 @@ void copy_center( indexer<2> const &id, indexer<2> const &roi_size, indexer<3> const &roi, - uint64_t const* center_ptr, + std::array const center, std::size_t const center_idx, T const* origin, T * roi_mem) { auto s_roi = as(roi); auto s_roi_size = as(roi_size); - std::array center{static_cast(center_ptr[0]), static_cast(center_ptr[1])}; auto s_center = as(center); auto s_id = as(id); @@ -85,13 +83,12 @@ void copy_center( indexer<3> const &id, indexer<3> const &roi_size, indexer<4> const &roi, - uint64_t const* center_ptr, + std::array const center, std::size_t const center_idx, T const* origin, T * roi_mem) { auto s_roi = as(roi); auto s_roi_size = as(roi_size); - std::array center{static_cast(center_ptr[0]), static_cast(center_ptr[1]), static_cast(center_ptr[2])}; auto s_center = as(center); auto s_id = as(id); @@ -131,13 +128,12 @@ void copy_center( indexer<4> const &id, indexer<4> const &roi_size, indexer<5> const &roi, - uint64_t const* center_ptr, + std::array const center, std::size_t const center_idx, T const* origin, T * roi_mem) { auto s_roi = as(roi); auto s_roi_size = as(roi_size); - std::array center{static_cast(center_ptr[0]), static_cast(center_ptr[1]), static_cast(center_ptr[2]), static_cast(center_ptr[3])}; auto s_center = as(center); auto s_id = as(id); @@ -198,7 +194,13 @@ void roi_save(indexer const &id, #pragma omp parallel for num_threads(n_threads) for (size_t i = 0; i < centers_size; ++i) { - copy_center(id, roi_size, roi, static_cast(centers_range.data()) + i*centers_width, i, origin, roi_mem); + std::array center64; + std::copy_n( + static_cast(centers_range.data()) + i*centers_width, + N, + std::begin(center64)); + auto center = as(center64); + copy_center(id, roi_size, roi, center, i, origin, roi_mem); } } @@ -218,13 +220,12 @@ void restore_center( indexer<1> const &id, indexer<1> const &roi_size, indexer<2> const &roi, - size_t const* center_ptr, + std::array const center, std::size_t const center_idx, T * origin, T const* roi_mem) { auto s_roi = as(roi); auto s_roi_size = as(roi_size); - std::array center{static_cast(center_ptr[0])}; auto s_center = as(center); auto s_id = as(id); @@ -241,13 +242,12 @@ void restore_center( indexer<2> const &id, indexer<2> const &roi_size, indexer<3> const &roi, - size_t const* center_ptr, + std::array const center, std::size_t const center_idx, T * origin, T const* roi_mem) { auto s_roi = as(roi); auto s_roi_size = as(roi_size); - std::array center{static_cast(center_ptr[0]), static_cast(center_ptr[1])}; auto s_center = as(center); auto s_id = as(id); @@ -268,13 +268,12 @@ void restore_center( indexer<3> const &id, indexer<3> const &roi_size, indexer<4> const &roi, - std::size_t const* center_ptr, + std::array const center, std::size_t const center_idx, T * origin, T const* roi_mem) { auto s_roi = as(roi); auto s_roi_size = as(roi_size); - std::array center{static_cast(center_ptr[0]), static_cast(center_ptr[1]), static_cast(center_ptr[2])}; auto s_center = as(center); auto s_id = as(id); @@ -300,13 +299,12 @@ void restore_center( indexer<4> const &id, indexer<4> const &roi_size, indexer<5> const &roi, - std::size_t const* center_ptr, + std::array const center, std::size_t const center_idx, T * origin, T const* roi_mem) { auto s_roi = as(roi); auto s_roi_size = as(roi_size); - std::array center{static_cast(center_ptr[0]), static_cast(center_ptr[1]), static_cast(center_ptr[2]), static_cast(center_ptr[3])}; auto s_center = as(center); auto s_id = as(id); @@ -348,7 +346,13 @@ void roi_restore(indexer const &id, #pragma omp parallel for num_threads(n_threads) for (size_t i = 0; i < centers_size; ++i) { - restore_center(id, roi_size, roi, static_cast(centers_range.data()) + centers_width*i, i, restored, roi_mem); + std::array center64; + std::copy_n( + static_cast(centers_range.data()) + i*centers_width, + N, + std::begin(center64)); + auto center = as(center64); + restore_center(id, roi_size, roi, center, i, restored, roi_mem); } } From 77843df8656d75637fb6135f7bfaaf2dd9b0c78a Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Sat, 21 Mar 2026 21:11:27 +0200 Subject: [PATCH 22/29] extract external plugins --- CMakeLists.txt | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9738229e..77be4697 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -125,8 +125,6 @@ else() set_property(CACHE LIBPRESSIO_BUILD_MODE PROPERTY STRINGS "CORE" "FULL") endif() -option(LIBPRESSIO_WITH_EXTERNAL "Support external plugins" ON) - #instead of using target_sources libpressio_plugin_source to gather the list of plugin files #in order to generate a source file for static linking of libpressio set(LIBPRESSIO_BUILT_PLUGINS "") @@ -143,13 +141,7 @@ libpressio_plugin_file(domains_metrics/print.cc) libpressio_plugin_file(compressors/noop.cc) libpressio_plugin_file(compressors/pressio.cc) libpressio_plugin_file(metrics/composite.cc) -if(LIBPRESSIO_WITH_EXTERNAL) - libpressio_plugin_file(metrics/external.cc) -endif() libpressio_plugin_file(metrics/error_stat.cc) -if(LIBPRESSIO_WITH_EXTERNAL) - libpressio_plugin_file(launch/external_forkexec.cc) -endif() libpressio_plugin_file(launch_metrics/noop.cc) libpressio_plugin_file(launch_metrics/print.cc) libpressio_plugin_file(metrics/noop.cc) @@ -159,6 +151,13 @@ libpressio_plugin_file(io/posix.cc) libpressio_plugin_file(domains/malloc.cc) libpressio_plugin_file(domains/nonowning.cc) +#RECOMMENDED plugins that should be included when building libpressio +option(LIBPRESSIO_WITH_EXTERNAL "Support external plugins" ON) +if(LIBPRESSIO_WITH_EXTERNAL) + libpressio_plugin_file(metrics/external.cc) + libpressio_plugin_file(launch/external_forkexec.cc) +endif() + message("STATUS" "LIBPRESSIO_BUILD_MODE = ${LIBPRESSIO_BUILD_MODE}") #optional components created with libpressio_optional_component don't require dependencies From fd7684d5fc2b913f23214f0c37cd011f0b0d9778 Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Sat, 21 Mar 2026 21:22:24 +0200 Subject: [PATCH 23/29] extract manual registration generation into separate cmake file --- CMakeLists.txt | 23 +------------------ tools/pressio_manual_register.cmake | 34 +++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 22 deletions(-) create mode 100644 tools/pressio_manual_register.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 77be4697..21b73022 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -708,28 +708,7 @@ endif() # static libraries and some system linkers will strip the registration classes # causing nothing to be registered -message("STATUS" "LIBPRESSIO_BUILT_PLUGINS = ${LIBPRESSIO_BUILT_PLUGINS}") -list(TRANSFORM LIBPRESSIO_BUILT_PLUGINS REPLACE ".*\\/([a-zA-Z0-9_]*)\\/([a-zA-Z0-9_]*)\.[a-zA-Z0-9_]*\$" "\\1/\\2" OUTPUT_VARIABLE LIBPRESSIO_REGISTRATION_PLUGINS) -list(SORT LIBPRESSIO_REGISTRATION_PLUGINS) -list(TRANSFORM LIBPRESSIO_REGISTRATION_PLUGINS REPLACE "([a-zA-Z0-9_]*)\\/([a-zA-Z0-9_]*)\$" " namespace \\1 { namespace \\2_ns { extern pressio_register registration! } }" OUTPUT_VARIABLE LIBPRESSIO_REGISTRATION_EXTERNS) -string(REPLACE ";" "\n" LIBPRESSIO_REGISTRATION_EXTERNS "${LIBPRESSIO_REGISTRATION_EXTERNS}") -string(REPLACE "!" ";" LIBPRESSIO_REGISTRATION_EXTERNS "${LIBPRESSIO_REGISTRATION_EXTERNS}") -list(TRANSFORM LIBPRESSIO_REGISTRATION_PLUGINS REPLACE "([a-zA-Z0-9_]*)\\/([a-zA-Z0-9_]*)\$" " libpressio::\\1::\\2_ns::registration.ensure_registered()!" OUTPUT_VARIABLE LIBPRESSIO_REGISTRATION_CALLS) -string(REPLACE ";" "\n" LIBPRESSIO_REGISTRATION_CALLS "${LIBPRESSIO_REGISTRATION_CALLS}") -string(REPLACE "!" ";" LIBPRESSIO_REGISTRATION_CALLS "${LIBPRESSIO_REGISTRATION_CALLS}") -set(LIBPRESSIO_REGISTRATIONS " -#include -#include \"libpressio_ext/cpp/registry.h\" - -namespace libpressio { -${LIBPRESSIO_REGISTRATION_EXTERNS} -} /*namespace libpressio*/ - -extern \"C\" void pressio_register_all() { -${LIBPRESSIO_REGISTRATION_CALLS} -} -") -file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/pressio_manual_register.cc "${LIBPRESSIO_REGISTRATIONS}") +include(${CMAKE_CURRENT_SOURCE_DIR}/tools/pressio_manual_register.cmake) target_sources(libpressio PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/pressio_manual_register.cc) configure_file( diff --git a/tools/pressio_manual_register.cmake b/tools/pressio_manual_register.cmake new file mode 100644 index 00000000..7f321e0a --- /dev/null +++ b/tools/pressio_manual_register.cmake @@ -0,0 +1,34 @@ +# static libraries and some system linkers will strip the registration classes +# causing nothing to be registered +message("STATUS" "LIBPRESSIO_BUILT_PLUGINS = ${LIBPRESSIO_BUILT_PLUGINS}") + +# extract the plugin types and names and sort them +list(TRANSFORM LIBPRESSIO_BUILT_PLUGINS REPLACE ".*\\/([a-zA-Z0-9_]*)\\/([a-zA-Z0-9_]*)\.[a-zA-Z0-9_]*\$" "\\1/\\2" OUTPUT_VARIABLE LIBPRESSIO_REGISTRATION_PLUGINS) +list(SORT LIBPRESSIO_REGISTRATION_PLUGINS) + +# compute the per-plugin extern registrations +list(TRANSFORM LIBPRESSIO_REGISTRATION_PLUGINS REPLACE "([a-zA-Z0-9_]*)\\/([a-zA-Z0-9_]*)\$" " namespace \\1 { namespace \\2_ns { extern pressio_register registration! } }" OUTPUT_VARIABLE LIBPRESSIO_REGISTRATION_EXTERNS) +string(REPLACE ";" "\n" LIBPRESSIO_REGISTRATION_EXTERNS "${LIBPRESSIO_REGISTRATION_EXTERNS}") +string(REPLACE "!" ";" LIBPRESSIO_REGISTRATION_EXTERNS "${LIBPRESSIO_REGISTRATION_EXTERNS}") + +# compute the per-plugin registration calls +list(TRANSFORM LIBPRESSIO_REGISTRATION_PLUGINS REPLACE "([a-zA-Z0-9_]*)\\/([a-zA-Z0-9_]*)\$" " libpressio::\\1::\\2_ns::registration.ensure_registered()!" OUTPUT_VARIABLE LIBPRESSIO_REGISTRATION_CALLS) +string(REPLACE ";" "\n" LIBPRESSIO_REGISTRATION_CALLS "${LIBPRESSIO_REGISTRATION_CALLS}") +string(REPLACE "!" ";" LIBPRESSIO_REGISTRATION_CALLS "${LIBPRESSIO_REGISTRATION_CALLS}") + +# interpolate the manual plugin registration code +set(LIBPRESSIO_REGISTRATIONS " +#include +#include \"libpressio_ext/cpp/registry.h\" + +namespace libpressio { +${LIBPRESSIO_REGISTRATION_EXTERNS} +} /*namespace libpressio*/ + +extern \"C\" void pressio_register_all() { +${LIBPRESSIO_REGISTRATION_CALLS} +} +") + +# write out the plugin registration code +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/pressio_manual_register.cc "${LIBPRESSIO_REGISTRATIONS}") From 8addf5a8e404e40840cb5467b58f773d23d5fc4e Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Mon, 23 Mar 2026 09:50:23 +0200 Subject: [PATCH 24/29] add sol2 include dirs --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 21b73022..82876a33 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -619,6 +619,7 @@ option(LIBPRESSIO_HAS_LUA "build multi-objective code" OFF) if(LIBPRESSIO_HAS_LUA) set(LIBPRESSIO_FEATURES "${LIBPRESSIO_FEATURES} lua") find_package(sol2 REQUIRED) + target_include_directories(libpressio PRIVATE ${SOL2_INCLUDE_DIRS}) if(LIBPRESSIO_LUA_PKGCONFIG) find_package(PkgConfig REQUIRED) pkg_search_module(Lua IMPORTED_TARGET lua luajit) From 0966822bef4ff0262596e3e37f4b1d6e256b4c99 Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Mon, 23 Mar 2026 22:42:29 +0200 Subject: [PATCH 25/29] revert remove_background make_writeable --- src/plugins/compressors/remove_background.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/compressors/remove_background.cc b/src/plugins/compressors/remove_background.cc index fc7a52db..727fd295 100644 --- a/src/plugins/compressors/remove_background.cc +++ b/src/plugins/compressors/remove_background.cc @@ -103,7 +103,7 @@ class remove_background_compressor_plugin : public libpressio_compressor_plugin if(rc) { return set_error(compressor->error_code(), compressor->error_msg()); } - *output = domain_manager().make_writeable(domain_plugins().build("malloc"), std::move(*output)); + *output = domain_manager().make_readable(domain_plugins().build("malloc"), std::move(*output)); pressio_data_for_each(*output, restore_background{*output, background}); return 0; } From d99c6b2869763a173f9e486861284f891697eda9 Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Mon, 23 Mar 2026 22:46:24 +0200 Subject: [PATCH 26/29] split roibin optional component into three --- CMakeLists.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 82876a33..98c016f5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -223,8 +223,9 @@ libpressio_optional_component(sobolev "computes the sobolev norm" /metrics/sobol libpressio_optional_component(gradient "computes the gradient length" /metrics/gradlength.cc) libpressio_optional_component(out_of_bounds "computes the gradient length" /metrics/out_of_bounds.cc) libpressio_optional_component(write_debug_inputs "metric that writes output buffers for testing" /metrics/write_debug_inputs.cc) -set(roibin_sources /compressors/roibin.cc /compressors/binning.cc /compressors/masked_binning.cc) -libpressio_optional_component(roibin "build the roibin metacompressor" "${roibin_sources}") +libpressio_optional_component(roibin "build the roibin metacompressor" /compressors/roibin.cc) +libpressio_optional_component(binning "build the binning metacompressor" /compressors/binning.cc) +libpressio_optional_component(masked_binning "build the masked binning metacompressor" /compressors/masked_binning.cc) libpressio_optional_component(pipeline "build the pipeline metacompressor" /compressors/pipeline.cc) option(LIBPRESSIO_INTERPROCEDURAL_OPTIMIZATION "Use interprocedural optimization (LTO)" OFF) From 9434253b2a1ac8ceb8c62e5818d2880db548f0fd Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Mon, 23 Mar 2026 23:02:42 +0200 Subject: [PATCH 27/29] Only record first plugin file in CMakeLists --- CMakeLists.txt | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 98c016f5..f66af31a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -128,11 +128,14 @@ endif() #instead of using target_sources libpressio_plugin_source to gather the list of plugin files #in order to generate a source file for static linking of libpressio set(LIBPRESSIO_BUILT_PLUGINS "") -macro(libpressio_plugin_file file_name) +macro(libpressio_plugin_file_aux file_name) target_sources(libpressio PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/plugins/${file_name} ) +endmacro() +macro(libpressio_plugin_file file_name) + libpressio_plugin_file_aux("${file_name}") list(APPEND LIBPRESSIO_BUILT_PLUGINS "${CMAKE_CURRENT_SOURCE_DIR}/src/plugins/${file_name}") set(LIBPRESSIO_BUILT_PLUGINS "${LIBPRESSIO_BUILT_PLUGINS}" PARENT_SCOPE) endmacro() @@ -171,9 +174,17 @@ function(libpressio_optional_component name description file_names) cmake_dependent_option(LIBPRESSIO_HAS_${name_upper} ${description} OFF "LIBPRESSIO_BUILD_MODE STREQUAL CORE" OFF) if(LIBPRESSIO_HAS_${name_upper} OR LIBPRESSIO_BUILD_MODE STREQUAL FULL) message("STATUS" "LIBPRESSIO_HAS_${name_upper} = ON") - foreach(file_name IN LISTS file_names) - libpressio_plugin_file(/${file_name}) - endforeach() + list(LENGTH "${file_names}" LIBPRESSIO_OPTIONAL_COMPONENT_NFILES) + if("${LIBPRESSIO_OPTIONAL_COMPONENT_NFILES}" GREATER 0) + list(GET "${file_names}" 0 LIBPRESSIO_OPTIONAL_COMPONENT_FILE) + libpressio_plugin_file(/${LIBPRESSIO_OPTIONAL_COMPONENT_FILE}) + if("${LIBPRESSIO_OPTIONAL_COMPONENT_NFILES}" GREATER 1) + list(SUBLIST "${file_names}" 1 -1 LIBPRESSIO_OPTIONAL_COMPONENT_FILES_AUX) + foreach(file_name IN LISTS "${LIBPRESSIO_OPTIONAL_COMPONENT_FILES_AUX}") + libpressio_plugin_file_aux(/${file_name}) + endforeach() + endif() + endif() else() message("STATUS" "LIBPRESSIO_HAS_${name_upper} = OFF") endif() @@ -193,7 +204,6 @@ libpressio_optional_component(size "build the size metrics plugin" /metrics/size libpressio_optional_component(time "build the time metrics plugin" /metrics/time.cc) libpressio_optional_component(autocorr "build the autocorr metrics plugin" /metrics/autocorr.cc) libpressio_optional_component(chunking "build the chunking compressor plugin" "/compressors/chunking.cc;/compressors/chunking_impl.cc") -list(REMOVE_ITEM LIBPRESSIO_BUILT_PLUGINS "${CMAKE_CURRENT_SOURCE_DIR}/src/plugins///compressors/chunking_impl.cc") libpressio_optional_component(delta_encoding "build the delta_encoding compressor plugin" /compressors/delta_encoding.cc) libpressio_optional_component(diff_pdf "build the difference probability distribution function metric" /metrics/diff_pdf.cc) libpressio_optional_component(empty "build the empty IO plugin" /io/empty.cc) From 2467630fc3d495d62620e6c66f70bbef81111df9 Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Thu, 26 Mar 2026 11:59:35 +0200 Subject: [PATCH 28/29] fix list commands --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f66af31a..82005c49 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -174,12 +174,12 @@ function(libpressio_optional_component name description file_names) cmake_dependent_option(LIBPRESSIO_HAS_${name_upper} ${description} OFF "LIBPRESSIO_BUILD_MODE STREQUAL CORE" OFF) if(LIBPRESSIO_HAS_${name_upper} OR LIBPRESSIO_BUILD_MODE STREQUAL FULL) message("STATUS" "LIBPRESSIO_HAS_${name_upper} = ON") - list(LENGTH "${file_names}" LIBPRESSIO_OPTIONAL_COMPONENT_NFILES) + list(LENGTH file_names LIBPRESSIO_OPTIONAL_COMPONENT_NFILES) if("${LIBPRESSIO_OPTIONAL_COMPONENT_NFILES}" GREATER 0) - list(GET "${file_names}" 0 LIBPRESSIO_OPTIONAL_COMPONENT_FILE) + list(GET file_names 0 LIBPRESSIO_OPTIONAL_COMPONENT_FILE) libpressio_plugin_file(/${LIBPRESSIO_OPTIONAL_COMPONENT_FILE}) if("${LIBPRESSIO_OPTIONAL_COMPONENT_NFILES}" GREATER 1) - list(SUBLIST "${file_names}" 1 -1 LIBPRESSIO_OPTIONAL_COMPONENT_FILES_AUX) + list(SUBLIST file_names 1 -1 LIBPRESSIO_OPTIONAL_COMPONENT_FILES_AUX) foreach(file_name IN LISTS "${LIBPRESSIO_OPTIONAL_COMPONENT_FILES_AUX}") libpressio_plugin_file_aux(/${file_name}) endforeach() From df779cd82d9b772d5bf489f26a3c3938001b2836 Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Thu, 26 Mar 2026 12:06:34 +0200 Subject: [PATCH 29/29] foreach fix --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 82005c49..e1447e62 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -180,7 +180,7 @@ function(libpressio_optional_component name description file_names) libpressio_plugin_file(/${LIBPRESSIO_OPTIONAL_COMPONENT_FILE}) if("${LIBPRESSIO_OPTIONAL_COMPONENT_NFILES}" GREATER 1) list(SUBLIST file_names 1 -1 LIBPRESSIO_OPTIONAL_COMPONENT_FILES_AUX) - foreach(file_name IN LISTS "${LIBPRESSIO_OPTIONAL_COMPONENT_FILES_AUX}") + foreach(file_name IN LISTS LIBPRESSIO_OPTIONAL_COMPONENT_FILES_AUX) libpressio_plugin_file_aux(/${file_name}) endforeach() endif()