diff options
-rw-r--r-- | .vscode/settings.json | 1 | ||||
-rw-r--r-- | CMakeLists.txt | 645 | ||||
-rw-r--r-- | CMakeLists_Old.txt | 516 | ||||
-rw-r--r-- | src/bun.js/bindings/KeyObject.cpp | 19 | ||||
-rw-r--r-- | src/bun.js/bindings/Path.cpp | 44 | ||||
-rw-r--r-- | src/bun.js/webcore/streams.classes.ts | 5 | ||||
-rw-r--r-- | src/codegen/generate-classes.ts (renamed from src/bun.js/scripts/generate-classes.ts) | 61 | ||||
-rw-r--r-- | src/codegen/generate-jssink.ts (renamed from src/bun.js/scripts/generate-jssink.js) | 5 |
8 files changed, 1222 insertions, 74 deletions
diff --git a/.vscode/settings.json b/.vscode/settings.json index 4155db7ac..7e5e4fb05 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -8,7 +8,6 @@ "search.useIgnoreFiles": true, "zig.buildOnSave": false, "zig.formattingProvider": "zls", - "zig.buildArgs": ["obj", "-Dfor-editor"], "zig.buildOption": "build", "zig.buildFilePath": "${workspaceFolder}/build.zig", "[zig]": { diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 000000000..a37c34eb3 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,645 @@ +cmake_minimum_required(VERSION 3.25) +cmake_policy(SET CMP0091 NEW) + +if(UNIX) + set(CLANG_VERSION 16) + find_path( + LLVM_TOOLS_BINARY_DIR + NAMES clang++-${CLANG_VERSION} clang-${CLANG_VERSION} clang++ clang + PATHS ENV PATH /usr/bin /usr/local/bin /opt/homebrew/opt/llvm@${CLANG_VERSION}/bin /opt/homebrew/bin + ) + set(CMAKE_CXX_COMPILER "${LLVM_TOOLS_BINARY_DIR}/clang++") + set(CMAKE_C_COMPILER "${LLVM_TOOLS_BINARY_DIR}/clang") + set(CMAKE_CXX_COMPILER_ID "Clang") +endif() + +project(Bun VERSION "1.0.7") + +if(NOT CMAKE_BUILD_TYPE) + message(WARNING "No CMAKE_BUILD_TYPE value specified, defaulting to Debug.\nSet a build type with -DCMAKE_BUILD_TYPE=<Debug|Release>") + set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build (Debug, Release)" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE MATCHES "^(Debug|Release)$") + message(FATAL_ERROR + "Invalid CMAKE_BUILD_TYPE value specified: ${CMAKE_BUILD_TYPE}\n" + "CMAKE_BUILD_TYPE must be Debug or Release.") + endif() + message(STATUS "The CMake build type is: ${CMAKE_BUILD_TYPE}") +endif() +if(CMAKE_BUILD_TYPE STREQUAL "Debug") + set(DEBUG ON) + set(target_name "bun-debug") +else() + set(DEBUG OFF) + set(target_name "bun") +endif() + +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_C_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_C_STANDARD_REQUIRED ON) + +# Zig Compiler +function(validate_zig validator_result_var item) + set(${validator_result_var} FALSE PARENT_SCOPE) + # We will allow any valid zig compiler, as long as it contains some text from `zig zen` + execute_process(COMMAND ${item} zen OUTPUT_VARIABLE ZIG_ZEN_OUTPUT) + if(ZIG_ZEN_OUTPUT MATCHES "Together we serve the users") + set(${validator_result_var} TRUE PARENT_SCOPE) + else() + set(${validator_result_var} FALSE PARENT_SCOPE) + endif() +endfunction() +find_program(ZIG_COMPILER zig REQUIRED DOC "Path to the Zig compiler" VALIDATOR validate_zig) +message(STATUS "Found Zig Compiler: ${ZIG_COMPILER}") + +# Bun. This is a sort of chicken-and-egg problem where you need `bun` to build `bun` +# maybe in the future we can make it possible to use bun-polyfills in combination +# with Node to fufill this requirement. +find_program(BUN_EXECUTABLE bun REQUIRED DOC "Path to an already built release of Bun") + +# +set(DEFAULT_ON_UNLESS_WINDOWS ON) +if (WIN32) + set(DEFAULT_ON_UNLESS_WINDOWS OFF) +endif() + +set(DEFAULT_USE_STATIC_SQLITE ON) +if(APPLE) + set(DEFAULT_USE_STATIC_SQLITE OFF) +endif() + +# User options +option(USE_STATIC_SQLITE "Statically link SQLite?" ${DEFAULT_USE_STATIC_SQLITE}) +option(USE_CUSTOM_ZLIB "Use Bun's recommended version of zlib" ${DEFAULT_ON_UNLESS_WINDOWS}) +option(USE_CUSTOM_BORINGSSL "Use Bun's recommended version of BoringSSL" ON) +option(USE_CUSTOM_LIBARCHIVE "Use Bun's recommended version of libarchive" ON) +option(USE_CUSTOM_MIMALLOC "Use Bun's recommended version of Mimalloc" ON) +option(USE_CUSTOM_ZSTD "Use Bun's recommended version of zstd" ON) +option(USE_CUSTOM_CARES "Use Bun's recommended version of c-ares" ${DEFAULT_ON_UNLESS_WINDOWS}) +option(USE_CUSTOM_BASE64 "Use Bun's recommended version of libbase64" ON) +option(USE_CUSTOM_LOLHTML "Use Bun's recommended version of lolhtml" ON) +option(USE_CUSTOM_TINYCC "Use Bun's recommended version of tinycc" ON) +option(USE_CUSTOM_LIBUV "Use Bun's recommended version of libuv (Windows only)" OFF) +option(USE_BASELINE_BUILD "Build Bun for older CPUs" OFF) + +set(ERROR_LIMIT 100 CACHE STRING "Maximum number of errors to show when compiling C++ code") + +# CPU Target +if(NOT CPU_TARGET) + set(CPU_TARGET "native") + if (ARCH STREQUAL "x86_64") + if (NOT MSVC) + if (USE_BASELINE_BUILD) + set(CPU_TARGET "nehalem") + else () + set(CPU_TARGET "haswell") + endif() + endif() + endif() +endif() +message(STATUS "Building for CPU Target: ${CPU_TARGET}") + +# WebKit +if(NOT WEBKIT_DIR) + # TODO: allow this to point to the actual webkit cmake file to allow easier rebuilds + find_path( + WEBKIT_DIR + NAMES lib/libJavaScriptCore.a + PATHS + ${CMAKE_CURRENT_SOURCE_DIR}/bun-webkit + DOC "Path to WebKit build directory" + ) + # ensure libWTF.a, libJavaScriptCore.a, and libbmalloc.a exist + if(NOT WEBKIT_DIR) + message(FATAL_ERROR "Could not find WebKit build directory. Please set WEBKIT_DIR to the directory containing lib/libJavaScriptCore.a. Did you forget to run `bun install` beforehand.") + endif() + if (NOT EXISTS "${WEBKIT_DIR}/lib/libWTF.a" OR NOT EXISTS "${WEBKIT_DIR}/lib/libJavaScriptCore.a" OR NOT EXISTS "${WEBKIT_DIR}/lib/libbmalloc.a") + message(FATAL_ERROR "WebKit directory ${WEBKIT_DIR} does not contain all the required files for Bun.") + endif() +endif() +message(STATUS "Found WebKit: ${WEBKIT_DIR}") + +# C++ Assertions +# It is very important that the value of ASSERT_ENABLED is the same for both Bun and WebKit, +# If this is not the case, everything will crash as the sizes and offsets of things will be different +if(NOT DEFINED ASSERT_ENABLED) + if(WEBKIT_DIR MATCHES "/bun-webkit$|WebKitBuild/Release$") + set(ASSERT_ENABLED "0") + elseif(WEBKIT_DIR MATCHES "/WebKitBuild/Debug$") + set(ASSERT_ENABLED "1") + else() + message(WARNING "Could not guess default value for ASSERT_ENABLED.") + set(ASSERT_ENABLED "0") + endif() +endif() +if(ASSERT_ENABLED) + message(STATUS "C++ Assertions enabled") +else() + message(STATUS "C++ Assertions disabled") +endif() + +set(BUN_DEPS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/deps" CACHE STRING "Directory holding submodules" ) +set(BUN_LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/deps" CACHE STRING "Directory holding static libraries" ) + +add_compile_options(-D_HAS_EXCEPTIONS=0) + +# CCACHE +find_program(CCACHE_PROGRAM ccache) +if(CCACHE_PROGRAM) + set(CMAKE_CXX_COMPILER_LAUNCHER "${CCACHE_PROGRAM}") + set(CMAKE_C_COMPILER_LAUNCHER "${CCACHE_PROGRAM}") + message(STATUS "Using ccache: ${CCACHE_PROGRAM}") +endif() + +file(GLOB bun_SRC CONFIGURE_DEPENDS + "${CMAKE_CURRENT_SOURCE_DIR}/src/deps/*.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/src/io/*.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/modules/*.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/bindings/*.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/bindings/WebCore/*.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/bindings/sqlite/*.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/bindings/webcrypto/*.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/bindings/webcrypto/*/*.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/src/js/out/*.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/src/deps/picohttpparser/picohttpparser.c" +) + +file(GLOB uSockets_FILES CONFIGURE_DEPENDS + "${CMAKE_CURRENT_SOURCE_DIR}/packages/bun-usockets/src/*.c" + "${CMAKE_CURRENT_SOURCE_DIR}/packages/bun-usockets/src/eventing/*.c" + "${CMAKE_CURRENT_SOURCE_DIR}/packages/bun-usockets/src/internal/*.c" + "${CMAKE_CURRENT_SOURCE_DIR}/packages/bun-usockets/src/crypto/*.c" + "${CMAKE_CURRENT_SOURCE_DIR}/packages/bun-usockets/src/crypto/*.cpp" +) + +# Class bindings generator +file(GLOB Bun_CLASSES_TS_FILES CONFIGURE_DEPENDS + "${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/*.classes.ts" + "${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/api/*.classes.ts" + "${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/test/*.classes.ts" + "${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/webcore/*.classes.ts" + "${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/node/*.classes.ts" +) +add_custom_command( + OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/bindings/ZigGeneratedClasses.h" + "${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/bindings/ZigGeneratedClasses.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/bindings/ZigGeneratedClasses+lazyStructureHeader.h" + "${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/bindings/ZigGeneratedClasses+DOMClientIsoSubspaces.h" + "${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/bindings/ZigGeneratedClasses+DOMIsoSubspaces.h" + "${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/bindings/ZigGeneratedClasses+lazyStructureImpl.h" + "${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/bindings/generated_classes.zig" + COMMAND ${BUN_EXECUTABLE} "src/codegen/generate-classes.ts" ${Bun_CLASSES_TS_FILES} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/src/codegen/generate-classes.ts" + DEPENDS ${Bun_CLASSES_TS_FILES} + VERBATIM + COMMENT "Generating class bindings" +) + +# JSSink generator +add_custom_command( + OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/bindings/JSSink.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/bindings/JSSink.h" + COMMAND ${BUN_EXECUTABLE} "src/codegen/generate-jssink.ts" + VERBATIM + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT "Generating JSSink" +) + +# # Append the given dependencies to the source file +# macro(WEBKIT_ADD_SOURCE_DEPENDENCIES _source _deps) +# set(_tmp) +# get_source_file_property(_tmp ${_source} OBJECT_DEPENDS) +# if (NOT _tmp) +# set(_tmp "") +# endif () + +# foreach (f ${_deps}) +# list(APPEND _tmp "${f}") +# endforeach () + +# set_source_files_properties(${_source} PROPERTIES OBJECT_DEPENDS "${_tmp}") +# unset(_tmp) +# endmacro() + +# # LUT generator +# file(Bun_OBJECT_LUT_SOURCES +# src/bun.js/bindings/BunObject.cpp +# src/bun.js/bindings/ZigGlobalObject.lut.txt +# src/bun.js/bindings/JSBuffer.cpp +# src/bun.js/bindings/Process.cpp +# src/bun.js/bindings/ProcessBindingConstants.cpp +# src/bun.js/bindings/ProcessBindingNatives.cpp +# ) +# set(HASH_LUT_GENERATOR ${CMAKE_CURRENT_SOURCE_DIR}/src/codegen/create_hash_table) + +# macro(GENERATE_HASH_LUT _input _output) +# add_custom_command( +# OUTPUT ${_output} +# MAIN_DEPENDENCY ${HASH_LUT_GENERATOR} +# DEPENDS ${_input} +# COMMAND ${PERL_EXECUTABLE} ${HASH_LUT_GENERATOR} ${_input} > ${_output} +# VERBATIM) +# list(APPEND JavaScriptCore_HEADERS ${_output}) +# WEBKIT_ADD_SOURCE_DEPENDENCIES(${_input} ${_output}) +# endmacro() + +# # GENERATOR 1-A: LUT creator +# foreach(_file ${JavaScriptCore_OBJECT_LUT_SOURCES}) +# get_filename_component(_name ${_file} NAME_WE) +# GENERATE_HASH_LUT(${CMAKE_CURRENT_SOURCE_DIR}/${_file} ${JavaScriptCore_DERIVED_SOURCES_DIR}/${_name}.lut.h) +# endforeach() + +add_compile_definitions( + # TODO: are all of these variables strictly necessary? + "LIBUS_USE_OPENSSL=1" + "UWS_HTTPRESPONSE_NO_WRITEMARK=1" + "LIBUS_USE_BORINGSSL=1" + "WITH_BORINGSSL=1" + "STATICALLY_LINKED_WITH_JavaScriptCore=1" + "STATICALLY_LINKED_WITH_WTF=1" + "STATICALLY_LINKED_WITH_BMALLOC=1" + "BUILDING_WITH_CMAKE=1" + "JSC_OBJC_API_ENABLED=0" + "BUN_SINGLE_THREADED_PER_VM_ENTRY_SCOPE=1" + "NAPI_EXPERIMENTAL=ON" + "NOMINMAX" + "IS_BUILD" + "BUILDING_JSCONLY__" + "NDEBUG=$<IF:$<CONFIG:ASSERT_ENABLED>,0,1>" + "ASSERT_ENABLED=$<IF:$<CONFIG:ASSERT_ENABLED>,1,0>" +) + +include_directories( + packages/bun-uws + packages + packages/bun-usockets + packages/bun-usockets/src + src/bun.js/bindings + src/bun.js/bindings/webcore + src/bun.js/bindings/webcrypto + src/bun.js/bindings/sqlite + src/bun.js/modules + src/js/out + src/js/out/modules + src/js/builtins + src/napi + src/deps + src/deps/picohttpparser + ${WEBKIT_DIR}/WTF/Headers + ${WEBKIT_DIR}/ICU/Headers + ${WEBKIT_DIR}/bmalloc/Headers + ${WEBKIT_DIR}/ + ${WEBKIT_DIR}/include + ${WEBKIT_DIR}/JavaScriptCore/PrivateHeaders + ${WEBKIT_DIR}/bmalloc/PrivateHeaders + ${WEBKIT_DIR}/WTF/PrivateHeaders +) + +set(BUN_OBJECT_FILE zig-out/lib/bun.o) +if (CMAKE_BUILD_TYPE STREQUAL "Debug") + set(BUN_OBJECT_FILE zig-out/lib/bun-debug.o) + if (NOT MSVC) + string(APPEND CMAKE_CXX_FLAGS " -g3 -O1") + string(APPEND CMAKE_C_FLAGS " -g3 -O1") + else() + string(APPEND CMAKE_CXX_FLAGS " /O1") + string(APPEND CMAKE_C_FLAGS " /O1") + endif() + add_compile_definitions("BUN_DEBUG") +elseif (NOT MSVC) + string(APPEND CMAKE_CXX_FLAGS " -O3 -femit-llvm" ) + string(APPEND CMAKE_C_FLAGS " -O3 -femit-llvm") +else () + string(APPEND CMAKE_CXX_FLAGS " /O2" ) + string(APPEND CMAKE_C_FLAGS " /O2") +endif() + +set(EXTRA_SRC "") +if (WIN32) + set(EXTRA_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/bindings/musl-memmem.c") + add_compile_definitions( + "WIN32" + "_WINDOWS" + "_CRT_SECURE_NO_WARNINGS" + "WIN32_LEAN_AND_MEAN=1" + ) +endif() + +# if clang +if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + string(APPEND CMAKE_CXX_FLAGS " -fconstexpr-steps=1271242 -fconstexpr-depth=27") + string(APPEND CMAKE_CXX_FLAGS + " -fno-exceptions" + " -fno-rtti" + " -ferror-limit=100" + " -fvisibility=hidden" + " -fvisibility-inlines-hidden" + ) + string(APPEND CMAKE_C_FLAGS + " -ferror-limit=${ERROR_LIMIT}" + " -fvisibility=hidden" + " -fvisibility-inlines-hidden" + ) +elseif(MSVC) + string(APPEND SUPPRESS_WARNING_NUMBERS + # JSC deletes operator delete to prevent accidental use + " /wd4291" + # we use #pragma mark in some places + " /wd4068" + ) + string(APPEND CMAKE_CXX_FLAGS " /EHsc /GR-") + string(APPEND CMAKE_C_FLAGS " /EHsc /GR- /MP ${SUPPRESS_WARNING_NUMBERS} /experimental:c11atomics /std:c17") + string(APPEND CMAKE_CXX_FLAGS " /Zc:__cplusplus /Zc:inline /bigobj /MP ${SUPPRESS_WARNING_NUMBERS}") +endif() + +if (APPLE) + string(APPEND CMAKE_LINKER_FLAGS " -fno-keep-static-consts -Wl,-dead_strip -Wl,-dead_strip_dylibs") + string(APPEND CMAKE_CXX_FLAGS " -stdlib=libc++") + string(APPEND CMAKE_CXX_FLAGS " -mmacosx-version-min=11") + string(APPEND CMAKE_C_FLAGS " -mmacosx-version-min=11") +endif() + +if (NOT MSVC) + string(APPEND CMAKE_CXX_FLAGS " -march=${CPU_TARGET} -mtune=${CPU_TARGET}") + string(APPEND CMAKE_C_FLAGS " -march=${CPU_TARGET} -mtune=${CPU_TARGET}") +endif() + +set(IDENTIFIER_CACHE_FILES + "${CMAKE_CURRENT_SOURCE_DIR}/src/js_lexer/id_continue_bitset.blob" + "${CMAKE_CURRENT_SOURCE_DIR}/src/js_lexer/id_continue_bitset.meta.blob" + "${CMAKE_CURRENT_SOURCE_DIR}/src/js_lexer/id_start_bitset.blob" + "${CMAKE_CURRENT_SOURCE_DIR}/src/js_lexer/id_start_bitset.meta.blob") + +file(GLOB ZIG_FILES CONFIGURE_DEPENDS + "${CMAKE_CURRENT_SOURCE_DIR}/src/*.zig" + "${CMAKE_CURRENT_SOURCE_DIR}/src/*/*.zig" + "${CMAKE_CURRENT_SOURCE_DIR}/src/*/**/*.zig" + "${CMAKE_CURRENT_SOURCE_DIR}/src/*/*/*/*.zig" +) + +add_custom_command( + OUTPUT "${BUN_OBJECT_FILE}" + COMMAND "${ZIG_COMPILER}" build obj -Doptimize=${CMAKE_BUILD_TYPE} -Doutput-dir=${CMAKE_CURRENT_SOURCE_DIR}/zig-out/lib -Dcpu=${CPU_TARGET} + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/build.zig ${ZIG_FILES} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT "Building zig code" + VERBATIM +) + +add_executable(${target_name} ${bun_SRC} ${uSockets_FILES} ${BUN_OBJECT_FILE} ${EXTRA_SRC}) + +# Set /subsystem:console on bun for windows +if (WIN32) + set_target_properties(${target_name} PROPERTIES LINK_FLAGS " /SUBSYSTEM:CONSOLE ") +endif() + +# TODO: not good enough +# add_custom_command( +# TARGET bun PRE_BUILD +# COMMAND ${BUN_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/src/js/_codegen/index.ts" +# DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/js/**/*.{js,ts}" +# COMMENT "Bundling JS modules" +# ) + +set_target_properties(${target_name} PROPERTIES + CXX_STANDARD 20 + CXX_STANDARD_REQUIRED YES + CXX_EXTENSIONS YES + CXX_VISIBILITY_PRESET hidden + C_STANDARD 17 + C_STANDARD_REQUIRED YES + VISIBILITY_INLINES_HIDDEN YES +) + +set(CMAKE_COLOR_DIAGNOSTICS ON) + +if (APPLE) + # TODO: a much better check can be done to find this path + find_path( + ICU4C_DIR NAMES lib/libicudata.a + PATHS ENV PATH /usr/local/opt/icu4c /opt/homebrew/opt/icu4c + ) + find_path( + ICONV_DIR NAMES lib/libiconv.a + PATHS ENV PATH /usr/local/opt/libiconv /opt/homebrew/opt/libiconv + ) + + # resolv might not go here. i think it's c-ares related. + target_link_libraries(${target_name} PRIVATE "resolv") + + target_link_libraries(${target_name} PRIVATE "icucore") + target_link_libraries(${target_name} PRIVATE "${ICONV_DIR}/lib/libiconv.a") + target_link_libraries(${target_name} PRIVATE "${ICU4C_DIR}/lib/libicudata.a") + target_link_libraries(${target_name} PRIVATE "${ICU4C_DIR}/lib/libicui18n.a") + target_link_libraries(${target_name} PRIVATE "${ICU4C_DIR}/lib/libicuuc.a") + include_directories(${ICU4C_DIR}/include) +elseif (LINUX) + string(APPEND CMAKE_CXX_FLAGS " -static-libstdc++ -static-libgcc -fno-omit-frame-pointer") + string(APPEND CMAKE_C_FLAGS " -static-libgcc -fno-omit-frame-pointer") + target_link_libraries(${target_name} PRIVATE "c") + string(APPEND CMAKE_LINKER_FLAGS + " -Wl,--compress-debug-sections=zlib " + " -l:libatomic.a " + " -Wl,-Bsymbolics-functions " + " -fno-semantic-interposition " + " -Wl,-z,now" + " -Wl,--as-needed" + " -Wl,--gc-sections" + " -Wl,-z,-stack-size=12800000" + " -Wl,--wrap=fcntl" + " -Wl,--wrap=fcntl64" + " -Wl,--wrap=stat64" + " -Wl,--wrap=pow" + " -Wl,--wrap=exp" + " -Wl,--wrap=log" + " -Wl,--wrap=log2" + " -Wl,--wrap=lstat" + " -Wl,--wrap=stat" + " -Wl,--wrap=fstat" + " -Wl,--wrap=fstatat" + " -Wl,--wrap=lstat64" + " -Wl,--wrap=stat64" + " -Wl,--wrap=fstat64" + " -Wl,--wrap=fstatat64" + " -Wl,--wrap=mknod" + " -Wl,--wrap=mknodat" + " -Wl,--wrap=statx " + ) +endif() + +if (USE_CUSTOM_ZLIB AND (NOT WIN32)) + target_link_libraries(${target_name} PRIVATE "${BUN_LIB_DIR}/libz.a") + include_directories(${BUN_DEPS_DIR}/zlib/include) +else () + find_package(ZLIB REQUIRED) + target_link_libraries(${target_name} PRIVATE ZLIB::ZLIB) +endif () + +if (USE_CUSTOM_BORINGSSL) + include_directories(src/deps/boringssl/include) + if (WIN32) + target_link_libraries(${target_name} PRIVATE "${BUN_LIB_DIR}/crypto.lib") + target_link_libraries(${target_name} PRIVATE "${BUN_LIB_DIR}/ssl.lib") + target_link_libraries(${target_name} PRIVATE "${BUN_LIB_DIR}/decrepit.lib") + else() + target_link_libraries(${target_name} PRIVATE "${BUN_LIB_DIR}/libcrypto.a") + target_link_libraries(${target_name} PRIVATE "${BUN_LIB_DIR}/libssl.a") + target_link_libraries(${target_name} PRIVATE "${BUN_LIB_DIR}/libdecrepit.a") + endif() +else () + include(FindBoringSSL) + FindBoringSSL(${target_name}) +endif() + +if (USE_CUSTOM_LIBARCHIVE) + include_directories(src/deps/libarchive/include) + if (WIN32) + target_link_libraries(${target_name} PRIVATE "${BUN_LIB_DIR}/archive.lib") + else() + target_link_libraries(${target_name} PRIVATE "${BUN_LIB_DIR}/libarchive.a") + endif() +else () + find_package(LibArchive REQUIRED) + target_link_libraries(${target_name} PRIVATE LibArchive::LibArchive) +endif() + +if (USE_CUSTOM_MIMALLOC) + include_directories(src/deps/mimalloc/include) + if (WIN32) + target_link_libraries(${target_name} PRIVATE "${BUN_LIB_DIR}/mimalloc-static.lib") + else() + target_link_libraries(${target_name} PRIVATE "${BUN_LIB_DIR}/libmimalloc.a") + endif() +else () + find_package(mimalloc REQUIRED) + target_link_libraries(${target_name} PRIVATE mimalloc) +endif() + +if (USE_CUSTOM_ZSTD) + include_directories(src/deps/zstd/include) + if (WIN32) + target_link_libraries(${target_name} PRIVATE "${BUN_LIB_DIR}/zstd.lib") + else() + target_link_libraries(${target_name} PRIVATE "${BUN_LIB_DIR}/libzstd.a") + endif() +else () + find_package(zstd CONFIG REQUIRED) + target_link_libraries(${target_name} PRIVATE zstd::libzstd) +endif() + +if (USE_CUSTOM_CARES) + include_directories(src/deps/c-ares/include) + if (WIN32) + target_link_libraries(${target_name} PRIVATE "${BUN_LIB_DIR}/cares.lib") + else() + target_link_libraries(${target_name} PRIVATE "${BUN_LIB_DIR}/libcares.a") + endif() +else () + find_package(c-ares CONFIG REQUIRED) + target_link_libraries(${target_name} PRIVATE c-ares::cares) +endif() + + +if (USE_CUSTOM_BASE64) + include_directories(src/deps/base64/include) + if (WIN32) + target_link_libraries(${target_name} PRIVATE "${BUN_LIB_DIR}/base64.lib") + else() + target_link_libraries(${target_name} PRIVATE "${BUN_LIB_DIR}/libbase64.a") + endif() +else () + find_package(base64 REQUIRED) + target_link_libraries(bun PRIVATE base64::base64) +endif() + +if (NOT WIN32) + if (USE_CUSTOM_TINYCC) + if (WIN32) + target_link_libraries(${target_name} PRIVATE "${BUN_LIB_DIR}/tcc.lib") + else() + target_link_libraries(${target_name} PRIVATE "${BUN_LIB_DIR}/libtcc.a") + endif() + else () + find_package(tinycc REQUIRED) + target_link_libraries(${target_name} PRIVATE tinycc::tinycc) + endif() +endif() + +set_property(TARGET ${target_name} PROPERTY + MSVC_RUNTIME_LIBRARY "MultiThreadedDLL" +) + +if (USE_CUSTOM_LOLHTML) + if (WIN32) + target_link_libraries(${target_name} PRIVATE "${BUN_LIB_DIR}/lolhtml.lib") + else() + target_link_libraries(${target_name} PRIVATE "${BUN_LIB_DIR}/liblolhtml.a") + endif() +else () + find_package(lolhtml REQUIRED) + target_link_libraries(${target_name} PRIVATE lolhtml::lolhtml) +endif() + +if (WIN32) + if (USE_CUSTOM_LIBUV) + target_link_libraries(${target_name} PRIVATE "${BUN_LIB_DIR}/uv.lib") + else () + find_package(libuv CONFIG REQUIRED ) + target_link_libraries(${target_name} PRIVATE $<IF:$<TARGET_EXISTS:libuv::uv_a>,libuv::uv_a,libuv::uv>) + endif() + +endif() + +if (USE_STATIC_SQLITE) + add_library(sqlite3 STATIC src/bun.js/bindings/sqlite/sqlite3.c) + target_include_directories(sqlite3 PUBLIC src/bun.js/bindings/sqlite) + target_link_libraries(bun PRIVATE sqlite3) + target_compile_definitions(${target_name} PRIVATE "LAZY_LOAD_SQLITE=0") +else() + target_compile_definitions(${target_name} PRIVATE "LAZY_LOAD_SQLITE=1") +endif() + + +if (NOT MSVC) + string(APPEND CMAKE_CXX_FLAGS " -fPIC") +endif() + + +if (NOT MSVC) + target_link_libraries(${target_name} PRIVATE "${WEBKIT_DIR}/lib/libWTF.a") + target_link_libraries(${target_name} PRIVATE "${WEBKIT_DIR}/lib/libJavaScriptCore.a") + target_link_libraries(${target_name} PRIVATE "${WEBKIT_DIR}/lib/libbmalloc.a") +else() + + target_link_libraries(${target_name} PRIVATE "${WEBKIT_DIR}/lib/WTF.lib") + target_link_libraries(${target_name} PRIVATE "${WEBKIT_DIR}/lib/JavaScriptCore.lib") + + if (WIN32) + string (APPEND CMAKE_CXX_FLAGS + " /external:anglebrackets /Gs- /Zi" + ) + string (APPEND CMAKE_FLAGS + " /external:anglebrackets /Gs- /Zi" + ) + set_target_properties(${target_name} PROPERTIES LINK_FLAGS " /SUBSYSTEM:CONSOLE /STACK:4194304,2097152") + endif() + + if (DEFINED ENV{VCPKG_ROOT}) + include_directories($ENV{VCPKG_ROOT}/installed/x64-windows/include) + endif() + + # include_directories(C:/Users/windo/Build/WebKit/WebKitBuild/WTF/DerivedSources) + # include_directories(C:/Users/windo/Build/WebKit/WebKitBuild/WTF/Headers) + file(COPY C:/Users/windo/Code/WebKit/WebKitBuild/cmakeconfig.h DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/bindings) + + + include_directories(C:/Users/windo/Code/WebKit/WebKitLibraries/win/include) + link_directories(C:/Users/windo/Code/WebKit/WebKitLibraries/win/lib64) + target_link_directories(${target_name} PUBLIC ${ICU_LIBRARY}) + + + target_link_libraries(${target_name} PUBLIC icuuc icudt icutu icuio icuin icutest) + target_link_libraries(${target_name} PUBLIC winmm ws2_32 bcrypt ntdll kernel32 shell32 shlwapi advapi32 vcruntime ucrt legacy_stdio_definitions) +endif()
\ No newline at end of file diff --git a/CMakeLists_Old.txt b/CMakeLists_Old.txt new file mode 100644 index 000000000..d9055a00b --- /dev/null +++ b/CMakeLists_Old.txt @@ -0,0 +1,516 @@ +cmake_minimum_required(VERSION 3.25) +cmake_policy(SET CMP0091 NEW) + +project(bun) + +set(DEFAULT_USE_STATIC_SQLITE ON) + +if(APPLE) + set(DEFAULT_USE_STATIC_SQLITE OFF) +endif() + +set(DEFAULT_ZIG_EXECUTABLE "zig") +if (DEFINED ENV{ZIG}) + set(DEFAULT_ZIG_EXECUTABLE $ENV{ZIG}) +endif() + +set(DEFAULT_BUN_EXECUTABLE "bun") +if (DEFINED ENV{BUN}) + set(DEFAULT_BUN_EXECUTABLE $ENV{BUN}) +endif() + +set(DEFAULT_CPU_TARGET "native") + +add_compile_definitions("JSC_OBJC_API_ENABLED=0") + +if (ARCH STREQUAL "x86_64") + if (NOT MSVC) + if (USE_BASELINE_BUILD) + set(DEFAULT_CPU_TARGET "nehalem") + else () + set(DEFAULT_CPU_TARGET "haswell") + endif() + endif() +endif() + +# Check for environment variable +if (DEFINED ENV{CPU_TARGET}) + set(DEFAULT_CPU_TARGET $ENV{CPU_TARGET}) +endif() + + +set(DEFAULT_CUSTOM_UNLESS_WINDOWS ON) + +if (WIN32) + set(DEFAULT_CUSTOM_UNLESS_WINDOWS OFF) +endif() + +option(USE_STATIC_SQLITE "Statically link SQLite?" DEFAULT_USE_STATIC_SQLITE) +option(USE_CUSTOM_ZLIB "Use Bun's recommended version of zlib" DEFAULT_CUSTOM_UNLESS_WINDOWS) +option(USE_CUSTOM_BORINGSSL "Use Bun's recommended version of BoringSSL" ON) +option(USE_CUSTOM_LIBARCHIVE "Use Bun's recommended version of libarchive" ON) +option(USE_CUSTOM_MIMALLOC "Use Bun's recommended version of Mimalloc" ON) +option(USE_CUSTOM_ZSTD "Use Bun's recommended version of zstd`" ON) +option(USE_CUSTOM_CARES "Use Bun's recommended version of c-ares" DEFAULT_CUSTOM_UNLESS_WINDOWS) +option(USE_CUSTOM_BASE64 "Use Bun's recommended version of libbase64" ON) +option(USE_CUSTOM_LOLHTML "Use Bun's recommended version of lolhtml" ON) +option(USE_CUSTOM_TINYCC "Use Bun's recommended version of tinycc" ON) +option(USE_CUSTOM_LIBUV "Use Bun's recommended version of libuv (Windows only)" OFF) +option(USE_BASELINE_BUILD "Build Bun for older CPUs" OFF) + +set(ZIG_EXECUTABLE "${DEFAULT_ZIG_EXECUTABLE}" CACHE STRING "Path to zig executable") +set(BUN_EXECUTABLE "${DEFAULT_BUN_EXECUTABLE}" CACHE STRING "Path to bun executable") + +set(WEBKIT_LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/bun-webkit/lib" CACHE STRING "WebKit lib folder") +set(WEBKIT_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/bun-webkit/include" CACHE STRING "WebKit include folder") +set(BUN_DEPS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/deps" CACHE STRING "Directory holding submodules" ) +set(BUN_LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/deps" CACHE STRING "Directory holding static libraries" ) + +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_C_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_C_STANDARD_REQUIRED ON) + +set(HOMEBREW_PREFIX /usr/local) +set(ARCH x86_64) +set(LINUX OFF) + +if(UNIX AND NOT APPLE) + set(LINUX ON) +endif() + + +add_compile_definitions("BUILDING_JSCONLY__") + + + +add_definitions(-D_HAS_EXCEPTIONS=0) + +find_program(CCACHE_PROGRAM ccache) +if(CCACHE_PROGRAM) + set(CMAKE_CXX_COMPILER_LAUNCHER "${CCACHE_PROGRAM}") + set(CMAKE_C_COMPILER_LAUNCHER "${CCACHE_PROGRAM}") + message(STATUS "Using ccache") +endif() + +file(GLOB bun_SRC + "${CMAKE_CURRENT_SOURCE_DIR}/src/deps/*.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/src/io/*.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/modules/*.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/bindings/*.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/bindings/WebCore/*.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/bindings/sqlite/*.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/bindings/webcrypto/*.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/bindings/webcrypto/*/*.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/src/js/out/*.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/src/deps/picohttpparser/picohttpparser.c" +) + +file(GLOB uSockets_FILES + "${CMAKE_CURRENT_SOURCE_DIR}/packages/bun-usockets/src/*.c" + "${CMAKE_CURRENT_SOURCE_DIR}/packages/bun-usockets/src/eventing/*.c" + "${CMAKE_CURRENT_SOURCE_DIR}/packages/bun-usockets/src/internal/*.c" + "${CMAKE_CURRENT_SOURCE_DIR}/packages/bun-usockets/src/crypto/*.c" + "${CMAKE_CURRENT_SOURCE_DIR}/packages/bun-usockets/src/crypto/*.cpp" +) + +add_compile_definitions( + "LIBUS_USE_OPENSSL=1" + "UWS_HTTPRESPONSE_NO_WRITEMARK=1" + "LIBUS_USE_BORINGSSL=1" + "WITH_BORINGSSL=1" +) + + + + +include_directories( + packages/bun-uws + packages + packages/bun-usockets + packages/bun-usockets/src + src/bun.js/bindings + src/bun.js/bindings/webcore + src/bun.js/bindings/webcrypto + src/bun.js/bindings/sqlite + src/bun.js/modules + src/js/out + src/js/out/modules + src/js/builtins + src/napi + src/deps + src/deps/picohttpparser +) + + +add_compile_definitions( + "STATICALLY_LINKED_WITH_JavaScriptCore=1" + "STATICALLY_LINKED_WITH_WTF=1" + "STATICALLY_LINKED_WITH_BMALLOC=1" + "BUILDING_WITH_CMAKE=1" + "BUN_SINGLE_THREADED_PER_VM_ENTRY_SCOPE=1" + "NAPI_EXPERIMENTAL=ON" + "NDEBUG=1" + "NOMINMAX" + "IS_BUILD" + "BUILDING_JSCONLY__" + "ASSERT_ENABLED=0" +) + +# If arm64 +if (CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "arm64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "arm") + set(ARCH arm64) +endif() + +if (ARCH STREQUAL "arm64" AND APPLE) + set(HOMEBREW_PREFIX /opt/homebrew) +endif() + +set(BUN_OBJECT_FILE zig-out/lib/bun.o) +if (CMAKE_BUILD_TYPE STREQUAL "Debug") + set(BUN_OBJECT_FILE zig-out/lib/bun-debug.o) + if (NOT MSVC) + string(APPEND CMAKE_CXX_FLAGS " -g3 -O1") + string(APPEND CMAKE_C_FLAGS " -g3 -O1") + else() + string(APPEND CMAKE_CXX_FLAGS " /O1 ") + string(APPEND CMAKE_C_FLAGS " /O1 ") + endif() + add_compile_definitions("BUN_DEBUG") +elseif (NOT MSVC) + string(APPEND CMAKE_CXX_FLAGS " -O3 -femit-llvm " ) + string(APPEND CMAKE_C_FLAGS " -O3 -femit-llvm ") +else () + string(APPEND CMAKE_CXX_FLAGS " /O2 " ) + string(APPEND CMAKE_C_FLAGS " /O2 ") +endif() +set(EXTRA_SRC "") +if (WIN32) + set(EXTRA_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/bindings/musl-memmem.c") + add_compile_definitions("WIN32") + add_compile_definitions("_WINDOWS") + add_compile_definitions("_CRT_SECURE_NO_WARNINGS") + add_compile_definitions("WIN32_LEAN_AND_MEAN=1") +endif() + +# if clang +if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + string(APPEND CMAKE_CXX_FLAGS " -fconstexpr-steps=1271242 -fconstexpr-depth=27 ") + string(APPEND CMAKE_CXX_FLAGS + "-fno-exceptions " + "-fno-rtti " + "-ferror-limit=100 " + "-fvisibility=hidden " + "-fvisibility-inlines-hidden " + ) + string(APPEND CMAKE_C_FLAGS + "-ferror-limit=100 " + "-fvisibility=hidden " + "-fvisibility-inlines-hidden " + ) +elseif(MSVC) + string(APPEND SUPPRESS_WARNING_NUMBERS + # JSC deletes operator delete to prevent accidental use + "/wd4291 " + # we use #pragma mark in some places + "/wd4068 " + ) + string(APPEND CMAKE_CXX_FLAGS " /EHsc /GR- ") + string(APPEND CMAKE_C_FLAGS " /EHsc /GR- /MP ${SUPPRESS_WARNING_NUMBERS} /experimental:c11atomics /std:c17 ") + string(APPEND CMAKE_CXX_FLAGS " /Zc:__cplusplus /Zc:inline /bigobj /MP ${SUPPRESS_WARNING_NUMBERS} ") +endif() + + +if (APPLE) + string(APPEND CMAKE_LINKER_FLAGS " -fno-keep-static-consts -Wl,-dead_strip -Wl,-dead_strip_dylibs ") + string(APPEND CMAKE_CXX_FLAGS " -stdlib=libc++") + string(APPEND CMAKE_CXX_FLAGS " -mmacosx-version-min=11") + string(APPEND CMAKE_C_FLAGS " -mmacosx-version-min=11") +endif() + +SET(CPU_TARGET "${DEFAULT_CPU_TARGET}" CACHE STRING "CPU target") + +if (NOT MSVC) + string(APPEND CMAKE_CXX_FLAGS " -march=${CPU_TARGET} -mtune=${CPU_TARGET} ") + string(APPEND CMAKE_C_FLAGS " -march=${CPU_TARGET} -mtune=${CPU_TARGET} ") +else() + # string(APPEND CMAKE_CXX_FLAGS " /arch:x64 ") + # string(APPEND CMAKE_C_FLAGS " /arch:x64 ") +endif() + +file(GLOB ZIG_FILES + "src/*.zig" + "src/*/*.zig" + "src/*/*/*.zig" + "src/*/*/*/*.zig" + "src/*/*/*/*/*.zig") + +set(IDENTIFIER_CACHE_FILES + "${CMAKE_CURRENT_SOURCE_DIR}/src/js_lexer/id_continue_bitset.blob" + "${CMAKE_CURRENT_SOURCE_DIR}/src/js_lexer/id_continue_bitset.meta.blob" + "${CMAKE_CURRENT_SOURCE_DIR}/src/js_lexer/id_start_bitset.blob" + "${CMAKE_CURRENT_SOURCE_DIR}/src/js_lexer/id_start_bitset.meta.blob") + + +add_custom_command( + OUTPUT ${BUN_OBJECT_FILE} + COMMAND "${ZIG_EXECUTABLE}" build obj -Doptimize=${CMAKE_BUILD_TYPE} -Doutput-dir=${CMAKE_CURRENT_SOURCE_DIR}/zig-out/lib -Dcpu=${CPU_TARGET} -Dtarget=x86_64-windows-msvc + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/build.zig ${ZIG_FILES} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT "Building zig code" + VERBATIM +) + + +# add_custom_command( +# TARGET bun +# COMMAND bun ./codegen/index.ts +# DEPENDS src/js/modules/**/*.{js,ts} +# COMMENT "Running bun codegen" +# ) + + + + +add_executable(bun WIN32 ${bun_SRC} ${uSockets_FILES} ${BUN_OBJECT_FILE} ${EXTRA_SRC}) +# Set /subsystem:console on bun for windows + +if (WIN32) + set_target_properties(bun PROPERTIES LINK_FLAGS " /SUBSYSTEM:CONSOLE ") +endif() + + +set_target_properties(bun PROPERTIES + CXX_STANDARD 20 + CXX_STANDARD_REQUIRED YES + CXX_EXTENSIONS YES + CXX_VISIBILITY_PRESET hidden + C_STANDARD 17 + C_STANDARD_REQUIRED YES + VISIBILITY_INLINES_HIDDEN YES +) + +set(CMAKE_COLOR_DIAGNOSTICS ON) + + +if (APPLE) + target_link_libraries(bun PRIVATE "${HOMEBREW_PREFIX}/opt/libiconv/lib/libiconv.a") + target_link_libraries(bun PRIVATE "resolv") + target_link_libraries(bun PRIVATE "stdc++") + target_link_libraries(bun PRIVATE "${HOMEBREW_PREFIX}/opt/icu4c/lib/libicudata.a") + target_link_libraries(bun PRIVATE "${HOMEBREW_PREFIX}/opt/icu4c/lib/libicui18n.a") + target_link_libraries(bun PRIVATE "${HOMEBREW_PREFIX}/opt/icu4c/lib/libicuuc.a") + target_link_libraries(bun PRIVATE "icucore") +elseif (LINUX) + string(APPEND CMAKE_CXX_FLAGS " -static-libstdc++ -static-libgcc -fno-omit-frame-pointer") + string(APPEND CMAKE_C_FLAGS " -static-libgcc -fno-omit-frame-pointer") + target_link_libraries(bun PRIVATE "c") + string(APPEND CMAKE_LINKER_FLAGS + " -Wl,--compress-debug-sections=zlib " + " -l:libatomic.a " + " -Wl,-Bsymbolics-functions " + " -fno-semantic-interposition " + " -Wl,-z,now" + " -Wl,--as-needed" + " -Wl,--gc-sections" + " -Wl,-z,-stack-size=12800000" + " -Wl,--wrap=fcntl" + " -Wl,--wrap=fcntl64" + " -Wl,--wrap=stat64" + " -Wl,--wrap=pow" + " -Wl,--wrap=exp" + " -Wl,--wrap=log" + " -Wl,--wrap=log2" + " -Wl,--wrap=lstat" + " -Wl,--wrap=stat" + " -Wl,--wrap=fstat" + " -Wl,--wrap=fstatat" + " -Wl,--wrap=lstat64" + " -Wl,--wrap=stat64" + " -Wl,--wrap=fstat64" + " -Wl,--wrap=fstatat64" + " -Wl,--wrap=mknod" + " -Wl,--wrap=mknodat" + " -Wl,--wrap=statx " + ) +endif() + + +if (USE_CUSTOM_ZLIB AND (NOT WIN32)) + target_link_libraries(bun PRIVATE "${BUN_LIB_DIR}/libz.a") + include_directories(${BUN_DEPS_DIR}/zlib/include) +else () + find_package(ZLIB REQUIRED) + target_link_libraries(bun PRIVATE ZLIB::ZLIB) +endif () + +if (USE_CUSTOM_BORINGSSL) + include_directories(src/deps/boringssl/include) + if (WIN32) + target_link_libraries(bun PRIVATE "${BUN_LIB_DIR}/crypto.lib") + target_link_libraries(bun PRIVATE "${BUN_LIB_DIR}/ssl.lib") + target_link_libraries(bun PRIVATE "${BUN_LIB_DIR}/decrepit.lib") + else() + target_link_libraries(bun PRIVATE "${BUN_LIB_DIR}/libcrypto.a") + target_link_libraries(bun PRIVATE "${BUN_LIB_DIR}/libssl.a") + target_link_libraries(bun PRIVATE "${BUN_LIB_DIR}/libdecrepit.a") + endif() +else () + include(FindBoringSSL) + FindBoringSSL(bun) +endif() + +if (USE_CUSTOM_LIBARCHIVE) + include_directories(src/deps/libarchive/include) + if (WIN32) + target_link_libraries(bun PRIVATE "${BUN_LIB_DIR}/archive.lib") + else() + target_link_libraries(bun PRIVATE "${BUN_LIB_DIR}/libarchive.a") + endif() +else () + find_package(LibArchive REQUIRED) + target_link_libraries(bun PRIVATE LibArchive::LibArchive) +endif() + +if (USE_CUSTOM_MIMALLOC) + include_directories(src/deps/mimalloc/include) + if (WIN32) + target_link_libraries(bun PRIVATE "${BUN_LIB_DIR}/mimalloc-static.lib") + else() + target_link_libraries(bun PRIVATE "${BUN_LIB_DIR}/libmimalloc.a") + endif() +else () + find_package(mimalloc REQUIRED) + target_link_libraries(bun PRIVATE mimalloc) +endif() + +if (USE_CUSTOM_ZSTD) + include_directories(src/deps/zstd/include) + if (WIN32) + target_link_libraries(bun PRIVATE "${BUN_LIB_DIR}/zstd.lib") + else() + target_link_libraries(bun PRIVATE "${BUN_LIB_DIR}/libzstd.a") + endif() +else () + find_package(zstd CONFIG REQUIRED) + target_link_libraries(bun PRIVATE zstd::libzstd) +endif() + +if (USE_CUSTOM_CARES) + include_directories(src/deps/zstd/include) + if (WIN32) + target_link_libraries(bun PRIVATE "${BUN_LIB_DIR}/cares.lib") + else() + target_link_libraries(bun PRIVATE "${BUN_LIB_DIR}/libcares.a") + endif() +else () + find_package(c-ares CONFIG REQUIRED) + target_link_libraries(bun PRIVATE c-ares::cares) +endif() + + +if (USE_CUSTOM_BASE64) + include_directories(src/deps/base64/include) + if (WIN32) + target_link_libraries(bun PRIVATE "${BUN_LIB_DIR}/base64.lib") + else() + target_link_libraries(bun PRIVATE "${BUN_LIB_DIR}/libbase64.a") + endif() +else () + find_package(base64 REQUIRED) + target_link_libraries(bun PRIVATE base64::base64) +endif() + +if (NOT WIN32) + if (USE_CUSTOM_TINYCC) + if (WIN32) + target_link_libraries(bun PRIVATE "${BUN_LIB_DIR}/tcc.lib") + else() + target_link_libraries(bun PRIVATE "${BUN_LIB_DIR}/libtcc.a") + endif() + else () + find_package(tinycc REQUIRED) + target_link_libraries(bun PRIVATE tinycc::tinycc) + endif() +endif() + +set_property(TARGET bun PROPERTY + MSVC_RUNTIME_LIBRARY "MultiThreadedDLL" +) + +if (USE_CUSTOM_LOLHTML) + if (WIN32) + target_link_libraries(bun PRIVATE "${BUN_LIB_DIR}/lolhtml.lib") + else() + target_link_libraries(bun PRIVATE "${BUN_LIB_DIR}/liblolhtml.a") + endif() +else () + find_package(lolhtml REQUIRED) + target_link_libraries(bun PRIVATE lolhtml::lolhtml) +endif() + +if (WIN32) + if (USE_CUSTOM_LIBUV) + target_link_libraries(bun PRIVATE "${BUN_LIB_DIR}/uv.lib") + else () + find_package(libuv CONFIG REQUIRED ) + target_link_libraries(bun PRIVATE $<IF:$<TARGET_EXISTS:libuv::uv_a>,libuv::uv_a,libuv::uv>) + endif() + +endif() + +if (USE_STATIC_SQLITE) + add_library(sqlite3 STATIC src/bun.js/bindings/sqlite/sqlite3.c) + target_include_directories(sqlite3 PUBLIC src/bun.js/bindings/sqlite) + target_link_libraries(bun PRIVATE sqlite3) + target_compile_definitions(bun PRIVATE "LAZY_LOAD_SQLITE=0") +else() + target_compile_definitions(bun PRIVATE "LAZY_LOAD_SQLITE=1") +endif() + + +if (NOT MSVC) + string(APPEND CMAKE_CXX_FLAGS " -fPIC ") +endif() + + +if (NOT MSVC) + target_link_libraries(bun PRIVATE "${WEBKIT_LIB_DIR}/libWTF.a") + target_link_libraries(bun PRIVATE "${WEBKIT_LIB_DIR}/libJavaScriptCore.a") + target_link_libraries(bun PRIVATE "${WEBKIT_LIB_DIR}/libbmalloc.a") +else() + + target_link_libraries(bun PRIVATE "${WEBKIT_LIB_DIR}/WTF.lib") + target_link_libraries(bun PRIVATE "${WEBKIT_LIB_DIR}/JavaScriptCore.lib") + + if (WIN32) + string (APPEND CMAKE_CXX_FLAGS + " /external:anglebrackets /Gs- /Zi " + ) + + string (APPEND CMAKE_FLAGS + " /external:anglebrackets /Gs- /Zi " + ) + set_target_properties(bun PROPERTIES LINK_FLAGS " /SUBSYSTEM:CONSOLE /STACK:4194304,2097152 ") + endif() + + if (DEFINED ENV{VCPKG_ROOT}) + include_directories($ENV{VCPKG_ROOT}/installed/x64-windows/include) + endif() + + # include_directories(C:/Users/windo/Build/WebKit/WebKitBuild/WTF/DerivedSources) + # include_directories(C:/Users/windo/Build/WebKit/WebKitBuild/WTF/Headers) + file(COPY C:/Users/windo/Code/WebKit/WebKitBuild/cmakeconfig.h DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/src/bun.js/bindings) + + + include_directories(C:/Users/windo/Code/WebKit/WebKitLibraries/win/include) + link_directories(C:/Users/windo/Code/WebKit/WebKitLibraries/win/lib64) + target_link_directories(bun PUBLIC ${ICU_LIBRARY}) + + + target_link_libraries(bun PUBLIC icuuc icudt icutu icuio icuin icutest) + target_link_libraries(bun PUBLIC winmm ws2_32 bcrypt ntdll kernel32 shell32 shlwapi advapi32 vcruntime ucrt legacy_stdio_definitions) +endif() + + + diff --git a/src/bun.js/bindings/KeyObject.cpp b/src/bun.js/bindings/KeyObject.cpp index d5782779d..8f2e52379 100644 --- a/src/bun.js/bindings/KeyObject.cpp +++ b/src/bun.js/bindings/KeyObject.cpp @@ -1178,7 +1178,6 @@ JSC::EncodedJSValue KeyObject__createPublicKey(JSC::JSGlobalObject* globalObject JSC::EncodedJSValue KeyObject__createSecretKey(JSC::JSGlobalObject* lexicalGlobalObject, JSC::CallFrame* callFrame) { - JSValue bufferArg = callFrame->uncheckedArgument(0); auto& vm = lexicalGlobalObject->vm(); auto scope = DECLARE_THROW_SCOPE(vm); @@ -1194,7 +1193,6 @@ JSC::EncodedJSValue KeyObject__createSecretKey(JSC::JSGlobalObject* lexicalGloba auto type = bufferArgCell->type(); switch (type) { - case DataViewType: case Uint8ArrayType: case Uint8ClampedArrayType: @@ -1236,6 +1234,7 @@ JSC::EncodedJSValue KeyObject__createSecretKey(JSC::JSGlobalObject* lexicalGloba throwException(lexicalGlobalObject, scope, createTypeError(lexicalGlobalObject, "ERR_INVALID_ARG_TYPE: expected Buffer or array-like object"_s)); return JSValue::encode(JSC::jsUndefined()); } + ASSERT_NOT_REACHED(); } JSC::EncodedJSValue KeyObject__Exports(JSC::JSGlobalObject* globalObject, JSC::CallFrame* callFrame) @@ -2071,8 +2070,8 @@ JSC::EncodedJSValue KeyObject__generateKeyPairSync(JSC::JSGlobalObject* lexicalG publicExponentArray[0] = (uint8_t)(publicExponent >> 24); publicExponentArray[1] = (uint8_t)(publicExponent >> 16); publicExponentArray[2] = (uint8_t)(publicExponent >> 8); - publicExponentArray[3] = (uint8_t)publicExponent; - + publicExponentArray[3] = (uint8_t)publicExponent; + int modulusLength = modulusLengthJS.toUInt32(lexicalGlobalObject); auto returnValue = JSC::JSValue {}; auto keyPairCallback = [&](CryptoKeyPair&& pair) { @@ -2107,17 +2106,17 @@ JSC::EncodedJSValue KeyObject__generateKeyPairSync(JSC::JSGlobalObject* lexicalG } auto namedCurve = namedCurveJS.toWTFString(lexicalGlobalObject); RETURN_IF_EXCEPTION(scope, encodedJSValue()); - if(namedCurve == "P-384"_s || namedCurve == "p384"_s || namedCurve == "secp384r1"_s) { + if (namedCurve == "P-384"_s || namedCurve == "p384"_s || namedCurve == "secp384r1"_s) { namedCurve = "P-384"_s; - } else if(namedCurve == "P-256"_s || namedCurve == "p256"_s || namedCurve == "prime256v1"_s) { + } else if (namedCurve == "P-256"_s || namedCurve == "p256"_s || namedCurve == "prime256v1"_s) { namedCurve = "P-256"_s; - } else if(namedCurve == "P-521"_s || namedCurve == "p521"_s || namedCurve == "secp521r1"_s) { + } else if (namedCurve == "P-521"_s || namedCurve == "p521"_s || namedCurve == "secp521r1"_s) { namedCurve = "P-521"_s; - }else { + } else { throwException(lexicalGlobalObject, scope, createTypeError(lexicalGlobalObject, "curve not supported"_s)); - return JSValue::encode(JSC::jsUndefined()); + return JSValue::encode(JSC::jsUndefined()); } - + auto result = CryptoKeyEC::generatePair(CryptoAlgorithmIdentifier::ECDSA, namedCurve, true, CryptoKeyUsageSign | CryptoKeyUsageVerify); if (result.hasException()) { WebCore::propagateException(*lexicalGlobalObject, scope, result.releaseException()); diff --git a/src/bun.js/bindings/Path.cpp b/src/bun.js/bindings/Path.cpp index 6507b7122..83b080545 100644 --- a/src/bun.js/bindings/Path.cpp +++ b/src/bun.js/bindings/Path.cpp @@ -57,69 +57,69 @@ using namespace JSC; // clang-format on -static JSC_DECLARE_HOST_FUNCTION(Path_functionBasename); -static JSC_DEFINE_HOST_FUNCTION(Path_functionBasename, +JSC_DECLARE_HOST_FUNCTION(Path_functionBasename); +JSC_DEFINE_HOST_FUNCTION(Path_functionBasename, (JSC::JSGlobalObject * globalObject, JSC::CallFrame* callFrame)) { DEFINE_CALLBACK_FUNCTION_BODY(Bun__Path__basename); } -static JSC_DECLARE_HOST_FUNCTION(Path_functionDirname); -static JSC_DEFINE_HOST_FUNCTION(Path_functionDirname, +JSC_DECLARE_HOST_FUNCTION(Path_functionDirname); +JSC_DEFINE_HOST_FUNCTION(Path_functionDirname, (JSC::JSGlobalObject * globalObject, JSC::CallFrame* callFrame)) { DEFINE_CALLBACK_FUNCTION_BODY(Bun__Path__dirname); } -static JSC_DECLARE_HOST_FUNCTION(Path_functionExtname); -static JSC_DEFINE_HOST_FUNCTION(Path_functionExtname, +JSC_DECLARE_HOST_FUNCTION(Path_functionExtname); +JSC_DEFINE_HOST_FUNCTION(Path_functionExtname, (JSC::JSGlobalObject * globalObject, JSC::CallFrame* callFrame)) { DEFINE_CALLBACK_FUNCTION_BODY(Bun__Path__extname); } -static JSC_DECLARE_HOST_FUNCTION(Path_functionFormat); -static JSC_DEFINE_HOST_FUNCTION(Path_functionFormat, +JSC_DECLARE_HOST_FUNCTION(Path_functionFormat); +JSC_DEFINE_HOST_FUNCTION(Path_functionFormat, (JSC::JSGlobalObject * globalObject, JSC::CallFrame* callFrame)) { DEFINE_CALLBACK_FUNCTION_BODY(Bun__Path__format); } -static JSC_DECLARE_HOST_FUNCTION(Path_functionIsAbsolute); -static JSC_DEFINE_HOST_FUNCTION(Path_functionIsAbsolute, +JSC_DECLARE_HOST_FUNCTION(Path_functionIsAbsolute); +JSC_DEFINE_HOST_FUNCTION(Path_functionIsAbsolute, (JSC::JSGlobalObject * globalObject, JSC::CallFrame* callFrame)) { DEFINE_CALLBACK_FUNCTION_BODY(Bun__Path__isAbsolute); } -static JSC_DECLARE_HOST_FUNCTION(Path_functionJoin); -static JSC_DEFINE_HOST_FUNCTION(Path_functionJoin, +JSC_DECLARE_HOST_FUNCTION(Path_functionJoin); +JSC_DEFINE_HOST_FUNCTION(Path_functionJoin, (JSC::JSGlobalObject * globalObject, JSC::CallFrame* callFrame)) { DEFINE_CALLBACK_FUNCTION_BODY(Bun__Path__join); } -static JSC_DECLARE_HOST_FUNCTION(Path_functionNormalize); -static JSC_DEFINE_HOST_FUNCTION(Path_functionNormalize, +JSC_DECLARE_HOST_FUNCTION(Path_functionNormalize); +JSC_DEFINE_HOST_FUNCTION(Path_functionNormalize, (JSC::JSGlobalObject * globalObject, JSC::CallFrame* callFrame)) { DEFINE_CALLBACK_FUNCTION_BODY(Bun__Path__normalize); } -static JSC_DECLARE_HOST_FUNCTION(Path_functionParse); -static JSC_DEFINE_HOST_FUNCTION(Path_functionParse, +JSC_DECLARE_HOST_FUNCTION(Path_functionParse); +JSC_DEFINE_HOST_FUNCTION(Path_functionParse, (JSC::JSGlobalObject * globalObject, JSC::CallFrame* callFrame)) { DEFINE_CALLBACK_FUNCTION_BODY(Bun__Path__parse); } -static JSC_DECLARE_HOST_FUNCTION(Path_functionRelative); -static JSC_DEFINE_HOST_FUNCTION(Path_functionRelative, +JSC_DECLARE_HOST_FUNCTION(Path_functionRelative); +JSC_DEFINE_HOST_FUNCTION(Path_functionRelative, (JSC::JSGlobalObject * globalObject, JSC::CallFrame* callFrame)) { DEFINE_CALLBACK_FUNCTION_BODY(Bun__Path__relative); } -static JSC_DECLARE_HOST_FUNCTION(Path_functionResolve); -static JSC_DEFINE_HOST_FUNCTION(Path_functionResolve, +JSC_DECLARE_HOST_FUNCTION(Path_functionResolve); +JSC_DEFINE_HOST_FUNCTION(Path_functionResolve, (JSC::JSGlobalObject * globalObject, JSC::CallFrame* callFrame)) { DEFINE_CALLBACK_FUNCTION_BODY(Bun__Path__resolve); } -static JSC_DECLARE_HOST_FUNCTION(Path_functionToNamespacedPath); -static JSC_DEFINE_HOST_FUNCTION(Path_functionToNamespacedPath, +JSC_DECLARE_HOST_FUNCTION(Path_functionToNamespacedPath); +JSC_DEFINE_HOST_FUNCTION(Path_functionToNamespacedPath, (JSC::JSGlobalObject * globalObject, JSC::CallFrame* callFrame)) { auto argCount = static_cast<uint16_t>(callFrame->argumentCount()); diff --git a/src/bun.js/webcore/streams.classes.ts b/src/bun.js/webcore/streams.classes.ts deleted file mode 100644 index 0b070b857..000000000 --- a/src/bun.js/webcore/streams.classes.ts +++ /dev/null @@ -1,5 +0,0 @@ -// import { define } from "../scripts/class-definitions"; - -// export default [ -// define({}) -// ] diff --git a/src/bun.js/scripts/generate-classes.ts b/src/codegen/generate-classes.ts index ae28f4fe5..4154d334a 100644 --- a/src/bun.js/scripts/generate-classes.ts +++ b/src/codegen/generate-classes.ts @@ -2,7 +2,7 @@ import { unlinkSync } from "fs"; import { readdirSync } from "fs"; import { resolve } from "path"; -import type { Field, ClassDefinition } from "./class-definitions"; +import type { Field, ClassDefinition } from "../bun.js/scripts/class-definitions"; const CommonIdentifiers = { "name": true, @@ -284,26 +284,6 @@ export function generateHashTable(nameToUse, symbolName, typeName, obj, props = rows.push(propRow(symbolName, typeName, name, props[name], wrapped, defaultPropertyAttributes)); } - // static const HashTableValue JSWebSocketPrototypeTableValues[] = { - // { "constructor"_s, static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { HashTableValue::GetterSetterType, jsWebSocketConstructor, 0 } }, - // { "URL"_s, static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { HashTableValue::GetterSetterType, jsWebSocket_URL, 0 } }, - // { "url"_s, static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { HashTableValue::GetterSetterType, jsWebSocket_url, 0 } }, - // { "readyState"_s, static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { HashTableValue::GetterSetterType, jsWebSocket_readyState, 0 } }, - // { "bufferedAmount"_s, static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { HashTableValue::GetterSetterType, jsWebSocket_bufferedAmount, 0 } }, - // { "onopen"_s, static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { HashTableValue::GetterSetterType, jsWebSocket_onopen, setJSWebSocket_onopen } }, }, - // { "onmessage"_s, static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { HashTableValue::GetterSetterType, jsWebSocket_onmessage, setJSWebSocket_onmessage } }, }, - // { "onerror"_s, static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { HashTableValue::GetterSetterType, jsWebSocket_onerror, setJSWebSocket_onerror } }, }, - // { "onclose"_s, static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { HashTableValue::GetterSetterType, jsWebSocket_onclose, setJSWebSocket_onclose } }, }, - // { "protocol"_s, static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { HashTableValue::GetterSetterType, jsWebSocket_protocol, 0 } }, - // { "extensions"_s, static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { HashTableValue::GetterSetterType, jsWebSocket_extensions, 0 } }, - // { "binaryType"_s, static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { HashTableValue::GetterSetterType, jsWebSocket_binaryType, setJSWebSocket_binaryType } }, }, - // { "send"_s, static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { HashTableValue::NativeFunctionType, jsWebSocketPrototypeFunction_send (intptr_t)(1) } }, - // { "close"_s, static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { HashTableValue::NativeFunctionType, jsWebSocketPrototypeFunction_close (intptr_t)(0) } }, - // { "CONNECTING"_s, JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { HashTableValue::ConstantType, 0 } }, - // { "OPEN"_s, JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { HashTableValue::ConstantType, 1 } }, - // { "CLOSING"_s, JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { HashTableValue::ConstantType, 2 } }, - // { "CLOSED"_s, JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::ConstantInteger, NoIntrinsic, { HashTableValue::ConstantType, 3 } }, - // }; return ` static const HashTableValue ${nameToUse}TableValues[] = {${rows.length > 0 ? "\n" + rows.join(" ,\n") + "\n" : ""}}; `; @@ -1714,7 +1694,7 @@ pub const StaticCallbackType = fn(*JSC.JSGlobalObject, *JSC.CallFrame) callconv( `; -function findClasses() { +function findClassesOldBehavior() { var classes = []; for (let directory of directoriesToSearch) { readdirSync(directory).forEach(file => { @@ -1734,7 +1714,23 @@ function findClasses() { return classes; } -const classes = findClasses(); +function findClasses(argv: string[]) { + const classes = []; + for (const file of argv) { + const result = require(file); + if (!(result?.default?.length ?? 0)) continue; + console.log("Found", result.default.length, "classes from", file); + for (let { name } of result.default) { + console.log(` - ${name}`); + } + + classes.push(...result.default); + } + classes.sort((a, b) => (a.name < b.name ? -1 : 1)); + return classes; +} + +const classes = process.argv.length > 2 ? findClasses(process.argv.slice(2)) : findClassesOldBehavior(); function writeAndUnlink(path, content) { try { @@ -1815,13 +1811,12 @@ function writeCppSerializers() { } `; - for (let klass of classes) { - } - return output; } -await writeAndUnlink(`${import.meta.dir}/../bindings/generated_classes.zig`, [ +const bindingDir = `${import.meta.dir}/../bun.js/bindings`; + +await writeAndUnlink(`${bindingDir}/generated_classes.zig`, [ ZIG_GENERATED_CLASSES_HEADER, ...classes.map(a => generateZig(a.name, a).trim()).join("\n"), @@ -1834,26 +1829,26 @@ comptime { `, ]); const allHeaders = classes.map(a => generateHeader(a.name, a)); -await writeAndUnlink(`${import.meta.dir}/../bindings/ZigGeneratedClasses.h`, [ +await writeAndUnlink(`${bindingDir}/ZigGeneratedClasses.h`, [ GENERATED_CLASSES_HEADER[0], ...[...new Set(extraIncludes.map(a => `#include "${a}";` + "\n"))], GENERATED_CLASSES_HEADER[1], ...allHeaders, GENERATED_CLASSES_FOOTER, ]); -await writeAndUnlink(`${import.meta.dir}/../bindings/ZigGeneratedClasses.cpp`, [ +await writeAndUnlink(`${bindingDir}/ZigGeneratedClasses.cpp`, [ GENERATED_CLASSES_IMPL_HEADER, ...classes.map(a => generateImpl(a.name, a)), writeCppSerializers(classes), GENERATED_CLASSES_IMPL_FOOTER, ]); await writeAndUnlink( - `${import.meta.dir}/../bindings/ZigGeneratedClasses+lazyStructureHeader.h`, + `${bindingDir}/ZigGeneratedClasses+lazyStructureHeader.h`, classes.map(a => generateLazyClassStructureHeader(a.name, a)).join("\n"), ); await writeAndUnlink( - `${import.meta.dir}/../bindings/ZigGeneratedClasses+DOMClientIsoSubspaces.h`, + `${bindingDir}/ZigGeneratedClasses+DOMClientIsoSubspaces.h`, classes.map(a => [ `std::unique_ptr<GCClient::IsoSubspace> ${clientSubspaceFor(a.name)};`, @@ -1863,7 +1858,7 @@ await writeAndUnlink( ); await writeAndUnlink( - `${import.meta.dir}/../bindings/ZigGeneratedClasses+DOMIsoSubspaces.h`, + `${bindingDir}/ZigGeneratedClasses+DOMIsoSubspaces.h`, classes.map(a => [ `std::unique_ptr<IsoSubspace> ${subspaceFor(a.name)};`, @@ -1873,7 +1868,7 @@ await writeAndUnlink( ); await writeAndUnlink( - `${import.meta.dir}/../bindings/ZigGeneratedClasses+lazyStructureImpl.h`, + `${bindingDir}/ZigGeneratedClasses+lazyStructureImpl.h`, initLazyClasses(classes.map(a => generateLazyClassStructureImpl(a.name, a))) + "\n" + visitLazyClasses(classes), ); diff --git a/src/bun.js/scripts/generate-jssink.js b/src/codegen/generate-jssink.ts index 758b1863b..292a740f8 100644 --- a/src/bun.js/scripts/generate-jssink.js +++ b/src/codegen/generate-jssink.ts @@ -1,7 +1,6 @@ import { resolve } from "path"; const classes = ["ArrayBufferSink", "FileSink", "HTTPResponseSink", "HTTPSResponseSink"]; -const SINK_COUNT = 5; function names(name) { return { @@ -951,5 +950,5 @@ extern "C" void ${name}__onClose(JSC__JSValue controllerValue, JSC__JSValue reas return templ; } -await Bun.write(resolve(import.meta.dir + "/../bindings/JSSink.h"), header()); -await Bun.write(resolve(import.meta.dir + "/../bindings/JSSink.cpp"), await implementation()); +await Bun.write(resolve(import.meta.dir + "/../bun.js/bindings/JSSink.h"), header()); +await Bun.write(resolve(import.meta.dir + "/../bun.js/bindings/JSSink.cpp"), await implementation()); |