diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 16c3567537dc720cf8709bf0cd8fac3979c1e07e..178df06bd2a00c2f474c331422016f4738404448 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,6 +1,7 @@
 stages:
     - format
     - check
+    - build
 
 variables:
     GIT_STRATEGY: clone
@@ -8,3 +9,4 @@ variables:
 include:
   - local: /.gitlab-ci/format.yml
   - local: /.gitlab-ci/check.yml
+  - local: /.gitlab-ci/build.yml
diff --git a/.gitlab-ci/build.yml b/.gitlab-ci/build.yml
new file mode 100644
index 0000000000000000000000000000000000000000..6376e145f7f993a01c342f3304dfd6590c89a7e7
--- /dev/null
+++ b/.gitlab-ci/build.yml
@@ -0,0 +1,127 @@
+.compile_matrix_template_amd64_ubuntu_24.04:
+    parallel:
+      matrix:
+          - BUILD_TYPE:
+                - "Debug"
+                - "Release"
+            GENERATOR:
+                - "Unix Makefiles"
+                - "Ninja"
+            COMPILER:
+                - "clang"
+            COMPILER_VERSION:
+                - 16
+                - 17
+          - BUILD_TYPE:
+                - "Debug"
+                - "Release"
+            GENERATOR:
+                - "Unix Makefiles"
+                - "Ninja"
+            COMPILER:
+                - "gcc"
+            COMPILER_VERSION:
+                - 11
+                - 12
+                - 13
+                - 14
+    tags:
+        - compiler
+        - ubuntu-24.04-amd64
+
+compile_coverage_amd64_ubuntu_24.04:
+    stage: build
+    script:
+        - .ci/build/build.sh --compiler "${COMPILER}" --compiler-version "${COMPILER_VERSION}" --build-type "${BUILD_TYPE}" --generator "${GENERATOR}" --verbose --pedantic --coverage --build-dir "build"
+    artifacts:
+        when: always
+        expire_in: 1 week
+        paths:
+            - build
+    dependencies: []
+    variables:
+      GIT_SUBMODULE_STRATEGY: recursive
+      GENERATOR: "Ninja"
+      COMPILER: "gcc"
+      COMPILER_VERSION: 14
+      BUILD_TYPE: "Debug"
+    tags:
+        - compiler
+        - ubuntu-24.04-amd64
+
+compile_amd64_ubuntu_24.04:
+    variables:
+      GIT_SUBMODULE_STRATEGY: recursive
+    extends:
+        - .compile_matrix_template_amd64_ubuntu_24.04
+    stage: build
+    script:
+        - .ci/build/build.sh --compiler "${COMPILER}" --compiler-version "${COMPILER_VERSION}" --build-type "${BUILD_TYPE}" --generator "${GENERATOR}" --verbose --pedantic
+    artifacts:
+        when: always
+        expire_in: 1 week
+        paths:
+            - build_*
+    dependencies: []
+
+clang_tidy_amd64_ubuntu_24.04:
+    stage: build
+    script:
+        - .ci/build/build.sh --compiler clang --compiler-version "${COMPILER_VERSION}" --clang-tidy "clang-tidy-${COMPILER_VERSION}" --build-type "${BUILD_TYPE}" --generator "${GENERATOR}"  --verbose --pedantic
+    dependencies: []
+    variables:
+      GIT_SUBMODULE_STRATEGY: recursive
+      GENERATOR: "Ninja"
+      COMPILER_VERSION: 17
+    parallel:
+      matrix:
+          - BUILD_TYPE:
+                - "Debug"
+                - "Release"
+    tags:
+        - compiler
+        - ubuntu-24.04-amd64
+
+compile_sanitizer_amd64_ubuntu_24.04:
+    variables:
+      GIT_SUBMODULE_STRATEGY: recursive
+    stage: build
+    script:
+        - .ci/build/build.sh --compiler "${COMPILER}" --compiler-version "${COMPILER_VERSION}" --build-type "${BUILD_TYPE}" --generator "${GENERATOR}" --verbose "--${SANITIZER}-sanitizer" --build-dir "build_${BUILD_TYPE}_${SANITIZER}_${COMPILER}_${COMPILER_VERSION}"
+    artifacts:
+        when: always
+        expire_in: 1 week
+        paths:
+            - build_*
+    dependencies: []
+    parallel:
+      matrix:
+          - BUILD_TYPE:
+                - "Debug"
+                - "Release"
+            GENERATOR:
+                - "Ninja"
+            COMPILER:
+                - "clang"
+            COMPILER_VERSION:
+                - 17
+            SANITIZER:
+                - "undefined-behavior"
+                - "address"
+                - "thread"
+          - BUILD_TYPE:
+                - "Debug"
+                - "Release"
+            GENERATOR:
+                - "Ninja"
+            COMPILER:
+                - "gcc"
+            COMPILER_VERSION:
+                - 14
+            SANITIZER:
+                - "undefined-behavior"
+                - "thread"
+                - "address"
+    tags:
+        - compiler
+        - ubuntu-24.04-amd64