Skip to content

Commit f226fad

Browse files
committed
Linux build working: JSCOnly port + system malloc + Gigacage stub
Use -DPORT=JSCOnly which only needs ICU (no GTK/Cairo/GStreamer deps). Use -DUSE_SYSTEM_MALLOC=ON to avoid bmalloc dependency. Stub Gigacage::ensureGigacage() and YARR Unicode property functions. Flatten JSC headers into include bridge so <JavaScriptCore/Yarr.h> resolves correctly from Source/JavaScriptCore/yarr/Yarr.h. Verified in Docker: ubuntu:24.04 with cmake, ninja, g++, libicu-dev.
1 parent 6950e27 commit f226fad

3 files changed

Lines changed: 37 additions & 44 deletions

File tree

.github/workflows/validate-dnr-rules.yml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ jobs:
3030
run: |
3131
sudo apt-get update
3232
sudo apt-get install -y --no-install-recommends \
33-
cmake ninja-build pkg-config ruby unifdef libicu-dev
33+
cmake ninja-build pkg-config ruby unifdef libicu-dev g++ perl python3
3434
3535
- name: Cache CMake build
3636
uses: actions/cache@v4
@@ -45,6 +45,7 @@ jobs:
4545
cmake -B build -G Ninja \
4646
-DCMAKE_BUILD_TYPE=Release \
4747
-DPORT=JSCOnly \
48+
-DUSE_SYSTEM_MALLOC=ON \
4849
.
4950
5051
- name: Build
@@ -60,16 +61,16 @@ jobs:
6061
{"id":4,"priority":1,"action":{"type":"block"},"condition":{"regexFilter":"pixel\\b"}}
6162
]
6263
RULES
63-
./build/validate-dnr-rules /tmp/test-rules.json
64+
./build/bin/validate-dnr-rules /tmp/test-rules.json
6465
6566
- name: Binary info
6667
run: |
67-
file build/validate-dnr-rules
68-
du -h build/validate-dnr-rules
69-
ldd build/validate-dnr-rules || true
68+
file build/bin/validate-dnr-rules
69+
du -h build/bin/validate-dnr-rules
70+
ldd build/bin/validate-dnr-rules || true
7071
7172
- name: Upload artifact
7273
uses: actions/upload-artifact@v4
7374
with:
7475
name: validate-dnr-rules-${{ matrix.name }}
75-
path: build/validate-dnr-rules
76+
path: build/bin/validate-dnr-rules

ghostery/validate-dnr-rules/CMakeLists.txt

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ set(TOOL_SOURCES
2525
add_executable(validate-dnr-rules ${TOOL_SOURCES} ${CE_SOURCES})
2626

2727
target_compile_definitions(validate-dnr-rules PRIVATE
28-
ENABLE_CONTENT_EXTENSIONS=1
2928
WEBCORE_EXPORT=
3029
WEBCORE_TESTSUPPORT_EXPORT=
3130
STATICALLY_LINKED_WITH_WTF=1
@@ -40,14 +39,35 @@ target_include_directories(validate-dnr-rules PRIVATE
4039
${WTF_DERIVED_SOURCES_DIR}
4140
)
4241

43-
# Create include bridge so <WebCore/...> and <JavaScriptCore/...> resolve
42+
# Create include bridge so <WebCore/...> and <JavaScriptCore/...> resolve.
43+
# WebKit headers use flat <JavaScriptCore/Yarr.h> but files live in subdirs.
4444
set(INCLUDE_BRIDGE_DIR "${CMAKE_BINARY_DIR}/validate-dnr-includes")
45-
file(MAKE_DIRECTORY "${INCLUDE_BRIDGE_DIR}")
46-
file(CREATE_LINK "${CE_DIR}" "${INCLUDE_BRIDGE_DIR}/WebCore" SYMBOLIC)
47-
file(CREATE_LINK "${JSC_DIR}/yarr" "${INCLUDE_BRIDGE_DIR}/JavaScriptCore" SYMBOLIC)
45+
file(MAKE_DIRECTORY "${INCLUDE_BRIDGE_DIR}/WebCore")
46+
file(MAKE_DIRECTORY "${INCLUDE_BRIDGE_DIR}/JavaScriptCore")
47+
48+
file(GLOB CE_HEADERS "${CE_DIR}/*.h")
49+
foreach(H ${CE_HEADERS})
50+
get_filename_component(HNAME ${H} NAME)
51+
file(CREATE_LINK "${H}" "${INCLUDE_BRIDGE_DIR}/WebCore/${HNAME}" SYMBOLIC)
52+
endforeach()
53+
54+
file(GLOB YARR_HEADERS "${JSC_DIR}/yarr/*.h")
55+
foreach(H ${YARR_HEADERS})
56+
get_filename_component(HNAME ${H} NAME)
57+
file(CREATE_LINK "${H}" "${INCLUDE_BRIDGE_DIR}/JavaScriptCore/${HNAME}" SYMBOLIC)
58+
endforeach()
59+
60+
# Also link JSC headers from subdirectories that YARR needs
61+
file(GLOB_RECURSE ALL_JSC_HEADERS "${JSC_DIR}/*.h")
62+
foreach(H ${ALL_JSC_HEADERS})
63+
get_filename_component(HNAME ${H} NAME)
64+
if(NOT EXISTS "${INCLUDE_BRIDGE_DIR}/JavaScriptCore/${HNAME}")
65+
file(CREATE_LINK "${H}" "${INCLUDE_BRIDGE_DIR}/JavaScriptCore/${HNAME}" SYMBOLIC)
66+
endif()
67+
endforeach()
68+
4869
target_include_directories(validate-dnr-rules SYSTEM PRIVATE
4970
${INCLUDE_BRIDGE_DIR}
50-
${JSC_DIR}
5171
)
5272

5373
target_link_libraries(validate-dnr-rules PRIVATE WTF)

ghostery/validate-dnr-rules/src/stubs.cpp

Lines changed: 4 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,14 @@
11
#include "config.h"
2-
#include <cstdio>
3-
#include <cstdlib>
42
#include <JavaScriptCore/Yarr.h>
53
#include <JavaScriptCore/YarrUnicodeProperties.h>
64
#include <wtf/text/WTFString.h>
75

8-
// WTF assertion stubs — these are normally provided by libWTF
9-
extern "C" {
10-
11-
void WTFCrash()
12-
{
13-
fprintf(stderr, "WTFCrash\n");
14-
abort();
15-
}
16-
17-
void WTFCrashWithSecurityImplication()
18-
{
19-
fprintf(stderr, "WTFCrashWithSecurityImplication\n");
20-
abort();
21-
}
22-
23-
void WTFReportAssertionFailure(const char* file, int line, const char* function, const char* assertion)
24-
{
25-
fprintf(stderr, "ASSERTION FAILED: %s (%s:%d %s)\n", assertion, file, line, function);
6+
// Gigacage stub — not needed when using system malloc
7+
namespace Gigacage {
8+
void ensureGigacage() { }
269
}
2710

28-
void WTFReportAssertionFailureWithMessage(const char* file, int line, const char* function, const char* assertion, const char* format, ...)
29-
{
30-
fprintf(stderr, "ASSERTION FAILED: %s (%s:%d %s)\n", assertion, file, line, function);
31-
}
32-
33-
void WTFReportBacktrace()
34-
{
35-
}
36-
37-
} // extern "C"
38-
39-
// YARR Unicode property stubs — these are only needed for \p{} property
11+
// YARR Unicode property stubs — only needed for \p{} property
4012
// escapes which DNR regexFilter patterns never use.
4113
namespace JSC::Yarr {
4214

0 commit comments

Comments
 (0)