diff --git a/.github/workflows/bvt-appleclang-arm64e.yml b/.github/workflows/bvt-appleclang-arm64e.yml new file mode 100644 index 00000000..bb611a79 --- /dev/null +++ b/.github/workflows/bvt-appleclang-arm64e.yml @@ -0,0 +1,39 @@ +on: + workflow_call: + workflow_dispatch: + +jobs: + bvt-appleclang-arm64e: + runs-on: macos-26 + steps: + - uses: actions/checkout@v7 + + - name: Check toolchain versions + run: | + cc --version + xcodebuild -version + cmake --version + ninja --version + + - name: Build and run test with AppleClang (arm64e with PAC) on cmake + run: | + cmake --preset default -DCMAKE_CXX_STANDARD=23 -DPROXY_BUILD_MODULES=FALSE -DCMAKE_OSX_ARCHITECTURES=arm64e + cmake --build --preset default -j + ctest --preset default -j + mkdir build/cmake/drop + bash ./tools/dump_build_env.sh c++ build/cmake/drop/env-info.json + + - name: Build and run freestanding test with AppleClang (arm64e with PAC) on cmake + run: | + cmake --preset freestanding -DCMAKE_CXX_STANDARD=23 -DPROXY_BUILD_MODULES=FALSE -DCMAKE_OSX_ARCHITECTURES=arm64e + cmake --build --preset freestanding -j + ctest --preset freestanding -j + + - name: Run benchmarks + run: build/cmake/benchmarks/msft_proxy_benchmarks --benchmark_min_warmup_time=0.1 --benchmark_min_time=0.1s --benchmark_repetitions=30 --benchmark_enable_random_interleaving=true --benchmark_report_aggregates_only=true --benchmark_format=json > build/cmake/drop/benchmarking-results.json + + - name: Archive benchmarking results + uses: actions/upload-artifact@v7 + with: + name: drop-apple-pac + path: build/cmake/drop/ diff --git a/.github/workflows/pipeline-ci.yml b/.github/workflows/pipeline-ci.yml index f1863b7f..70ea9412 100644 --- a/.github/workflows/pipeline-ci.yml +++ b/.github/workflows/pipeline-ci.yml @@ -33,6 +33,10 @@ jobs: name: Run BVT with AppleClang if: github.event_name != 'push' || github.repository == 'ngcpp/proxy' + run-bvt-appleclang-arm64e: + uses: ./.github/workflows/bvt-appleclang-arm64e.yml + name: Run BVT with AppleClang (arm64e with PAC) + run-bvt-nvhpc: uses: ./.github/workflows/bvt-nvhpc.yml name: Run BVT with NVHPC @@ -56,4 +60,4 @@ jobs: report: uses: ./.github/workflows/bvt-report.yml name: Generate report - needs: [run-bvt-gcc, run-bvt-clang, run-bvt-msvc, run-bvt-appleclang, run-bvt-nvhpc, run-bvt-oneapi] + needs: [run-bvt-gcc, run-bvt-clang, run-bvt-msvc, run-bvt-appleclang, run-bvt-appleclang-arm64e, run-bvt-nvhpc, run-bvt-oneapi] diff --git a/.gitignore b/.gitignore index 3b200638..e9ff578c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ # Ignore build directories -build/ +/build* Testing/ # Python bytecode cache diff --git a/CMakeLists.txt b/CMakeLists.txt index 94d89765..aeac43e6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -120,7 +120,7 @@ if(BUILD_TESTING) -Wall -Wextra -Wpedantic - $<$:-Wno-c++2b-extensions> + $<$:-Wno-c++2b-extensions> ) set(PROXY_STRICT_WARNING_FLAGS ${PROXY_BUILD_FLAGS} -Werror) endif() diff --git a/docs/spec/basic_facade_builder/build.md b/docs/spec/basic_facade_builder/build.md index 68d36a1f..4fa34ae2 100644 --- a/docs/spec/basic_facade_builder/build.md +++ b/docs/spec/basic_facade_builder/build.md @@ -59,10 +59,8 @@ int main() { static_assert(std::is_nothrow_move_constructible_v>); static_assert(std::is_nothrow_destructible_v>); - static_assert( - std::is_trivially_copy_constructible_v>); - static_assert( - std::is_trivially_move_constructible_v>); + static_assert(std::is_nothrow_copy_constructible_v>); + static_assert(std::is_nothrow_move_constructible_v>); static_assert(std::is_trivially_destructible_v>); } ``` diff --git a/include/proxy/v4/detail/compatibility_check.h b/include/proxy/v4/detail/compatibility_check.h index 0c06083b..1740b3ae 100644 --- a/include/proxy/v4/detail/compatibility_check.h +++ b/include/proxy/v4/detail/compatibility_check.h @@ -25,4 +25,12 @@ static_assert(sizeof(derived) == sizeof(char), } // namespace pro::inline v4::detail::compatibility_check #endif +#ifdef __has_feature +#if __has_feature(ptrauth_calls) && \ + (!defined(__PTRAUTH__) || !__has_include()) +#error "The Pointer Authentication feature is incomplete" +#endif // __has_feature(ptrauth_calls) && (!defined(__PTRAUTH__) || + // !__has_include()) +#endif // __has_feature + #endif // MSFT_PROXY_V4_DETAIL_COMPATIBILITY_CHECK_H_ diff --git a/include/proxy/v4/detail/core.h b/include/proxy/v4/detail/core.h index 31c2ae2e..00b87943 100644 --- a/include/proxy/v4/detail/core.h +++ b/include/proxy/v4/detail/core.h @@ -17,6 +17,7 @@ #include #include "../proxy_macros.h" +#include "./facade_meta_traits.h" #if __has_cpp_attribute(msvc::no_unique_address) #define PRO4D_NO_UNIQUE_ADDRESS_ATTRIBUTE msvc::no_unique_address @@ -39,6 +40,9 @@ namespace detail { template struct basic_facade_traits; +template +struct meta_storage; + } // namespace detail enum class constraint_level { none, nontrivial, nothrow, trivial }; @@ -79,12 +83,12 @@ template