Skip to content
Open
Changes from all commits
Commits
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
72 changes: 39 additions & 33 deletions cpp/cmake/gtest.cmake
Original file line number Diff line number Diff line change
@@ -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()