Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
157 commits
Select commit Hold shift + click to select a range
a9ed070
docs: proposal document for new Register abstraction
dsisco11 Jul 21, 2026
304531a
docs: improve register type proposal
dsisco11 Jul 21, 2026
bc606ea
docs: improve register type proposal
dsisco11 Jul 22, 2026
f5f4fc8
docs: implementation plan for Register type
dsisco11 Jul 22, 2026
d59505a
[Phase 0]: Freeze the Contract and Record the Baseline
dsisco11 Jul 22, 2026
c45eb21
[Phase 1]: Add Language Availability and Build Integration
dsisco11 Jul 22, 2026
9356f94
docs: add new phase for implementing containerized multi-compiler bui…
dsisco11 Jul 22, 2026
7646e55
[Phase 2]: Establish Reproducible Containerized Compiler Environments
dsisco11 Jul 22, 2026
c562b3c
fix: only force full project rebuilds within CI environments
dsisco11 Jul 22, 2026
f36e09b
[Phae 3]: initial phase 3
dsisco11 Jul 22, 2026
97efddc
chore: always compare compiler codegen with stack protection flags tu…
dsisco11 Jul 22, 2026
0cfd1d7
fix: move constexpr code out of method body to prevent MSVC being stu…
dsisco11 Jul 22, 2026
b25d2c7
fix: MSVC has bad heuristics
dsisco11 Jul 22, 2026
e8f0ad2
fix: compilers (MSVC) can de-optimize methods due to characteristics …
dsisco11 Jul 22, 2026
2341c71
perf: implement method flattening for transform methods
dsisco11 Jul 22, 2026
5f96059
chore: remove redundant inline statements
dsisco11 Jul 22, 2026
a3eda12
dev: add todo tasks for supporting Intel ICX and NVC++ compilers
dsisco11 Jul 22, 2026
6d1babf
chore: update phase 3 tasks
dsisco11 Jul 22, 2026
69d4016
[Phase 3]: Establish the Representation and Performance Harness
dsisco11 Jul 22, 2026
cab1e03
[Phase 4]: Implement Register Construction, Observation, and Transfer
dsisco11 Jul 22, 2026
d8f40fc
feat: implement missing api methods & drop 32bit support
dsisco11 Jul 22, 2026
8bc6ddf
[Phase 5]: Implement RegisterMask, Comparisons, and Selection
dsisco11 Jul 23, 2026
75d150c
perf: mark applicable methods for flattening and register-only-access
dsisco11 Jul 23, 2026
5a13516
[Phase 6]: Implement Basic Arithmetic, Bitwise Operations, and Shifts
dsisco11 Jul 23, 2026
02dccd5
perf: improve code gen for MSVC
dsisco11 Jul 23, 2026
b2ab66d
docs: additional project tasks
dsisco11 Jul 24, 2026
dcd6a85
[Phase 7]: Implement Specialized Arithmetic and Reductions
dsisco11 Jul 24, 2026
6a3cb2f
refactor: encapsulate all layer concepts into interface-like namespaces
dsisco11 Jul 24, 2026
f814d89
[Phase 8]: Implement Rearrangement and Conversion Operations
dsisco11 Jul 24, 2026
df7e2a5
dev: setup clang format
dsisco11 Jul 24, 2026
93d2e7a
chore: fix formatting error
dsisco11 Jul 24, 2026
b17397d
dev: add task to format all files
dsisco11 Jul 24, 2026
ab806dc
chore: run format all
dsisco11 Jul 24, 2026
746948d
[Phase 9]: Complete the Operation and Constraint Matrix
dsisco11 Jul 24, 2026
afa7d95
[Phase 10]: Qualify Correctness, Constexpr, Preconditions, ABI, and P…
dsisco11 Jul 24, 2026
5d64d65
[Phase 11]: Expose, Migrate, Document, and Close Out
dsisco11 Jul 25, 2026
ec42359
dev: update project todo
dsisco11 Jul 25, 2026
59471bf
docs: refresh Register closeout evidence
dsisco11 Jul 25, 2026
67c14c8
dev: update project todo
dsisco11 Jul 25, 2026
1f10de2
dev: update project todo
dsisco11 Jul 25, 2026
5350280
docs: implementation tasklist for build pipeline improvements
dsisco11 Jul 25, 2026
046233e
docs: revise implementation plan
dsisco11 Jul 25, 2026
87b3b91
chore: commit temp changes before refactoring work
dsisco11 Jul 25, 2026
1ad44f2
[Phase 0]: Freeze the Matrix and Measure the Baseline
dsisco11 Jul 25, 2026
5c7fdac
[Phase 1]: Create Exhaustive CMake Build Profiles
dsisco11 Jul 25, 2026
8fa4ae7
[Phase 2]: Separate Build and Test Responsibilities
dsisco11 Jul 26, 2026
241de47
[Phase 3]: Refactor Container Matrix Orchestration
dsisco11 Jul 26, 2026
b67fb8d
[Phase 4]: Add Native Compiler and Top-Level Commands
dsisco11 Jul 26, 2026
0a96ee4
[Phase 5]: Migrate CI Without Losing Coverage
dsisco11 Jul 26, 2026
9e8b7db
[Phase 6]: Prove Completeness and Cache Reuse
dsisco11 Jul 26, 2026
a94d5e5
[Phase 7]: Document and Migrate Interfaces
dsisco11 Jul 26, 2026
251db22
docs: add additional phase for build-time improvement
dsisco11 Jul 26, 2026
7824db9
[Phase 7]: Document and Migrate Interfaces
dsisco11 Jul 26, 2026
195e25a
[Phase 8]: Remove Retired Windows GNU Support References
dsisco11 Jul 26, 2026
6ad2bee
chore: remove completed task list
dsisco11 Jul 26, 2026
49f5b21
docs: task list for improving build performance
dsisco11 Jul 26, 2026
1e2cb0c
[Phase 0]: Establish the Compilation Baseline
dsisco11 Jul 26, 2026
a78aa1e
[Phase 1]: Separate Benchmark Compilation from the Default Build
dsisco11 Jul 26, 2026
02f21ac
[Phase 2]: Evaluate the Constexpr Compilation Burden
dsisco11 Jul 26, 2026
6a2f226
[Phase 3]: Analyze the `uint128_t` Compilation Burden
dsisco11 Jul 26, 2026
b4aac78
[Phase 4]: Analyze the `Bmi.h` Compilation Burden
dsisco11 Jul 26, 2026
f084d23
docs: plan to expand Api::shuffle support to all integer widths
dsisco11 Jul 27, 2026
da43b78
[Phase 0]: Freeze the Existing Surface and Baseline
dsisco11 Jul 27, 2026
2b92ab2
[Phase 1]: Establish Independent Behavioral and Constraint Oracles
dsisco11 Jul 27, 2026
74eeb1f
[Phase 2]: Implement the 128-Bit Backends
dsisco11 Jul 27, 2026
79bca73
[Phase 3]: Implement the 256-Bit Backends
dsisco11 Jul 27, 2026
e2c328a
[Phase 4]: Generalize the Public Layers
dsisco11 Jul 27, 2026
e98ff56
[Phase 5]: Prove Runtime Code Quality and Compilation Cost
dsisco11 Jul 27, 2026
99c89fe
[Phase 6]: Document and Complete Validation
dsisco11 Jul 27, 2026
15bd11b
docs: remove completed task list
dsisco11 Jul 27, 2026
ff9b3c7
chore: code comments
dsisco11 Jul 27, 2026
4489ad4
refactor: encapsulate vector aliases within their own file
dsisco11 Jul 27, 2026
1077ddd
dev: update project task list
dsisco11 Jul 27, 2026
90b0899
chore: remove completed task list
dsisco11 Jul 27, 2026
d7c98ec
docs: proposal plan for new unified SIMD-FLAGS macro system
dsisco11 Jul 27, 2026
ac04abd
refactor: redefine alias types to point to register type instead of o…
dsisco11 Jul 27, 2026
cc4f594
feat: implement `shuffle_bytes<>` method for Simd Register class
dsisco11 Jul 27, 2026
3bd32c1
tests: test coverage for Register `shuffle_bytes` method
dsisco11 Jul 27, 2026
56d3118
docs: implementation plan for new unified SIMD-FLAGS macro system
dsisco11 Jul 27, 2026
32135e6
[Phase 0]: Freeze the Grammar and Contract
dsisco11 Jul 28, 2026
e991fd7
[Phase 1]: Prove the Macro Grammar Is Implementable
dsisco11 Jul 28, 2026
4b5692e
revise SIMD_FLAGS macro prototype
dsisco11 Jul 28, 2026
9edbf05
[Phase 2]: Qualify Compiler Placement and Attribute Composition
dsisco11 Jul 28, 2026
851a0ef
[Phase 3]: Implement the Public Macro and Compiler Adapters
dsisco11 Jul 28, 2026
6835f29
[Phase 4]: Establish Contract and Code-Generation Tests
dsisco11 Jul 28, 2026
d391b2e
[Phase 5]: Inventory and Classify Existing Declarations
dsisco11 Jul 28, 2026
9799d79
fix: minor corrections to api & implementation layers
dsisco11 Jul 28, 2026
cf00645
docs: refactor tasklist for SIMD layer methodss which use stack memor…
dsisco11 Jul 28, 2026
267f462
[Task 1]: Restore a Focused Compilable Baseline
dsisco11 Jul 28, 2026
a633626
[Task 2]: Constant-Evaluation Helper Boundary
dsisco11 Jul 28, 2026
a12cac7
[Task 3]: Unconditional API Delegation
dsisco11 Jul 28, 2026
11f78d0
[Task 4]: Specialized 128-Bit Runtime Extraction
dsisco11 Jul 29, 2026
74e1d2e
docs: expand planning tasklist
dsisco11 Jul 29, 2026
dc4fe16
[Task 5]: Specialized 256-Bit Runtime Extraction
dsisco11 Jul 29, 2026
ab4e80b
docs: amend planning doc with new performance phase
dsisco11 Jul 29, 2026
7f2aa0b
[Task 6]: Implementation Extraction Naming Consolidation
dsisco11 Jul 29, 2026
4c44abe
[Task 7]: Specialized 128-Bit Runtime Insertion
dsisco11 Jul 29, 2026
64ef631
[Task 8/9]: Specialized 256-Bit Runtime Insertion
dsisco11 Jul 29, 2026
f27ea2c
[Task 10]: Specialized 128-Bit Integer Remainder Extensions
dsisco11 Jul 29, 2026
4e302bc
docs: extend planning tasks with codegen test suite cleanup work
dsisco11 Jul 29, 2026
7ef18bd
[Task 11]: Specialized 256-Bit Integer Remainder Extensions
dsisco11 Jul 29, 2026
d79b7ea
[Task 12]: Complete-Register Runtime Byte Shifts
dsisco11 Jul 29, 2026
0d9ff8a
docs: extend planning tasks with codegen test suite cleanup work
dsisco11 Jul 29, 2026
8d9c1e2
[Task 13]: Complete-Register Bit Shifts
dsisco11 Jul 29, 2026
213272b
[Task 14]: 128-Bit 64-Bit-Lane `setr`
dsisco11 Jul 29, 2026
a2a50f3
[Task 15]: Immediate-Control Runtime Naming
dsisco11 Jul 29, 2026
ec640ba
[Task 16]: Method-Flag Inventory Reconciliation
dsisco11 Jul 29, 2026
b8aefca
[Task 17]: Focused Cross-Compiler Validation
dsisco11 Jul 29, 2026
6d8349d
[Task 18]: Branchless 256-Bit Runtime Extraction Evaluation
dsisco11 Jul 29, 2026
6521f14
[Task 19]: Permanent Generated-Code Fixture Rationalization
dsisco11 Jul 29, 2026
fcc9d83
[Task 20]: Complete Permanent Generated-Code Suite Audit and Final In…
dsisco11 Jul 29, 2026
4f7c87a
docs: remove completed task list
dsisco11 Jul 29, 2026
107c23a
chore: code comments
dsisco11 Jul 29, 2026
16870b7
docs: initial build pipeline optimization proposal
dsisco11 Jul 29, 2026
53d1977
[Phase 0]: Freeze Validation Ownership and Baseline the Pipeline
dsisco11 Jul 29, 2026
c8e5aac
[Phase 1]: Replace the Monolithic Artifact Sweep with Scoped Aggregates
dsisco11 Jul 29, 2026
78b4160
[Phase 2]: Deduplicate Repository and Compiler-Front-End Contracts
dsisco11 Jul 29, 2026
febda0e
[Phase 3]: Separate Optimized Codegen Gates from Diagnostic Codegen
dsisco11 Jul 30, 2026
d50a8f9
[Phase 4]: Reduce the Ordinary Debug Compiler Matrix
dsisco11 Jul 30, 2026
131eafc
[Phase 5]: Slim Runtime, Sanitizer, and Coverage Target Sets
dsisco11 Jul 30, 2026
356b2de
[Phase 6]: Deduplicate Examples, ODR, Smoke, and External Consumers
dsisco11 Jul 30, 2026
8a5fdca
[Phase 7]: Refactor Presets and Unified Pipeline Orchestration
dsisco11 Jul 30, 2026
8caa6d2
[Phase 8]: Add Matrix-Ownership and No-Rebuild Regression Coverage
dsisco11 Jul 30, 2026
629df0f
[Phase 9]: Measure, Qualify, and Document
dsisco11 Jul 30, 2026
8f36228
[Phase 10]: Remove Temporary Planning and Evidence Documentation
dsisco11 Jul 30, 2026
0c69ec6
[Phase 6]: Migrate Implementation and Api Layers
dsisco11 Jul 30, 2026
830ef8c
[Phase 7]: Migrate Register-Facing and Remaining Public Code
dsisco11 Jul 30, 2026
ad9e050
[Phase 8]: Remove the Legacy Declaration Surface and Add Audits
dsisco11 Jul 30, 2026
ace957d
[Phase 9]: Document, Qualify, and Close Out
dsisco11 Jul 30, 2026
b377863
chore: removing leftover legacy macro usages
dsisco11 Jul 30, 2026
260925d
chore: remove completed task list
dsisco11 Jul 30, 2026
41acf40
dev: update project task list
dsisco11 Jul 30, 2026
b59671e
chore: remove obsolete files
dsisco11 Jul 30, 2026
e60da60
chore: Remove `MethodFlagsInventory.csv` from the repo and audit tooling
dsisco11 Jul 30, 2026
30956fe
chore: Remove `MethodFlagsRegisterOnly.csv` from the repo and audit t…
dsisco11 Jul 30, 2026
fd03cee
docs: build pipeline cleanup plan
dsisco11 Jul 31, 2026
306cb87
[Phase 1]: Retire Method-Flags Source Auditing
dsisco11 Jul 31, 2026
8afcb43
[Phase 2]: Remove Public-Header `static_assert` Auditing
dsisco11 Jul 31, 2026
8fe527c
[Phase 3]: Restructure Validation-Matrix and Pipeline Validation
dsisco11 Jul 31, 2026
7cfc62f
chore: remove completed task list
dsisco11 Jul 31, 2026
7afee0d
docs: register byte shift extension plan
dsisco11 Jul 31, 2026
94dfbbe
dev: update project todo
dsisco11 Jul 31, 2026
c38a698
[Phase 1]: Fix the Naming and Semantic Contract
dsisco11 Jul 31, 2026
b43ea64
[Phase 2]: Rename the Existing Complete-Register Shift Surface
dsisco11 Jul 31, 2026
b3bfb0a
[Phase 3]: Implement Immediate Complete-Register Byte Shifts
dsisco11 Jul 31, 2026
a272ea8
[Phase 4]: Expose the Immediate API Through `Api` and `Register`
dsisco11 Jul 31, 2026
df4489c
dev: update project todo
dsisco11 Jul 31, 2026
ef2fb4b
[Phase 5]: Prove Semantics, Availability, and Generated Code
dsisco11 Jul 31, 2026
e5630d3
[Phase 6]: Documentation and Final Cleanup
dsisco11 Jul 31, 2026
a49e163
chore: remove completed task list
dsisco11 Jul 31, 2026
ea32b73
docs: implementation plan for compile-time register constants
dsisco11 Jul 31, 2026
853fb15
[Phase 1]: Fix the Public and Layer Contracts
dsisco11 Jul 31, 2026
64abc38
chore: remove deprecated task list
dsisco11 Jul 31, 2026
b869ad9
chore: remove python from github ci and use choco instead
dsisco11 Aug 1, 2026
8437f62
fix: save & restore Clang/CMake paths before & after importing the MS…
dsisco11 Aug 1, 2026
a52ab50
dev: lower minimum version for CMake to 3.31 & CLang to 20
dsisco11 Aug 1, 2026
5820910
dev: fix linux container build for github ci
dsisco11 Aug 1, 2026
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
6 changes: 5 additions & 1 deletion .clang-format
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
BasedOnStyle: Microsoft
Standard: Latest
ColumnLimit: 160
IndentWidth: 4
TabWidth: 4
UseTab: Always
BreakBeforeBraces: Allman
AllowShortFunctionsOnASingleLine: Empty
SortIncludes: CaseSensitive
SortIncludes:
Enabled: true
IgnoreCase: false
3 changes: 3 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
**
!containers/
!containers/**
243 changes: 99 additions & 144 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,167 +3,122 @@ name: SimdLib CI
on:
push:
pull_request:
workflow_dispatch:

permissions:
contents: read

jobs:
windows:
name: MSVC ${{ matrix.arch }} ${{ matrix.config }}
native-msvc:
name: MSVC x64 validation
runs-on: windows-2022
strategy:
fail-fast: false
matrix:
arch: [x64, Win32]
config: [Debug, Release]
steps:
- uses: actions/checkout@v4
- name: Configure
shell: pwsh
run: |
cmake -S . -B build -G 'Visual Studio 17 2022' -A '${{ matrix.arch }}' -T v143 `
-DSIMDLIB_BUILD_TESTS=ON `
-DSIMDLIB_BUILD_TESTS_OPTIONAL=OFF `
-DSIMDLIB_BUILD_EXAMPLES=ON `
-DSIMDLIB_STRICT_WARNINGS=ON
- name: Build
run: cmake --build build --config ${{ matrix.config }} --parallel
- name: Test
run: ctest --test-dir build -C ${{ matrix.config }} --output-on-failure
- name: Build every MSVC validation cell
run: tools/Build.ps1 -Scope Native -Compiler Msvc
- name: Test the exact MSVC build receipt
run: tools/Run-Tests.ps1 -Scope Native -Compiler Msvc
- name: Build MSVC benchmark artifacts explicitly
run: tools/Build-Benchmarks.ps1 -Scope Native -Compiler Msvc
- name: Upload MSVC evidence
if: always()
uses: actions/upload-artifact@v4
with:
name: msvc-evidence
path: |
out/pipeline/windows-msvc/**/provenance
out/pipeline/windows-msvc/**/reports
out/pipeline/windows-msvc/**/validation-build.manifest
out/pipeline/windows-msvc/**/benchmark-build.manifest
out/pipeline/windows-msvc/**/build/register-codegen/**/*.json
out/pipeline/windows-msvc/**/build/register-codegen/**/*.txt
out/pipeline/windows-msvc/**/build/method-flags-codegen/**/*.json
out/pipeline/windows-msvc/**/build/method-flags-codegen/**/*.txt
out/pipeline/logs
out/pipeline/provenance
if-no-files-found: error

clang-cl:
name: clang-cl ${{ matrix.arch }} ${{ matrix.config }}
native-clangcl:
name: clang-cl and Clang coverage x64 validation
runs-on: windows-2022
strategy:
fail-fast: false
matrix:
arch: [x64, x86]
config: [Debug, Release]
steps:
- uses: actions/checkout@v4
- uses: ilammy/msvc-dev-cmd@v1
- name: Build every Clang validation cell
run: tools/Build.ps1 -Scope Native -Compiler ClangCl,ClangCoverage
- name: Test the exact Clang build receipt
run: tools/Run-Tests.ps1 -Scope Native -Compiler ClangCl,ClangCoverage
- name: Build clang-cl benchmark artifacts explicitly
run: tools/Build-Benchmarks.ps1 -Scope Native -Compiler ClangCl
- name: Upload Clang evidence
if: always()
uses: actions/upload-artifact@v4
with:
arch: ${{ matrix.arch }}
- name: Configure standalone clang-cl
run: >-
cmake -S . -B build -G Ninja
-DCMAKE_BUILD_TYPE=${{ matrix.config }}
-DCMAKE_CXX_COMPILER=clang-cl
-DSIMDLIB_BUILD_TESTS=ON
-DSIMDLIB_BUILD_TESTS_OPTIONAL=OFF
-DSIMDLIB_BUILD_EXAMPLES=ON
-DSIMDLIB_STRICT_WARNINGS=ON
- name: Build
run: cmake --build build --parallel
- name: Test
run: ctest --test-dir build --output-on-failure
name: clang-evidence
path: |
out/pipeline/windows-clangcl/**/provenance
out/pipeline/windows-clangcl/**/reports
out/pipeline/windows-clangcl/**/validation-build.manifest
out/pipeline/windows-clangcl/**/benchmark-build.manifest
out/pipeline/windows-clangcl/**/build/register-codegen/**/*.json
out/pipeline/windows-clangcl/**/build/register-codegen/**/*.txt
out/pipeline/windows-clangcl/**/build/method-flags-codegen/**/*.json
out/pipeline/windows-clangcl/**/build/method-flags-codegen/**/*.txt
out/pipeline/windows-clang-coverage/**/provenance
out/pipeline/windows-clang-coverage/**/reports
out/pipeline/windows-clang-coverage/**/validation-build.manifest
out/pipeline/windows-clang-coverage/**/build/method-flags-codegen/**/*.json
out/pipeline/windows-clang-coverage/**/build/method-flags-codegen/**/*.txt
out/pipeline/logs
out/pipeline/provenance
if-no-files-found: error

linux:
name: ${{ matrix.compiler }} ${{ matrix.arch }} ${{ matrix.config }}
container-compilers:
name: GCC 13, GCC 14, and Clang 22 containers
runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
compiler: [gcc, clang]
arch: [x64, x86]
config: [Debug, Release]
steps:
- uses: actions/checkout@v4
- name: Install x86 multilib support
if: matrix.arch == 'x86'
run: sudo apt-get update && sudo apt-get install -y g++-multilib
- name: Select compiler and architecture
- name: Install required Docker Compose
shell: bash
run: |
if [[ '${{ matrix.compiler }}' == 'clang' ]]; then
echo 'CXX=clang++' >> "$GITHUB_ENV"
else
echo 'CXX=g++' >> "$GITHUB_ENV"
fi
if [[ '${{ matrix.arch }}' == 'x86' ]]; then
echo 'ARCH_FLAGS=-m32' >> "$GITHUB_ENV"
else
echo 'ARCH_FLAGS=' >> "$GITHUB_ENV"
fi
- name: Configure
run: >-
cmake -S . -B build -G Ninja
-DCMAKE_BUILD_TYPE=${{ matrix.config }}
-DCMAKE_CXX_FLAGS="${ARCH_FLAGS}"
-DCMAKE_EXE_LINKER_FLAGS="${ARCH_FLAGS}"
-DSIMDLIB_BUILD_TESTS=ON
-DSIMDLIB_BUILD_TESTS_OPTIONAL=OFF
-DSIMDLIB_BUILD_EXAMPLES=ON
-DSIMDLIB_STRICT_WARNINGS=ON
- name: Build
run: cmake --build build --parallel
- name: Test
run: ctest --test-dir build --output-on-failure

feature-matrix:
name: AVX2 FMA BMI1 BMI2 enabled and disabled
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Configure strict Release matrix
run: >-
cmake -S . -B build -G Ninja
-DCMAKE_BUILD_TYPE=Release
-DSIMDLIB_BUILD_TESTS=ON
-DSIMDLIB_BUILD_TESTS_OPTIONAL=ON
-DSIMDLIB_BUILD_EXAMPLES=ON
-DSIMDLIB_STRICT_WARNINGS=ON
- name: Build
run: cmake --build build --parallel
- name: Run feature profiles
run: ctest --test-dir build --output-on-failure -L 'AVX2|FMA|BMI|SCALAR'

sanitizer:
name: Clang ASan and UBSan
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Configure
env:
CXX: clang++
run: >-
cmake -S . -B build -G Ninja
-DCMAKE_BUILD_TYPE=Debug
-DCMAKE_CXX_FLAGS='-fsanitize=address,undefined -fno-omit-frame-pointer'
-DCMAKE_EXE_LINKER_FLAGS='-fsanitize=address,undefined'
-DSIMDLIB_BUILD_TESTS=ON
-DSIMDLIB_BUILD_TESTS_OPTIONAL=OFF
-DSIMDLIB_BUILD_EXAMPLES=ON
-DSIMDLIB_STRICT_WARNINGS=ON
- name: Build
run: cmake --build build --parallel
- name: Test
run: ctest --test-dir build --output-on-failure

contract-gates:
name: constexpr, header hygiene, ODR, and consumer
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Configure header and constexpr probes
run: >-
cmake -S . -B build/contracts -G Ninja
-DCMAKE_BUILD_TYPE=Release
-DSIMDLIB_BUILD_TESTS=OFF
-DSIMDLIB_BUILD_CONFIGURATION_TESTS=ON
-DSIMDLIB_BUILD_HEADER_TESTS=ON
-DSIMDLIB_BUILD_SMOKE_TESTS=ON
-DSIMDLIB_STRICT_WARNINGS=ON
- name: Build compile-time contracts
run: cmake --build build/contracts --parallel
- name: Run multi-translation-unit ODR smoke test
run: ctest --test-dir build/contracts --output-on-failure -R SimdLib.HeaderOnlySmoke
- name: Configure add_subdirectory consumer
run: >-
cmake -S tests/consumer -B build/consumer -G Ninja
-DCMAKE_BUILD_TYPE=Release
-DSIMDLIB_SOURCE_DIR=${{ github.workspace }}
- name: Build and test header-only consumer
DOCKER_COMPOSE_VERSION: v2.39.0
run: |
cmake --build build/consumer --parallel
ctest --test-dir build/consumer --output-on-failure
plugin_dir="${HOME}/.docker/cli-plugins"
asset_name="docker-compose-linux-x86_64"
release_url="https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}"
mkdir -p "${plugin_dir}"
curl --fail --location --silent --show-error \
"${release_url}/${asset_name}" \
--output "${plugin_dir}/docker-compose"
expected_sha256="$(curl --fail --location --silent --show-error \
"${release_url}/${asset_name}.sha256" | awk '{print $1}')"
actual_sha256="$(sha256sum "${plugin_dir}/docker-compose" | awk '{print $1}')"
test -n "${expected_sha256}"
test "${actual_sha256}" = "${expected_sha256}"
chmod +x "${plugin_dir}/docker-compose"
docker compose version
- name: Build every Linux validation cell
shell: pwsh
run: tools/Build.ps1 -Scope Containers
- name: Test the exact Linux build receipt
shell: pwsh
run: tools/Run-Tests.ps1 -Scope Containers
- name: Build Linux benchmark artifacts explicitly
shell: pwsh
run: tools/Build-Benchmarks.ps1 -Scope Containers
- name: Upload container evidence
if: always()
uses: actions/upload-artifact@v4
with:
name: linux-container-evidence
path: |
out/pipeline/linux-*/**/provenance
out/pipeline/linux-*/**/reports
out/pipeline/linux-*/**/validation-build.manifest
out/pipeline/linux-*/**/benchmark-build.manifest
out/pipeline/linux-*/**/build/register-codegen/**/*.json
out/pipeline/linux-*/**/build/register-codegen/**/*.txt
out/pipeline/linux-*/**/build/method-flags-codegen/**/*.json
out/pipeline/linux-*/**/build/method-flags-codegen/**/*.txt
out/pipeline/logs
out/pipeline/provenance
if-no-files-found: error
29 changes: 29 additions & 0 deletions .github/workflows/container-reproducibility.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: Container reproducibility

on:
workflow_dispatch:
schedule:
- cron: '17 9 * * 1'

permissions:
contents: read

jobs:
container-reproducibility:
name: Rebuild pinned images without cache
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Rebuild pinned environments without compiling the project
shell: pwsh
run: tools/Run-ContainerMatrix.ps1 -Action InspectEnvironment -NoImageCache
- name: Record image identities and sizes
shell: pwsh
run: docker image inspect simdlib/gcc13:local simdlib/gcc14:local simdlib/clang22:local | Out-File -Encoding utf8 out/pipeline/image-inspect.json
- name: Upload reproducibility evidence
if: always()
uses: actions/upload-artifact@v4
with:
name: container-reproducibility-evidence
path: out/pipeline
if-no-files-found: error
3 changes: 2 additions & 1 deletion .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"recommendations": [
"ms-vscode.cmake-tools"
"ms-vscode.cmake-tools",
"ms-vscode.cpptools"
]
}
18 changes: 13 additions & 5 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,17 @@
"cmake.ctest.allowParallelJobs": true,
"cmake.ctest.testSuiteDelimiter": "\\.",
"cmake.ctest.testSuiteDelimiterMaxOccurrence": 0,
"cmake.preRunCoverageTarget": "SimdLibCoverageReset",
"cmake.postRunCoverageTarget": "SimdLibCoverageReport",
"cmake.coverageInfoFiles": [
"${workspaceFolder}/build-coverage/coverage.info"
]
"C_Cpp.formatting": "clangFormat",
"C_Cpp.clang_format_style": "file",
"C_Cpp.clang_format_fallbackStyle": "none",
"[c]": {
"editor.defaultFormatter": "ms-vscode.cpptools",
"editor.formatOnSave": true,
"editor.formatOnSaveMode": "modificationsIfAvailable"
},
"[cpp]": {
"editor.defaultFormatter": "ms-vscode.cpptools",
"editor.formatOnSave": true,
"editor.formatOnSaveMode": "modificationsIfAvailable"
}
}
Loading
Loading