diff --git a/.github/workflows/test-shared.yml b/.github/workflows/test-shared.yml index 9f4d2e031f5..b32342499b7 100644 --- a/.github/workflows/test-shared.yml +++ b/.github/workflows/test-shared.yml @@ -168,7 +168,16 @@ jobs: extra-nix-flags: | --arg useSeparateDerivationForV8 true \ ${{ matrix.perfetto && '--arg withPerfetto true \' || '\' }} - ${{ endsWith(matrix.system, '-darwin') && '--arg withAmaro false --arg withLief false --arg withSQLite false --arg withFFI false --arg extraConfigFlags ''["--without-inspector" "--without-node-options"]'' \' || '\' }} + ${{ endsWith(matrix.system, '-darwin') && '\ + --arg withAmaro false \ + --arg withFFI false \ + --arg withLief false \ + --arg withSQLite false \ + --arg withTemporal false \ + --arg extraConfigFlags ''[ + "--without-inspector" + "--without-node-options" + ]'' \' || '\' }} secrets: CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }} diff --git a/shell.nix b/shell.nix index 7cfa46e88bb..a1d917bf864 100644 --- a/shell.nix +++ b/shell.nix @@ -18,7 +18,7 @@ withSQLite ? true, withFFI ? true, withSSL ? true, - withTemporal ? false, + withTemporal ? true, withPerfetto ? false, sharedLibDeps ? ( import ./tools/nix/sharedLibDeps.nix { diff --git a/tools/nix/sharedLibDeps.nix b/tools/nix/sharedLibDeps.nix index d57ceb4918b..41a406237da 100644 --- a/tools/nix/sharedLibDeps.nix +++ b/tools/nix/sharedLibDeps.nix @@ -6,7 +6,7 @@ withSSL ? true, withFFI ? true, withPerfetto ? false, - withTemporal ? false, + withTemporal ? true, }: { inherit (pkgs) diff --git a/tools/nix/temporal-no-vendored-icu.patch b/tools/nix/temporal-no-vendored-icu.patch deleted file mode 100644 index d9a06b3ce69..00000000000 --- a/tools/nix/temporal-no-vendored-icu.patch +++ /dev/null @@ -1,63 +0,0 @@ -diff --git a/deps/v8/src/objects/js-temporal-zoneinfo64.cc b/deps/v8/src/objects/js-temporal-zoneinfo64.cc -index 99dd3a84c1e..b6b399c10dc 100644 ---- a/deps/v8/src/objects/js-temporal-zoneinfo64.cc -+++ b/deps/v8/src/objects/js-temporal-zoneinfo64.cc -@@ -11,12 +11,44 @@ - #include "temporal_rs/TimeZone.hpp" - - #ifdef V8_INTL_SUPPORT --#include "udatamem.h" -+#include "unicode/udata.h" -+typedef struct { -+ uint16_t headerSize; -+ uint8_t magic1; -+ uint8_t magic2; -+} MappedData; -+typedef struct { -+ MappedData dataHeader; -+ UDataInfo info; -+} DataHeader; -+typedef struct { -+ void* Lookup; -+ void* NumEntries; -+} commonDataFuncs; -+struct UDataMemory { -+ const commonDataFuncs *vFuncs; /* Function Pointers for accessing TOC */ -+ -+ const DataHeader *pHeader; /* Header of the memory being described by this */ -+ /* UDataMemory object. */ -+ const void *toc; /* For common memory, table of contents for */ -+ /* the pieces within. */ -+ UBool heapAllocated; /* True if this UDataMemory Object is on the */ -+ /* heap and thus needs to be deleted when closed. */ -+ -+ void *mapAddr; /* For mapped or allocated memory, the start addr. */ -+ /* Only non-null if a close operation should unmap */ -+ /* the associated data. */ -+ void *map; /* Handle, or other data, OS dependent. */ -+ /* Only non-null if a close operation should unmap */ -+ /* the associated data, and additional info */ -+ /* beyond the mapAddr is needed to do that. */ -+ int32_t length; /* Length of the data in bytes; -1 if unknown. */ -+}; - #else - // Defined in builtins-temporal-zoneinfo64-data.cc, generated by - // include-file-as-bytes.py --extern "C" uint32_t zoneinfo64_static_data[]; --extern "C" size_t zoneinfo64_static_data_len; -+static uint32_t zoneinfo64_static_data[] = {}; -+static size_t zoneinfo64_static_data_len = 0; - #endif - - namespace v8::internal { -@@ -33,7 +65,7 @@ ZoneInfo64Provider::ZoneInfo64Provider() { - // NOT udata_getLength: this ignores the header, - // and we're parsing resb files with the header - auto length = memory->length; -- const void* data = udata_getRawMemory(memory); -+ const void* data = udata_getMemory(memory); - DCHECK_WITH_MSG(length % 4 == 0, "ICU4C should align udata to uint32_t"); - if (length % 4 != 0) { - // This really shouldn't happen: ICU4C aligns these files --- -2.51.0 diff --git a/tools/nix/v8.nix b/tools/nix/v8.nix index 81617fff809..8b9f1796e06 100644 --- a/tools/nix/v8.nix +++ b/tools/nix/v8.nix @@ -25,7 +25,10 @@ let useSharedAbseil = builtins.elem "--shared-abseil" configureFlags; useSharedHighway = builtins.elem "--shared-highway" configureFlags; + useSharedPerfetto = builtins.elem "--shared-perfetto" configureFlags; useSharedSimdutf = builtins.elem "--shared-simdutf" configureFlags; + useSharedTemporal = builtins.elem "--shared-temporal_capi" configureFlags; + src = let inherit (lib) fileset; @@ -50,8 +53,13 @@ let ++ lib.optional (!useSharedHighway) ../../tools/v8_gypfiles/highway.gyp ++ lib.optional (!useSharedSimdutf) ../../tools/v8_gypfiles/simdutf.gyp ++ lib.optional ( - builtins.elem "--with-perfetto" configureFlags - && !(builtins.elem "--shared-perfetto" configureFlags) + if useSharedTemporal then + icu == null + else + !(builtins.elem "--v8-disable-temporal-support" configureFlags) + ) ../../deps/crates + ++ lib.optional ( + builtins.elem "--with-perfetto" configureFlags && !useSharedPerfetto ) ../../deps/perfetto ++ lib.optionals (icu != null) [ ../../tools/icu/icu_versions.json @@ -111,14 +119,9 @@ stdenv.mkDerivation (finalAttrs: { else "${builtins.elemAt v8Version 0}.${builtins.elemAt v8Version 1}.${builtins.elemAt v8Version 2}.${builtins.elemAt v8Version 3}-${builtins.elemAt v8_embedder_string 0}"; - patches = lib.optional ( - # V8 accesses internal ICU headers and methods in the Temporal files. - !(builtins.isString icu) && builtins.elem "--v8-enable-temporal-support" configureFlags - ) ./temporal-no-vendored-icu.patch; - # We need to patch tools/gyp/ to work from within Nix sandbox prePatch = '' - ${lib.optionalString (builtins.length finalAttrs.patches == 0) "patches=()"} + ${lib.optionalString (builtins.length (finalAttrs.patches or [ ]) == 0) "patches=()"} for patch in ${lib.concatStringsSep " " patches}; do filtered=$(mktemp) filterdiff -p1 -i 'tools/gyp/pylib/*' "$patch" > "$filtered"