diff --git a/cpp/cmake/gtest.cmake b/cpp/cmake/gtest.cmake index e86bf497..4216c66b 100644 --- a/cpp/cmake/gtest.cmake +++ b/cpp/cmake/gtest.cmake @@ -1,51 +1,57 @@ if(TESTING) - include(GoogleTest) + include(GoogleTest) # Standart CMake modülü include(FetchContent) + # 🚀 UPGRADE: Updated to v1.14.0. + # The comment about WASI-SDK 12 is likely obsolete. Modern GTest handles + # 'no-exception' environments much better via internal macros. FetchContent_Declare( GTest GIT_REPOSITORY https://github.com/google/googletest.git - # Version 1.12.1 is not compatible with WASI-SDK 12 - GIT_TAG release-1.10.0 + GIT_TAG v1.14.0 + SYSTEM # 🛡️ Automatically suppresses warnings from GTest headers FIND_PACKAGE_ARGS ) - set(BUILD_GMOCK OFF CACHE BOOL "Build with gMock disabled") - set(INSTALL_GTEST OFF CACHE BOOL "gTest installation disabled") - - FetchContent_MakeAvailable(GTest) - - if (NOT GTest_FOUND) - # FetchContent_MakeAvailable calls FetchContent_Populate if `find_package` is unsuccessful - # so these variables will be available if we reach this case - set_property(DIRECTORY ${gtest_SOURCE_DIR} PROPERTY EXCLUDE_FROM_ALL) - set_property(DIRECTORY ${gtest_BINARY_DIR} PROPERTY EXCLUDE_FROM_ALL) - - # Disable all warning when compiling gtest - target_compile_options( - gtest - PRIVATE - -w + # ⚡ CONFIGURATION: Set cache variables explicitly to control GTest behavior. + set(BUILD_GMOCK OFF CACHE BOOL "Build with gMock disabled" FORCE) + set(INSTALL_GTEST OFF CACHE BOOL "gTest installation disabled" FORCE) + + # 🕸️ WASM SPECIFIC CONFIGURATION + if(WASM) + # WASM environments often lack Pthread support or filesystem access. + set(gtest_disable_pthreads ON CACHE BOOL "Disable pthreads for WASM" FORCE) + + # Instead of manually patching definitions later, we inject them here if possible, + # or rely on GTest auto-detecting '-fno-exceptions' from the compiler flags. + # However, forcing these is safe for Aztec's circuit environment: + add_compile_definitions( + GTEST_HAS_EXCEPTIONS=0 + GTEST_HAS_STREAM_REDIRECTION=0 + GTEST_HAS_POSIX_RE=0 + GTEST_HAS_CLONE=0 ) + endif() - if(WASM) - target_compile_definitions( - gtest - PRIVATE - -DGTEST_HAS_EXCEPTIONS=0 - -DGTEST_HAS_STREAM_REDIRECTION=0 - ) - endif() - - mark_as_advanced( - BUILD_GMOCK BUILD_GTEST BUILD_SHARED_LIBS - gmock_build_tests gtest_build_samples gtest_build_tests - gtest_disable_pthreads gtest_force_shared_crt gtest_hide_internal_symbols - ) + # 🧠 SMART PATTERN: "Populate & Add" + FetchContent_GetProperties(GTest) + if(NOT GTest_POPULATED) + FetchContent_Populate(GTest) + + # 🛡️ ISOLATION: Don't build GTest as part of 'all', only when tests are requested. + add_subdirectory(${gtest_SOURCE_DIR} ${gtest_BINARY_DIR} EXCLUDE_FROM_ALL) + endif() + # 🔗 ALIASING: Modern GTest exports GTest::gtest, but for compatibility + # with older find_package calls or custom scripts, we keep these if needed. + if(NOT TARGET GTest::gtest) add_library(GTest::gtest ALIAS gtest) add_library(GTest::gtest_main ALIAS gtest_main) endif() + # CMake'in standart test mekanizmasını aç enable_testing() + + # GTest'in kendi test keşif (discovery) modülünü dahil et + include(GoogleTest) endif()