aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/build-and-test.yml39
-rw-r--r--CMakeLists.txt10
-rw-r--r--tests/_feature_detect.cpp44
-rw-r--r--tests/architecture.hpp6
-rw-r--r--tests/basic.cpp36
-rw-r--r--tests/vector_code_gen.cpp12
6 files changed, 107 insertions, 40 deletions
diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml
index 2918c83e..793b52dd 100644
--- a/.github/workflows/build-and-test.yml
+++ b/.github/workflows/build-and-test.yml
@@ -3,7 +3,7 @@ on: [push, pull_request]
jobs:
test_on_ubuntu:
runs-on: ubuntu-latest
- name: g++-10
+ name: g++-10 (aarch64)
steps:
- name: Checkout oaknut repo
@@ -207,3 +207,40 @@ jobs:
- name: Build
working-directory: ${{github.workspace}}/build
run: cmake --build . --config Release
+
+ x86_64:
+ runs-on: ubuntu-latest
+ name: x86_64
+
+ steps:
+ - name: Checkout oaknut repo
+ uses: actions/checkout@v3
+
+ - name: Update package repositories
+ run: sudo apt-get update
+
+ - name: Install dependencies
+ run: sudo apt-get install -q -y ninja-build
+
+ - name: Checkout Catch2 v3 repo
+ uses: actions/checkout@v3
+ with:
+ repository: catchorg/Catch2
+ ref: v3.2.0
+ path: externals/catch
+
+ - name: Configure CMake
+ run: >
+ cmake
+ -B ${{github.workspace}}/build
+ -H.
+ -GNinja
+ -DOAKNUT_USE_BUNDLED_CATCH=ON
+
+ - name: Build
+ working-directory: ${{github.workspace}}/build
+ run: ninja
+
+ - name: Test
+ working-directory: ${{github.workspace}}/build
+ run: ./oaknut-tests -d yes
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1ad90ba5..5b4062d0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.8)
-project(oaknut LANGUAGES CXX VERSION 2.0.1)
+project(oaknut LANGUAGES CXX VERSION 2.0.2)
# Determine if we're built as a subproject (using add_subdirectory)
# or if this is the master project.
@@ -50,12 +50,16 @@ add_library(merry::oaknut ALIAS oaknut)
target_sources(oaknut INTERFACE "$<BUILD_INTERFACE:${header_files}>")
target_include_directories(oaknut INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
- $<INSTALL_INTERFACE:${CMAKE_INSTALL_LIBDIR}>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
target_compile_features(oaknut INTERFACE cxx_std_20)
# Tests
if (MASTER_PROJECT)
+ include(CTest)
+endif()
+
+if (BUILD_TESTING)
option(OAKNUT_USE_BUNDLED_CATCH "Use the embedded Catch2 submodule" OFF)
if (OAKNUT_USE_BUNDLED_CATCH)
add_subdirectory(externals/catch)
@@ -101,6 +105,8 @@ if (MASTER_PROJECT)
else()
target_compile_options(oaknut-tests PRIVATE -Wall -Wextra -Wcast-qual -pedantic -pedantic-errors -Wfatal-errors -Wno-missing-braces)
endif()
+
+ add_test(oaknut-tests oaknut-tests --durations yes)
endif()
# Install
diff --git a/tests/_feature_detect.cpp b/tests/_feature_detect.cpp
index 875abac4..60de46fb 100644
--- a/tests/_feature_detect.cpp
+++ b/tests/_feature_detect.cpp
@@ -5,8 +5,12 @@
#include <catch2/catch_test_macros.hpp>
-#include "oaknut/feature_detection/feature_detection.hpp"
-#include "oaknut/feature_detection/feature_detection_idregs.hpp"
+#include "architecture.hpp"
+
+#ifdef ON_ARM64
+
+# include "oaknut/feature_detection/feature_detection.hpp"
+# include "oaknut/feature_detection/feature_detection_idregs.hpp"
using namespace oaknut;
@@ -16,16 +20,16 @@ TEST_CASE("Print CPU features (Default)")
std::fputs("CPU Features: ", stdout);
-#define OAKNUT_CPU_FEATURE(name) \
- if (features.has(CpuFeature::name)) \
- std::fputs(#name " ", stdout);
-#include "oaknut/impl/cpu_feature.inc.hpp"
-#undef OAKNUT_CPU_FEATURE
+# define OAKNUT_CPU_FEATURE(name) \
+ if (features.has(CpuFeature::name)) \
+ std::fputs(#name " ", stdout);
+# include "oaknut/impl/cpu_feature.inc.hpp"
+# undef OAKNUT_CPU_FEATURE
std::fputs("\n", stdout);
}
-#if OAKNUT_SUPPORTS_READING_ID_REGISTERS == 1
+# if OAKNUT_SUPPORTS_READING_ID_REGISTERS == 1
TEST_CASE("Print CPU features (Using CPUID)")
{
@@ -36,16 +40,16 @@ TEST_CASE("Print CPU features (Using CPUID)")
std::fputs("CPU Features (CPUID method): ", stdout);
-# define OAKNUT_CPU_FEATURE(name) \
- if (features.has(CpuFeature::name)) \
- std::fputs(#name " ", stdout);
-# include "oaknut/impl/cpu_feature.inc.hpp"
-# undef OAKNUT_CPU_FEATURE
+# define OAKNUT_CPU_FEATURE(name) \
+ if (features.has(CpuFeature::name)) \
+ std::fputs(#name " ", stdout);
+# include "oaknut/impl/cpu_feature.inc.hpp"
+# undef OAKNUT_CPU_FEATURE
std::fputs("\n", stdout);
}
-#elif OAKNUT_SUPPORTS_READING_ID_REGISTERS == 2
+# elif OAKNUT_SUPPORTS_READING_ID_REGISTERS == 2
TEST_CASE("Print CPU features (Using CPUID)")
{
@@ -58,14 +62,16 @@ TEST_CASE("Print CPU features (Using CPUID)")
std::printf("CPU Features (CPUID method - Core %zu): ", core_index);
-# define OAKNUT_CPU_FEATURE(name) \
- if (features.has(CpuFeature::name)) \
- std::fputs(#name " ", stdout);
-# include "oaknut/impl/cpu_feature.inc.hpp"
-# undef OAKNUT_CPU_FEATURE
+# define OAKNUT_CPU_FEATURE(name) \
+ if (features.has(CpuFeature::name)) \
+ std::fputs(#name " ", stdout);
+# include "oaknut/impl/cpu_feature.inc.hpp"
+# undef OAKNUT_CPU_FEATURE
std::fputs("\n", stdout);
}
}
+# endif
+
#endif
diff --git a/tests/architecture.hpp b/tests/architecture.hpp
new file mode 100644
index 00000000..90471a73
--- /dev/null
+++ b/tests/architecture.hpp
@@ -0,0 +1,6 @@
+// SPDX-FileCopyrightText: Copyright (c) 2024 merryhime <https://mary.rs>
+// SPDX-License-Identifier: MIT
+
+#if defined(__ARM64__) || defined(__aarch64__) || defined(_M_ARM64)
+# define ON_ARM64
+#endif
diff --git a/tests/basic.cpp b/tests/basic.cpp
index e621faec..344d9d70 100644
--- a/tests/basic.cpp
+++ b/tests/basic.cpp
@@ -7,14 +7,18 @@
#include <catch2/catch_test_macros.hpp>
-#include "oaknut/code_block.hpp"
-#include "oaknut/dual_code_block.hpp"
+#include "architecture.hpp"
#include "oaknut/oaknut.hpp"
#include "rand_int.hpp"
using namespace oaknut;
using namespace oaknut::util;
+#ifdef ON_ARM64
+
+# include "oaknut/code_block.hpp"
+# include "oaknut/dual_code_block.hpp"
+
TEST_CASE("Basic Test")
{
CodeBlock mem{4096};
@@ -196,19 +200,6 @@ TEST_CASE("ADR", "[slow]")
}
}
-TEST_CASE("PageOffset (rollover)")
-{
- REQUIRE(PageOffset<21, 12>::encode(0x0000000088e74000, 0xffffffffd167dece) == 0xd2202);
-}
-
-TEST_CASE("PageOffset (page boundary)")
-{
- REQUIRE(PageOffset<21, 12>::encode(0x0001000000000002, 0x0001000000000001) == 0);
- REQUIRE(PageOffset<21, 12>::encode(0x0001000000000001, 0x0001000000000002) == 0);
- REQUIRE(PageOffset<21, 12>::encode(0x0001000000001000, 0x0001000000000fff) == 0x1fffff);
- REQUIRE(PageOffset<21, 12>::encode(0x0001000000000fff, 0x0001000000001000) == 0x080000);
-}
-
TEST_CASE("ADRP", "[slow]")
{
CodeBlock mem{4096};
@@ -325,3 +316,18 @@ TEST_CASE("MOVP2R (4GiB boundary)")
test(-i);
}
}
+
+#endif
+
+TEST_CASE("PageOffset (rollover)")
+{
+ REQUIRE(PageOffset<21, 12>::encode(0x0000000088e74000, 0xffffffffd167dece) == 0xd2202);
+}
+
+TEST_CASE("PageOffset (page boundary)")
+{
+ REQUIRE(PageOffset<21, 12>::encode(0x0001000000000002, 0x0001000000000001) == 0);
+ REQUIRE(PageOffset<21, 12>::encode(0x0001000000000001, 0x0001000000000002) == 0);
+ REQUIRE(PageOffset<21, 12>::encode(0x0001000000001000, 0x0001000000000fff) == 0x1fffff);
+ REQUIRE(PageOffset<21, 12>::encode(0x0001000000000fff, 0x0001000000001000) == 0x080000);
+}
diff --git a/tests/vector_code_gen.cpp b/tests/vector_code_gen.cpp
index baceeeff..5ede9e56 100644
--- a/tests/vector_code_gen.cpp
+++ b/tests/vector_code_gen.cpp
@@ -9,9 +9,13 @@
#include <catch2/catch_test_macros.hpp>
-#include "oaknut/code_block.hpp"
-#include "oaknut/oaknut.hpp"
-#include "rand_int.hpp"
+#include "architecture.hpp"
+
+#ifdef ON_ARM64
+
+# include "oaknut/code_block.hpp"
+# include "oaknut/oaknut.hpp"
+# include "rand_int.hpp"
using namespace oaknut;
using namespace oaknut::util;
@@ -83,3 +87,5 @@ TEST_CASE("Fibonacci (VectorCodeGenerator)")
REQUIRE(fib(5) == 5);
REQUIRE(fib(9) == 34);
}
+
+#endif