@@ -49,6 +49,7 @@ include(GNUInstallDirs)
4949
5050include (CheckPythonModuleExists)
5151include (GenerateBuiltinsList)
52+ include (CheckLibraryExists)
5253
5354check_python_module_exists(PYTHON_HAVE_MARKUPSAFE markupsafe)
5455
@@ -58,7 +59,7 @@ set(CMAKE_CXX_STANDARD 20)
5859# endif()
5960
6061if (NOT CMAKE_C_STANDARD)
61- set (CMAKE_C_STANDARD 90)
62+ set (CMAKE_C_STANDARD 90)
6263endif ()
6364
6465set (is-freebsd $<PLATFORM_ID:FreeBSD>)
@@ -100,6 +101,13 @@ option(V8_ENABLE_SPARKPLUG "Enable Sparkplug baseline JIT" ON)
100101option (V8_ENABLE_TEMPORAL "Enable Temporal API support" OFF )
101102option (V8_ENABLE_WEBASSEMBLY "Enable WebAssembly support" OFF )
102103
104+ # Detect presence of libatomic in the current toolchain/sysroot. Some
105+ # hermetic toolchains omit it; in that case, avoid linking -latomic.
106+ set (V8_HAVE_LIBATOMIC 0)
107+ if (CMAKE_SYSTEM_NAME STREQUAL "Linux" )
108+ check_library_exists(atomic __atomic_fetch_add_8 "" V8_HAVE_LIBATOMIC)
109+ endif ()
110+
103111set (
104112 v8_defines
105113 $<${is-darwin}:V8_HAVE_TARGET_OS>
@@ -179,6 +187,10 @@ target_include_directories(v8-i18n-support
179187 ${CMAKE_CURRENT_SOURCE_DIR} /v8/include
180188)
181189
190+ # Always use Proton's Abseil headers to avoid mismatches with vendored copy.
191+ set (V8_ABSEIL_INCLUDE_DIR "${proton_SOURCE_DIR} /contrib/abseil-cpp" )
192+ message (STATUS "Force using Proton Abseil headers: ${V8_ABSEIL_INCLUDE_DIR} " )
193+
182194file (GLOB api-sources RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} CONFIGURE_DEPENDS v8/src/api/*.cc)
183195if (V8_ENABLE_WEBASSEMBLY)
184196 file (GLOB asmjs-sources RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} CONFIGURE_DEPENDS v8/src/asmjs/*.cc)
@@ -419,17 +431,24 @@ if(enable-fPIC)
419431 target_compile_options (v8_base_without_compiler PRIVATE ${enable-fpic})
420432endif ()
421433
422- target_include_directories (v8_base_without_compiler
423- PRIVATE
424- $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /v8/include >
425- $<BUILD_INTERFACE:$<TARGET_PROPERTY:v8-bytecodes-builtin-list,INTERFACE_INCLUDE_DIRECTORIES >>
426- ${CMAKE_CURRENT_SOURCE_DIR} /v8
427- ${CMAKE_CURRENT_SOURCE_DIR} /v8/third_party/abseil-cpp
428- ${CMAKE_CURRENT_SOURCE_DIR} /v8/third_party/highway/src
429- ${CMAKE_CURRENT_SOURCE_DIR} /v8/third_party/fp16/src/include
430- ${CMAKE_CURRENT_SOURCE_DIR} /v8/third_party/zlib
431- ${CMAKE_CURRENT_BINARY_DIR}
432- )
434+ target_include_directories (v8_base_without_compiler
435+ PRIVATE
436+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /v8/include >
437+ $<BUILD_INTERFACE:$<TARGET_PROPERTY:v8-bytecodes-builtin-list,INTERFACE_INCLUDE_DIRECTORIES >>
438+ ${CMAKE_CURRENT_SOURCE_DIR} /v8
439+ ${V8_ABSEIL_INCLUDE_DIR}
440+ ${CMAKE_CURRENT_SOURCE_DIR} /v8/third_party/highway/src
441+ ${CMAKE_CURRENT_SOURCE_DIR} /v8/third_party/fp16/src/include
442+ ${CMAKE_CURRENT_SOURCE_DIR} /v8/third_party/zlib
443+ ${CMAKE_CURRENT_BINARY_DIR}
444+ ${CMAKE_CURRENT_SOURCE_DIR} /shims
445+ )
446+
447+ # Ensure compatibility shims are visible in C++ TUs for this lib.
448+ target_compile_options (v8_base_without_compiler PRIVATE
449+ $<$<COMPILE_LANGUAGE:CXX>:-include >
450+ $<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR} /shims/compat_all.h>
451+ )
433452
434453target_link_libraries (
435454 v8_base_without_compiler
@@ -484,7 +503,7 @@ target_include_directories(v8_compiler
484503 PRIVATE
485504 ${CMAKE_CURRENT_BINARY_DIR}
486505 ${CMAKE_CURRENT_SOURCE_DIR} /v8
487- ${CMAKE_CURRENT_SOURCE_DIR} /v8/third_party/abseil-cpp
506+ ${V8_ABSEIL_INCLUDE_DIR}
488507 ${CMAKE_CURRENT_SOURCE_DIR} /v8/third_party/highway/src
489508 ${CMAKE_CURRENT_SOURCE_DIR} /v8/third_party/fp16/src/include
490509 $<BUILD_INTERFACE:$<TARGET_PROPERTY:v8-bytecodes-builtin-list,INTERFACE_INCLUDE_DIRECTORIES >>
@@ -767,13 +786,13 @@ target_link_libraries(v8_libplatform PRIVATE v8_libbase)
767786
768787add_library (v8_libsampler STATIC v8/src/libsampler/sampler.cc)
769788
770- target_include_directories (v8_libsampler
771- PRIVATE
772- ${CMAKE_CURRENT_SOURCE_DIR} /v8
773- ${CMAKE_CURRENT_SOURCE_DIR} /v8/include
774- ${CMAKE_CURRENT_SOURCE_DIR} /v8/third_party/abseil-cpp
775- ${CMAKE_CURRENT_SOURCE_DIR} /v8/third_party/fp16/src/include
776- )
789+ target_include_directories (v8_libsampler
790+ PRIVATE
791+ ${CMAKE_CURRENT_SOURCE_DIR} /v8
792+ ${CMAKE_CURRENT_SOURCE_DIR} /v8/include
793+ ${V8_ABSEIL_INCLUDE_DIR}
794+ ${CMAKE_CURRENT_SOURCE_DIR} /v8/third_party/fp16/src/include
795+ )
777796
778797target_compile_definitions (v8_libsampler PRIVATE $<${is-msvc }:_HAS_EXCEPTIONS=0>)
779798target_compile_options (v8_libsampler PRIVATE ${disable-exceptions})
@@ -835,15 +854,16 @@ if(enable-fPIC)
835854 target_compile_options (v8_libbase PRIVATE ${enable-fpic})
836855endif ()
837856target_include_directories (v8_libbase PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} /v8)
838- target_include_directories (v8_libbase PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} /v8/third_party/abseil-cpp )
857+ target_include_directories (v8_libbase PRIVATE ${V8_ABSEIL_INCLUDE_DIR} )
839858target_include_directories (v8_libbase PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} /v8/third_party/highway/src)
859+ target_include_directories (v8_libbase PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} /shims)
840860target_sources (v8_libbase PRIVATE v8/third_party/highway/src/hwy/abort.cc)
841861target_link_libraries (v8_libbase
842862 PRIVATE
843863 Threads::Threads
844864 $<${is-linux}:${CMAKE_DL_LIBS} >
845865 $<${is-linux}:rt>
846- $<${is-linux}:atomic>
866+ $<$< AND :$ {is-linux},$< BOOL : ${V8_HAVE_LIBATOMIC} >> :atomic>
847867 $<${is-win}:winmm>
848868 $<${is-win}:dbghelp>
849869 PUBLIC
@@ -868,7 +888,7 @@ if (NOT CMAKE_CROSSCOMPILING)
868888 PRIVATE
869889 ${CMAKE_CURRENT_SOURCE_DIR} /v8
870890 ${CMAKE_CURRENT_SOURCE_DIR} /v8/include
871- ${CMAKE_CURRENT_SOURCE_DIR} /v8/third_party/abseil-cpp
891+ ${V8_ABSEIL_INCLUDE_DIR}
872892 )
873893
874894 target_link_libraries (bytecode_builtins_list_generator v8_libbase)
@@ -1000,15 +1020,15 @@ if(enable-fPIC)
10001020endif ()
10011021target_link_libraries (v8_torque_generated PRIVATE v8-bytecodes-builtin-list)
10021022
1003- target_include_directories (v8_torque_generated
1004- PUBLIC
1005- ${CMAKE_CURRENT_BINARY_DIR}
1006- ${CMAKE_CURRENT_SOURCE_DIR} /v8/include
1007- ${CMAKE_CURRENT_SOURCE_DIR} /v8
1008- ${CMAKE_CURRENT_SOURCE_DIR} /v8/third_party/abseil-cpp
1009- ${CMAKE_CURRENT_SOURCE_DIR} /v8/third_party/highway/src
1010- ${CMAKE_CURRENT_SOURCE_DIR} /v8/third_party/fp16/src/include
1011- )
1023+ target_include_directories (v8_torque_generated
1024+ PUBLIC
1025+ ${CMAKE_CURRENT_BINARY_DIR}
1026+ ${CMAKE_CURRENT_SOURCE_DIR} /v8/include
1027+ ${CMAKE_CURRENT_SOURCE_DIR} /v8
1028+ ${V8_ABSEIL_INCLUDE_DIR}
1029+ ${CMAKE_CURRENT_SOURCE_DIR} /v8/third_party/highway/src
1030+ ${CMAKE_CURRENT_SOURCE_DIR} /v8/third_party/fp16/src/include
1031+ )
10121032
10131033# we use torque here
10141034set (_torque_cc_deps ${torque_dirs} ${torque_files_abs} )
@@ -1053,7 +1073,7 @@ if (NOT CMAKE_CROSSCOMPILING)
10531073 target_include_directories (torque PRIVATE
10541074 ${CMAKE_CURRENT_SOURCE_DIR} /v8
10551075 ${CMAKE_CURRENT_SOURCE_DIR} /v8/include
1056- ${CMAKE_CURRENT_SOURCE_DIR} /v8/third_party/abseil-cpp
1076+ ${V8_ABSEIL_INCLUDE_DIR}
10571077 )
10581078 target_link_libraries (torque PRIVATE v8_libbase)
10591079endif ()
@@ -1109,7 +1129,12 @@ add_library(ch_contrib::v8_libsampler ALIAS v8_libsampler )
11091129add_library (ch_contrib::v8_initializers ALIAS v8_initializers )
11101130add_library (ch_contrib::v8_torque_generated ALIAS v8_torque_generated )
11111131# Abseil (vendored via v8/third_party/abseil-cpp) is required by V8 >=14.
1112- add_subdirectory (v8/third_party/abseil-cpp EXCLUDE_FROM_ALL )
1132+ # Proton must provide Abseil; do not build V8's vendored copy to avoid
1133+ # duplicate targets and API drift.
1134+ if (NOT TARGET absl::core_headers)
1135+ message (FATAL_ERROR "Proton Abseil targets not found (absl::core_headers). Ensure contrib/abseil-cpp-cmake is included before v8-cmake." )
1136+ endif ()
1137+ message (STATUS "Using Proton Abseil targets; skipping v8/third_party/abseil-cpp" )
11131138
11141139# simdutf (vendored via v8/third_party/simdutf) provides base64 helpers used by V8 builtins.
11151140add_library (v8_simdutf STATIC v8/third_party/simdutf/simdutf.cpp)
0 commit comments