mirror of
https://github.com/openai/codex.git
synced 2026-10-28 18:58:46 +00:00
## Why The Bazel V8 source build supported Windows GNU but lacked an MSVC-targeting toolchain to produce `*-pc-windows-msvc` archives. ## What changed - Add opt-in archive targets for native Windows x64 and ARM64 hosts, selected by `//third_party/v8:rusty_v8_native_windows_archive_for_target`. - Fetch pinned LLVM and scope its `clang-cl` toolchain to V8 artifacts, using the installed Microsoft SDK. Bundle Chromium libc++ and compiler-rt builtins into the resulting `.lib`. - Adapt V8 dependencies, assembly, snapshot generation, and platform feature settings for MSVC, and derive test metadata from the selected engine features. - Document the native build workflow. Existing MSVC consumers continue using prebuilt artifacts; generated Rust bindings and publishing integration remain separate. GitOrigin-RevId: abd5049245aece90a116fc3bfeac2b158a76f6af
195 lines
7.4 KiB
Diff
195 lines
7.4 KiB
Diff
# What: make upstream V8 sources build cleanly in this hermetic toolchain setup.
|
|
# Scope: minimal source-level portability fixes only, such as libexecinfo guards,
|
|
# weak glibc symbol handling, and warning annotations; no dependency
|
|
# include-path rewrites or intentional V8 feature changes.
|
|
diff --git a/orig/v8-15.0.245.2/src/base/bits.h b/mod/v8-15.0.245.2/src/base/bits.h
|
|
index 179a10f..4791e96 100644
|
|
--- a/orig/v8-15.0.245.2/src/base/bits.h
|
|
+++ b/mod/v8-15.0.245.2/src/base/bits.h
|
|
@@ -270,11 +270,17 @@ inline constexpr uint32_t RoundDownToPowerOfTwo32(uint32_t value) {
|
|
}
|
|
|
|
// Precondition: 0 <= shift < 32
|
|
+#ifdef RotateRight32
|
|
+#undef RotateRight32
|
|
+#endif
|
|
inline constexpr uint32_t RotateRight32(uint32_t value, uint32_t shift) {
|
|
return (value >> shift) | (value << ((32 - shift) & 31));
|
|
}
|
|
|
|
// Precondition: 0 <= shift < 32
|
|
+#ifdef RotateLeft32
|
|
+#undef RotateLeft32
|
|
+#endif
|
|
inline constexpr uint32_t RotateLeft32(uint32_t value, uint32_t shift) {
|
|
return (value << shift) | (value >> ((32 - shift) & 31));
|
|
}
|
|
diff --git a/orig/v8-15.0.245.2/src/base/debug/stack_trace_posix.cc b/mod/v8-15.0.245.2/src/base/debug/stack_trace_posix.cc
|
|
index 6176ed4..a02043d 100644
|
|
--- a/orig/v8-15.0.245.2/src/base/debug/stack_trace_posix.cc
|
|
+++ b/mod/v8-15.0.245.2/src/base/debug/stack_trace_posix.cc
|
|
@@ -64,6 +64,7 @@ namespace {
|
|
volatile sig_atomic_t in_signal_handler = 0;
|
|
bool dump_stack_in_signal_handler = true;
|
|
|
|
+#if HAVE_EXECINFO_H
|
|
// The prefix used for mangled symbols, per the Itanium C++ ABI:
|
|
// http://www.codesourcery.com/cxx-abi/abi.html#mangling
|
|
const char kMangledSymbolPrefix[] = "_Z";
|
|
@@ -73,7 +74,6 @@ const char kMangledSymbolPrefix[] = "_Z";
|
|
const char kSymbolCharacters[] =
|
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_";
|
|
|
|
-#if HAVE_EXECINFO_H
|
|
// Demangles C++ symbols in the given text. Example:
|
|
//
|
|
// "out/Debug/base_unittests(_ZN10StackTraceC1Ev+0x20) [0x817778c]"
|
|
diff --git a/orig/v8-15.0.245.2/src/base/export-template.h b/mod/v8-15.0.245.2/src/base/export-template.h
|
|
index 861cfe4..1e73954 100644
|
|
--- a/orig/v8-15.0.245.2/src/base/export-template.h
|
|
+++ b/mod/v8-15.0.245.2/src/base/export-template.h
|
|
@@ -153,8 +153,10 @@
|
|
|
|
EXPORT_TEMPLATE_TEST(DEFAULT, );
|
|
EXPORT_TEMPLATE_TEST(DEFAULT, __attribute__((visibility("default"))));
|
|
+#if defined(_MSC_VER)
|
|
EXPORT_TEMPLATE_TEST(MSVC_HACK, __declspec(dllexport));
|
|
EXPORT_TEMPLATE_TEST(DEFAULT, __declspec(dllimport));
|
|
+#endif
|
|
|
|
#undef EXPORT_TEMPLATE_TEST
|
|
#undef EXPORT_TEMPLATE_TEST_DEFAULT_DEFAULT
|
|
diff --git a/orig/v8-15.0.245.2/src/base/platform/platform-posix.cc b/mod/v8-15.0.245.2/src/base/platform/platform-posix.cc
|
|
index dfb30b6..6ce12a5 100644
|
|
--- a/orig/v8-15.0.245.2/src/base/platform/platform-posix.cc
|
|
+++ b/mod/v8-15.0.245.2/src/base/platform/platform-posix.cc
|
|
@@ -95,7 +95,7 @@ extern int madvise(caddr_t, size_t, int);
|
|
#endif
|
|
|
|
#if defined(V8_LIBC_GLIBC)
|
|
-extern "C" void* __libc_stack_end;
|
|
+extern "C" void* __libc_stack_end V8_WEAK;
|
|
#endif
|
|
|
|
namespace v8 {
|
|
@@ -1476,7 +1476,8 @@ Stack::StackSlot Stack::ObtainCurrentThreadStackStart() {
|
|
// __libc_stack_end is process global and thus is only valid for
|
|
// the main thread. Check whether this is the main thread by checking
|
|
// __libc_stack_end is within the thread's stack.
|
|
- if ((base <= __libc_stack_end) && (__libc_stack_end <= stack_start)) {
|
|
+ if (__libc_stack_end != nullptr &&
|
|
+ (base <= __libc_stack_end) && (__libc_stack_end <= stack_start)) {
|
|
DCHECK(MainThreadIsCurrentThread());
|
|
return __libc_stack_end;
|
|
}
|
|
diff --git a/orig/v8-15.0.245.2/src/base/platform/platform-win32.cc b/mod/v8-15.0.245.2/src/base/platform/platform-win32.cc
|
|
index 11f9772..854a682 100644
|
|
--- a/orig/v8-15.0.245.2/src/base/platform/platform-win32.cc
|
|
+++ b/mod/v8-15.0.245.2/src/base/platform/platform-win32.cc
|
|
@@ -20,7 +20,11 @@
|
|
#include <windows.h>
|
|
|
|
// This has to come after windows.h.
|
|
+#ifdef __MINGW32__
|
|
+#include <versionhelpers.h>
|
|
+#else
|
|
#include <VersionHelpers.h>
|
|
+#endif
|
|
#include <dbghelp.h> // For SymLoadModule64 and al.
|
|
#include <malloc.h> // For _msize()
|
|
#include <mmsystem.h> // For timeGetTime().
|
|
@@ -69,9 +73,7 @@ static_assert(offsetof(V8_CRITICAL_SECTION, SpinCount) ==
|
|
// Extra functions for MinGW. Most of these are the _s functions which are in
|
|
// the Microsoft Visual Studio C++ CRT.
|
|
#ifdef __MINGW32__
|
|
-
|
|
-
|
|
-#ifndef __MINGW64_VERSION_MAJOR
|
|
+#if !defined(__MINGW64_VERSION_MAJOR)
|
|
|
|
#define _TRUNCATE 0
|
|
#define STRUNCATE 80
|
|
@@ -81,9 +83,6 @@ inline void MemoryFence() {
|
|
__asm__ __volatile__("xchgl %%eax,%0 ":"=r" (barrier));
|
|
}
|
|
|
|
-#endif // __MINGW64_VERSION_MAJOR
|
|
-
|
|
-
|
|
int localtime_s(tm* out_tm, const time_t* time) {
|
|
tm* posix_local_time_struct = localtime_r(time, out_tm);
|
|
if (posix_local_time_struct == nullptr) return 1;
|
|
@@ -134,6 +133,8 @@ int strncpy_s(char* dest, size_t dest_size, const char* source, size_t count) {
|
|
return 0;
|
|
}
|
|
|
|
+#endif // !defined(__MINGW64_VERSION_MAJOR)
|
|
+
|
|
#endif // __MINGW32__
|
|
|
|
namespace v8 {
|
|
@@ -743,8 +744,10 @@ void OS::StrNCpy(char* dest, int length, const char* src, size_t n) {
|
|
}
|
|
|
|
|
|
+#if defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)
|
|
#undef _TRUNCATE
|
|
#undef STRUNCATE
|
|
+#endif
|
|
|
|
DEFINE_LAZY_LEAKY_OBJECT_GETTER(RandomNumberGenerator,
|
|
GetPlatformRandomNumberGenerator)
|
|
@@ -1943,3 +1946,4 @@ Stack::StackSlot Stack::GetCurrentStackPosition() {
|
|
|
|
} // namespace base
|
|
} // namespace v8
|
|
+
|
|
diff --git a/orig/v8-15.0.245.2/src/base/platform/time.cc b/mod/v8-15.0.245.2/src/base/platform/time.cc
|
|
index 8c824e3..f8144d0 100644
|
|
--- a/orig/v8-15.0.245.2/src/base/platform/time.cc
|
|
+++ b/mod/v8-15.0.245.2/src/base/platform/time.cc
|
|
@@ -782,12 +782,12 @@ bool ThreadTicks::IsSupported() {
|
|
#elif defined(__PASE__)
|
|
// Thread CPU time accounting is unavailable in PASE
|
|
return false;
|
|
+#elif defined(V8_OS_WIN)
|
|
+ return IsSupportedWin();
|
|
#elif (defined(_POSIX_THREAD_CPUTIME) && (_POSIX_THREAD_CPUTIME >= 0)) || \
|
|
defined(V8_OS_DARWIN) || defined(V8_OS_ANDROID) || \
|
|
defined(V8_OS_SOLARIS) || defined(V8_OS_ZOS)
|
|
return true;
|
|
-#elif defined(V8_OS_WIN)
|
|
- return IsSupportedWin();
|
|
#else
|
|
return false;
|
|
#endif
|
|
@@ -804,13 +804,13 @@ ThreadTicks ThreadTicks::Now() {
|
|
return ThreadTicks(ComputeThreadTicks());
|
|
#elif V8_OS_FUCHSIA
|
|
return ThreadTicks(GetFuchsiaThreadTicks());
|
|
+#elif V8_OS_WIN
|
|
+ return ThreadTicks::GetForThread(::GetCurrentThread());
|
|
#elif (defined(_POSIX_THREAD_CPUTIME) && (_POSIX_THREAD_CPUTIME >= 0)) || \
|
|
defined(V8_OS_ANDROID) || defined(V8_OS_ZOS)
|
|
return ThreadTicks(ClockNow(CLOCK_THREAD_CPUTIME_ID));
|
|
#elif V8_OS_SOLARIS
|
|
return ThreadTicks(gethrvtime() / Time::kNanosecondsPerMicrosecond);
|
|
-#elif V8_OS_WIN
|
|
- return ThreadTicks::GetForThread(::GetCurrentThread());
|
|
#else
|
|
UNREACHABLE();
|
|
#endif
|
|
diff --git a/orig/v8-15.0.245.2/src/libplatform/default-thread-isolated-allocator.cc b/mod/v8-15.0.245.2/src/libplatform/default-thread-isolated-allocator.cc
|
|
index bda0e43..b44f1d9 100644
|
|
--- a/orig/v8-15.0.245.2/src/libplatform/default-thread-isolated-allocator.cc
|
|
+++ b/mod/v8-15.0.245.2/src/libplatform/default-thread-isolated-allocator.cc
|
|
@@ -23,7 +23,7 @@ extern int pkey_free(int pkey) V8_WEAK;
|
|
|
|
namespace {
|
|
|
|
-bool KernelHasPkruFix() {
|
|
+[[maybe_unused]] bool KernelHasPkruFix() {
|
|
// PKU was broken on Linux kernels before 5.13 (see
|
|
// https://lore.kernel.org/all/20210623121456.399107624@linutronix.de/).
|
|
// A fix is also included in the 5.4.182 and 5.10.103 versions ("x86/fpu:
|