aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.vscode/settings.json1
-rw-r--r--CMakeLists.txt645
-rw-r--r--CMakeLists_Old.txt516
-rw-r--r--src/bun.js/bindings/KeyObject.cpp19
-rw-r--r--src/bun.js/bindings/Path.cpp44
-rw-r--r--src/bun.js/webcore/streams.classes.ts5
-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());