Files
triangles_v5/cmake/BuildLevelDB.cmake
sami7777 25475d1057 Fix C++20 build: allocators + bundled LevelDB
C++20 broke two things in the prior bump:

1. std::allocator no longer exposes pointer/const_pointer/reference/
   const_reference member typedefs, and the 2-arg allocate(n, hint) was
   removed. Both secure_allocator and zero_after_free_allocator inherited
   these from std::allocator. Define the typedefs ourselves and switch
   the secure_allocator allocate() to the single-arg form.

2. Bundled src/leveldb uses `std::memory_order::memory_order_relaxed`
   which was valid in C++17 but became a hard error in C++20 (memory_order
   is now a scoped enum class — the values are at namespace scope or
   memory_order::relaxed, not memory_order::memory_order_relaxed). LevelDB
   itself only needs C++11, so pin its targets to C++17 in BuildLevelDB.cmake
   instead of patching vendored code.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 18:34:38 -07:00

29 lines
1.0 KiB
CMake

# cmake/BuildLevelDB.cmake
# Builds the bundled LevelDB via its native CMake sub-build.
# Exposes leveldb_lib, leveldb_memenv, leveldb_bundled, and build_leveldb.
set(LEVELDB_SOURCE_DIR "${CMAKE_SOURCE_DIR}/src/leveldb")
set(LEVELDB_BINARY_DIR "${CMAKE_BINARY_DIR}/leveldb")
if(NOT TARGET leveldb_lib)
add_subdirectory("${LEVELDB_SOURCE_DIR}" "${LEVELDB_BINARY_DIR}")
endif()
# Pin bundled LevelDB to C++17. It only needs C++11 (declared via its own
# target_compile_features) but inherits CMAKE_CXX_STANDARD=20 from the
# top-level project, where some of its atomic-enum syntax
# (std::memory_order::memory_order_relaxed) becomes a hard error.
foreach(_leveldb_target leveldb_lib leveldb_memenv)
if(TARGET ${_leveldb_target})
set_target_properties(${_leveldb_target} PROPERTIES
CXX_STANDARD 17
CXX_STANDARD_REQUIRED ON
CXX_EXTENSIONS OFF
)
endif()
endforeach()
if(NOT TARGET build_leveldb)
add_custom_target(build_leveldb DEPENDS leveldb_lib leveldb_memenv)
endif()