diff --git a/CMakeLists.txt b/CMakeLists.txt index 1c76bfd8ab..24ba52bfe3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1000,8 +1000,20 @@ add_compile_definitions( ) if(NOT ASSERT_ENABLED) + if(APPLE) + add_compile_definitions("_LIBCXX_ENABLE_ASSERTIONS=0") + add_compile_definitions("_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_NONE") + endif() + add_compile_definitions("NDEBUG=1") else() + if(APPLE) + add_compile_definitions("_LIBCXX_ENABLE_ASSERTIONS=1") + add_compile_definitions("_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_DEBUG") + elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") + add_compile_definitions("_GLIBCXX_ASSERTIONS=1") + endif() + add_compile_definitions("ASSERT_ENABLED=1") endif() diff --git a/scripts/env.sh b/scripts/env.sh index 1ec1248e4c..6ff0e225af 100755 --- a/scripts/env.sh +++ b/scripts/env.sh @@ -76,7 +76,7 @@ fi # https://gitlab.kitware.com/cmake/cmake/-/issues/25755 if [[ $(uname -s) == 'Darwin' && $LLVM_VERSION == '18' ]]; then export CFLAGS="$CFLAGS -fno-define-target-os-macros " - export CXXFLAGS="$CXXFLAGS -fno-define-target-os-macros " + export CXXFLAGS="$CXXFLAGS -fno-define-target-os-macros -D_LIBCXX_ENABLE_ASSERTIONS=0 -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_NONE " fi # libarchive needs position-independent executables to compile successfully @@ -120,7 +120,6 @@ fi if [[ $(uname -s) == 'Darwin' ]]; then export CMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET:-13.0} - CMAKE_FLAGS+=(-DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}) export CFLAGS="$CFLAGS -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET} -D__DARWIN_NON_CANCELABLE=1 " export CXXFLAGS="$CXXFLAGS -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET} -D__DARWIN_NON_CANCELABLE=1 " diff --git a/src/bun.js/bindings/ZigGlobalObject.cpp b/src/bun.js/bindings/ZigGlobalObject.cpp index b64e813269..51b5276bca 100644 --- a/src/bun.js/bindings/ZigGlobalObject.cpp +++ b/src/bun.js/bindings/ZigGlobalObject.cpp @@ -714,7 +714,6 @@ void Zig::GlobalObject::resetOnEachMicrotaskTick() extern "C" JSC__JSGlobalObject* Zig__GlobalObject__create(void* console_client, int32_t executionContextId, bool miniMode, bool evalMode, void* worker_ptr) { - auto heapSize = miniMode ? JSC::HeapType::Small : JSC::HeapType::Large; JSC::VM& vm = JSC::VM::create(heapSize).leakRef(); // This must happen before JSVMClientData::create @@ -756,7 +755,7 @@ extern "C" JSC__JSGlobalObject* Zig__GlobalObject__create(void* console_client, auto* globalObject = createGlobalObject(); if (UNLIKELY(!globalObject)) { - PANIC("Failed to allocate JavaScript global object. Did your computer run out of memory?"); + BUN_PANIC("Failed to allocate JavaScript global object. Did your computer run out of memory?"); } globalObject->setConsole(console_client); diff --git a/src/bun.js/bindings/headers-handwritten.h b/src/bun.js/bindings/headers-handwritten.h index ce5287eb5f..73a461e208 100644 --- a/src/bun.js/bindings/headers-handwritten.h +++ b/src/bun.js/bindings/headers-handwritten.h @@ -139,6 +139,9 @@ const ZigStackFrameCode ZigStackFrameCodeGlobal = 4; const ZigStackFrameCode ZigStackFrameCodeWasm = 5; const ZigStackFrameCode ZigStackFrameCodeConstructor = 6; +extern "C" void __attribute((__noreturn__)) Bun__panic(const char* message, size_t length); +#define BUN_PANIC(message) Bun__panic(message, sizeof(message) - 1) + typedef struct ZigStackFramePosition { int32_t line_zero_based; int32_t column_zero_based; @@ -273,10 +276,7 @@ extern "C" void Bun__WTFStringImpl__ref(WTF::StringImpl* impl); extern "C" bool BunString__fromJS(JSC::JSGlobalObject*, JSC::EncodedJSValue, BunString*); extern "C" JSC::EncodedJSValue BunString__toJS(JSC::JSGlobalObject*, const BunString*); extern "C" void BunString__toWTFString(BunString*); -extern "C" void Bun__panic(const char* message, size_t length); -#ifndef PANIC -#define PANIC(message) Bun__panic(message, sizeof(message) - 1) -#endif + namespace Bun { JSC::JSValue toJS(JSC::JSGlobalObject*, BunString); BunString toString(JSC::JSGlobalObject* globalObject, JSC::JSValue value); diff --git a/src/bun.js/bindings/workaround-missing-symbols.cpp b/src/bun.js/bindings/workaround-missing-symbols.cpp index 0b095e6c60..8e61d2145b 100644 --- a/src/bun.js/bindings/workaround-missing-symbols.cpp +++ b/src/bun.js/bindings/workaround-missing-symbols.cpp @@ -1,4 +1,5 @@ + #if defined(WIN32) #include @@ -266,8 +267,23 @@ extern "C" int __wrap_mknodat(int dirfd, const char* path, __mode_t mode, __dev_ // macOS #if defined(__APPLE__) +#include #include #include +#include +#include +#include "headers.h" + +void std::__libcpp_verbose_abort(char const* format, ...) +{ + va_list list; + va_start(list, format); + char buffer[1024]; + size_t len = vsnprintf(buffer, sizeof(buffer), format, list); + va_end(list); + + Bun__panic(buffer, len); +} extern "C" int pthread_self_is_exiting_np() {