From 15e8781a74caa1e9303bcc312f96c0c78e48e435 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Wed, 8 Apr 2026 12:39:50 +0200 Subject: [PATCH] Use CMake to build the plugin and HDF5 (internally) --- CMakeLists.txt | 53 +++++++++++++++++++++++++++++++++++++++++++++++ Dockerfile | 36 ++++++++++++++++++++++++++++++++ Makefile | 56 -------------------------------------------------- 3 files changed, 89 insertions(+), 56 deletions(-) create mode 100644 CMakeLists.txt create mode 100644 Dockerfile delete mode 100644 Makefile diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..74298f3 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,53 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 3.19) + +PROJECT(durin VERSION 1.0.0 LANGUAGES C) + +include(FetchContent) + +SET(CMAKE_C_FLAGS_RELEASE "-O3") + +SET(CMAKE_C_STANDARD 99) +SET(CMAKE_C_STANDARD_REQUIRED ON) +SET(CMAKE_C_EXTENSIONS OFF) + +SET(CMAKE_POSITION_INDEPENDENT_CODE ON) + +SET(BUILD_SHARED_LIBS OFF) + +set(HDF5_USE_STATIC_LIBRARIES TRUE) + +SET(HDF5_BUILD_HL_LIB OFF) + +SET(HDF5_ENABLE_THREADSAFE ON) +SET(HDF5_ENABLE_SZIP_SUPPORT OFF) +SET(HDF5_ENABLE_SZIP_ENCODING OFF) +SET(HDF5_BUILD_EXAMPLES OFF) +SET(HDF5_BUILD_CPP_LIB OFF) +SET(HDF5_ENABLE_Z_LIB_SUPPORT OFF) +SET(HDF5_EXTERNALLY_CONFIGURED 1) + +INCLUDE_DIRECTORIES(bslz4/src) + +FetchContent_Declare(hdf5 + URL https://github.com/HDFGroup/hdf5/releases/download/hdf5_1.14.6/hdf5-1.14.6.tar.gz + DOWNLOAD_EXTRACT_TIMESTAMP FALSE + EXCLUDE_FROM_ALL) + +FetchContent_MakeAvailable(hdf5) + +ADD_LIBRARY(durin-plugin SHARED + src/plugin.c src/plugin.h + src/err.c src/err.h + src/filters.c src/filters.h + src/file.c src/file.h bslz4/src/bitshuffle.c bslz4/src/bitshuffle.h + bslz4/src/bitshuffle_core.c bslz4/src/bitshuffle_core.h + bslz4/src/bitshuffle_internals.h + bslz4/src/bshuf_h5filter.c bslz4/src/bshuf_h5filter.h + bslz4/src/iochain.c bslz4/src/iochain.h + bslz4/src/lz4.c bslz4/src/lz4.h) + +TARGET_COMPILE_DEFINITIONS(durin-plugin PRIVATE + H5_USE_110_API + USE_BITSHUFFLE) + +TARGET_LINK_LIBRARIES(durin-plugin PRIVATE hdf5-static) diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..dc4d93d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,36 @@ +FROM registry.access.redhat.com/ubi7/ubi + +ARG HDF5_TAG="hdf5_1.14.6" + +LABEL authors="Filip Leonarski" + +ARG CMAKE_VERSION=3.31.6 + +RUN yum -y update && \ + yum -y install \ + gcc \ + gcc-c++ \ + git \ + make \ + tar \ + gzip \ + curl && \ + yum clean all + +RUN set -eux; \ + arch="$(uname -m)"; \ + case "$arch" in \ + x86_64) cmake_arch="x86_64" ;; \ + aarch64) cmake_arch="aarch64" ;; \ + *) echo "Unsupported architecture: $arch"; exit 1 ;; \ + esac; \ + curl -L "https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}-linux-${cmake_arch}.tar.gz" \ + -o /tmp/cmake.tar.gz; \ + tar -xzf /tmp/cmake.tar.gz -C /opt; \ + ln -s "/opt/cmake-${CMAKE_VERSION}-linux-${cmake_arch}/bin/cmake" /usr/local/bin/cmake; \ + ln -s "/opt/cmake-${CMAKE_VERSION}-linux-${cmake_arch}/bin/ctest" /usr/local/bin/ctest; \ + ln -s "/opt/cmake-${CMAKE_VERSION}-linux-${cmake_arch}/bin/cpack" /usr/local/bin/cpack; \ + rm -f /tmp/cmake.tar.gz + +# Default entrypoint prints tool versions and hints. +CMD ["/bin/bash", "-l"] \ No newline at end of file diff --git a/Makefile b/Makefile deleted file mode 100644 index 0dead47..0000000 --- a/Makefile +++ /dev/null @@ -1,56 +0,0 @@ -BUILD_DIR ?= ./build -SRC_DIR = ./src -TEST_DIR = ./test -INC_DIR = $(SRC_DIR) - -BSLZ4_SRC_DIR = ./bslz4/src -BSLZ4_BUILD_DIR = ./bslz4/build -BSLZ4_INC_DIR = $(BSLZ4_SRC_DIR) - -CC=h5cc -# -std=gnu99 provides for strtok_r -CFLAGS=-DH5_USE_110_API -Wall -g -O2 -fpic -I$(INC_DIR) -I$(BSLZ4_INC_DIR) -std=gnu99 -shlib -DUSE_BITSHUFFLE - -.PHONY: plugin -plugin: $(BUILD_DIR)/durin-plugin.so - -.PHONY: all -all: plugin example test_plugin - -.PHONY: example -example: $(BUILD_DIR)/example - -.PHONY: test_plugin -test_plugin: $(BUILD_DIR)/test_plugin - -$(BUILD_DIR)/test_plugin: $(TEST_DIR)/generic_data_plugin.f90 $(TEST_DIR)/test_generic_host.f90 - mkdir -p $(BUILD_DIR) - gfortran -O -g -fopenmp -ldl $(TEST_DIR)/generic_data_plugin.f90 $(TEST_DIR)/test_generic_host.f90 -o $@ -J$(BUILD_DIR) - -$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c - mkdir -p $(BUILD_DIR) - $(CC) $(CFLAGS) -c $< -o $@ - -$(BSLZ4_BUILD_DIR)/%.o: $(BSLZ4_SRC_DIR)/%.c - mkdir -p $(BSLZ4_BUILD_DIR) - $(CC) $(CFLAGS) -c $< -o $@ - -$(BUILD_DIR)/bslz4.a: $(BSLZ4_BUILD_DIR)/lz4.o $(BSLZ4_BUILD_DIR)/bitshuffle.o \ -$(BSLZ4_BUILD_DIR)/bitshuffle_core.o $(BSLZ4_BUILD_DIR)/iochain.o $(BSLZ4_BUILD_DIR)/bshuf_h5filter.o - mkdir -p $(BUILD_DIR) - ar rcs $@ $^ - -$(BUILD_DIR)/durin-plugin.so: $(BUILD_DIR)/plugin.o $(BUILD_DIR)/file.o $(BUILD_DIR)/err.o $(BUILD_DIR)/filters.o $(BITSHUFFLE_OBJS) \ -$(BUILD_DIR)/bslz4.a - mkdir -p $(BUILD_DIR) - $(CC) $(CFLAGS) -shared -noshlib $^ -o $(BUILD_DIR)/durin-plugin.so - -$(BUILD_DIR)/example: $(BUILD_DIR)/test.o $(BUILD_DIR)/file.o $(BUILD_DIR)/err.o $(BUILD_DIR)/filters.o \ -$(BUILD_DIR)/bslz4.a - mkdir -p $(BUILD_DIR) - $(CC) $(CFLAGS) $^ -o $(BUILD_DIR)/example - -.PHONY: clean -clean: - rm -r $(BUILD_DIR) - rm -r $(BSLZ4_BUILD_DIR)