Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 88 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
name: CI

on:
push:
branches: [master, main]
pull_request:

jobs:
build-and-test:
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
name: Linux (GCC 13)
compiler: g++-13
cc: gcc-13
cxx: g++-13
packages: ninja-build g++-13

- os: ubuntu-latest
name: Linux (Clang 17)
compiler: clang++-17
cc: clang-17
cxx: clang++-17
packages: ninja-build clang-17

- os: windows-latest
name: Windows (MSVC)
compiler: msvc
cc: cl
cxx: cl
packages: ""

- os: macos-latest
name: macOS (AppleClang)
compiler: appleclang
cc: cc
cxx: c++
packages: ninja

runs-on: ${{ matrix.os }}
name: ${{ matrix.name }}
# macOS AppleClang lacks std::views::zip and std::from_chars for doubles
continue-on-error: ${{ matrix.os == 'macos-latest' }}

steps:
- uses: actions/checkout@v4

# -- Install CMake 4.0+ (required by the project) --
- name: Install CMake 4.0+ via pip
run: pip install "cmake>=4.0"

# -- Install platform dependencies --
- name: Install dependencies (Ubuntu)
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y ${{ matrix.packages }}

- name: Install dependencies (macOS)
if: runner.os == 'macOS'
run: brew install ${{ matrix.packages }}

- name: Install dependencies (Windows)
if: runner.os == 'Windows'
run: choco install ninja

# -- Set up MSVC environment on Windows --
- name: Set up MSVC Developer Environment
if: runner.os == 'Windows'
uses: ilammy/msvc-dev-cmd@v1

# -- Configure --
- name: Configure CMake
run: >
cmake -B build -G Ninja
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_C_COMPILER=${{ matrix.cc }}
-DCMAKE_CXX_COMPILER=${{ matrix.cxx }}

# -- Build --
- name: Build
run: cmake --build build

# -- Test --
- name: Test
run: ctest --test-dir build --output-on-failure
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
build/
.cache/
.claude/
49 changes: 49 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
cmake_minimum_required(VERSION 4.0)
project(edfio VERSION 0.2.0 LANGUAGES CXX)

# ---- Header-only library target ----
add_library(edfio INTERFACE)
target_include_directories(edfio INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
target_compile_features(edfio INTERFACE cxx_std_23)
add_library(edfio::edfio ALIAS edfio)

# ---- Tests ----
option(EDFIO_BUILD_TESTS "Build tests" ON)
if(EDFIO_BUILD_TESTS)
enable_testing()
add_subdirectory(tests)
endif()

# ---- Install targets and packaging ----
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)

install(TARGETS edfio EXPORT edfioTargets)
install(DIRECTORY include/edfio DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})

install(EXPORT edfioTargets
FILE edfioTargets.cmake
NAMESPACE edfio::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/edfio
)

write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/edfioConfigVersion.cmake"
VERSION ${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion
)

configure_package_config_file(
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/edfioConfig.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/edfioConfig.cmake"
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/edfio
)

install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/edfioConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/edfioConfigVersion.cmake"
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/edfio
)
Loading
Loading