Skip to content

Commit ad3bd23

Browse files
switch to feature flag
1 parent 6b09e11 commit ad3bd23

File tree

14 files changed

+125
-17
lines changed

14 files changed

+125
-17
lines changed

.github/workflows/arbitrator-ci.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,23 @@ jobs:
128128
with:
129129
cache: false
130130

131+
- name: Cache cbrotli
132+
uses: actions/cache@v4
133+
id: cache-cbrotli
134+
with:
135+
path: |
136+
target/include/brotli/
137+
target/lib-wasm/
138+
target/lib/libbrotlicommon-static.a
139+
target/lib/libbrotlienc-static.a
140+
target/lib/libbrotlidec-static.a
141+
key: ${{ runner.os }}-brotli-${{ hashFiles('scripts/build-brotli.sh') }}-${{ hashFiles('.github/workflows/arbitrator-ci.yaml') }}-arbitrator
142+
restore-keys: ${{ runner.os }}-brotli-${{ hashFiles('scripts/build-brotli.sh') }}-${{ hashFiles('.github/workflows/arbitrator-ci.yaml') }}
143+
144+
- name: Build cbrotli-local
145+
if: steps.cache-cbrotli.outputs.cache-hit != 'true'
146+
run: ./scripts/build-brotli.sh -l
147+
131148
- name: Setup emsdk
132149
if: steps.cache-cbrotli.outputs.cache-hit != 'true'
133150
uses: mymindstorm/setup-emsdk@v12
@@ -139,6 +156,10 @@ jobs:
139156
# so make sure it doesn't conflict with anything!
140157
no-cache: true
141158

159+
- name: Build cbrotli-wasm
160+
if: steps.cache-cbrotli.outputs.cache-hit != 'true'
161+
run: ./scripts/build-brotli.sh -w
162+
142163
- name: Add wabt to path
143164
run: echo "$HOME/wabt-prefix/bin" >> "$GITHUB_PATH"
144165

.github/workflows/ci.yml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,26 @@ jobs:
105105
key: ${{ runner.os }}-cargo-${{ matrix.test-mode }}-${{ steps.rust-version.outputs.version }}-min-${{ hashFiles('arbitrator/Cargo.lock') }}
106106
restore-keys: ${{ runner.os }}-cargo-${{ matrix.test-mode }}-${{ steps.rust-version.outputs.version }}-
107107

108+
- name: Cache cbrotli
109+
uses: actions/cache@v4
110+
id: cache-cbrotli
111+
with:
112+
path: |
113+
target/include/brotli/
114+
target/lib-wasm/
115+
target/lib/libbrotlicommon-static.a
116+
target/lib/libbrotlienc-static.a
117+
target/lib/libbrotlidec-static.a
118+
key: ${{ runner.os }}-brotli-${{ matrix.test-mode }}-${{ hashFiles('scripts/build-brotli.sh') }}-${{ hashFiles('.github/workflows/arbitrator-ci.yaml') }}
119+
120+
- name: Build cbrotli-local
121+
if: steps.cache-cbrotli.outputs.cache-hit != 'true'
122+
run: ./scripts/build-brotli.sh -l
123+
124+
- name: Build cbrotli-wasm in docker
125+
if: steps.cache-cbrotli.outputs.cache-hit != 'true'
126+
run: ./scripts/build-brotli.sh -w -d
127+
108128
- name: Build
109129
run: make build test-go-deps -j8
110130

.github/workflows/codeql-analysis.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,19 @@ jobs:
113113
path: ~/wabt-prefix
114114
key: ${{ runner.os }}-wabt-codeql-${{ matrix.language }}-${{ env.WABT_VERSION }}
115115

116+
- name: Cache cbrotli
117+
uses: actions/cache@v4
118+
id: cache-cbrotli
119+
with:
120+
path: |
121+
target/include/brotli/
122+
target/lib-wasm/
123+
target/lib/libbrotlicommon-static.a
124+
target/lib/libbrotlienc-static.a
125+
target/lib/libbrotlidec-static.a
126+
key: ${{ runner.os }}-brotli-${{ matrix.language }}-${{ hashFiles('scripts/build-brotli.sh') }}-${{ hashFiles('.github/workflows/arbitrator-ci.yaml') }}-codeql
127+
restore-keys: ${{ runner.os }}-brotli-${{ matrix.language }}-${{ hashFiles('scripts/build-brotli.sh') }}-${{ hashFiles('.github/workflows/arbitrator-ci.yaml') }}
128+
116129
- name: Cache Rust Build Products
117130
uses: actions/cache@v4
118131
with:
@@ -139,6 +152,14 @@ jobs:
139152
# queries: security-extended,security-and-quality
140153
config-file: ./.github/codeql/codeql-config.yml
141154

155+
- name: Build cbrotli-local
156+
if: steps.cache-cbrotli.outputs.cache-hit != 'true'
157+
run: ./scripts/build-brotli.sh -l
158+
159+
- name: Build cbrotli-wasm in docker
160+
if: steps.cache-cbrotli.outputs.cache-hit != 'true'
161+
run: ./scripts/build-brotli.sh -w -d
162+
142163
- name: Build Nitro for CodeQL
143164
run: make build
144165

Dockerfile

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ RUN . ~/.bashrc && NITRO_BUILD_IGNORE_TIMESTAMPS=1 make build-solidity
4343

4444
FROM debian:bookworm-20231218 AS wasm-base
4545
WORKDIR /workspace
46-
COPY brotli brotli
4746
RUN apt-get update && apt-get install -y curl build-essential=12.9
4847

4948
FROM wasm-base AS wasm-libs-builder
@@ -52,9 +51,6 @@ RUN apt-get update && \
5251
apt-get install -y clang=1:14.0-55.7~deb12u1 lld=1:14.0-55.7~deb12u1 wabt
5352
# pinned rust 1.84.1
5453
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.84.1 --target x86_64-unknown-linux-gnu,wasm32-unknown-unknown,wasm32-wasip1
55-
RUN mkdir -p /opt/wasi-sdk/wasi-sysroot && \
56-
curl --proto '=https' --tlsv1.2 -sSf -L https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-27/wasi-sysroot-27.0.tar.gz | \
57-
tar -C /opt/wasi-sdk/wasi-sysroot -xzf - --strip-components=1
5854
COPY ./Makefile ./
5955
COPY arbitrator/Cargo.* arbitrator/
6056
COPY arbitrator/arbutil arbitrator/arbutil
@@ -63,11 +59,12 @@ COPY arbitrator/caller-env arbitrator/caller-env
6359
COPY arbitrator/prover arbitrator/prover
6460
COPY arbitrator/wasm-libraries arbitrator/wasm-libraries
6561
COPY arbitrator/tools/wasmer arbitrator/tools/wasmer
62+
COPY brotli brotli
6663
COPY scripts/build-brotli.sh scripts/
6764
COPY scripts/remove_reference_types.sh scripts/
6865
COPY --from=brotli-wasm-export / target/
6966
RUN apt-get update && apt-get install -y cmake
70-
RUN . ~/.cargo/env && NITRO_BUILD_IGNORE_TIMESTAMPS=1 WASI_SYSROOT=/opt/wasi-sdk/wasi-sysroot RUSTFLAGS='-C symbol-mangling-version=v0' make build-wasm-libs
67+
RUN . ~/.cargo/env && NITRO_BUILD_IGNORE_TIMESTAMPS=1 RUSTFLAGS='-C symbol-mangling-version=v0' make build-wasm-libs
7168

7269
FROM scratch AS wasm-libs-export
7370
COPY --from=wasm-libs-builder /workspace/ /
@@ -148,7 +145,6 @@ RUN wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \
148145
apt-get update && \
149146
apt-get install -y llvm-15-dev libclang-common-15-dev
150147
COPY --from=brotli-library-export / target/
151-
COPY brotli brotli
152148
COPY arbitrator/Cargo.* arbitrator/
153149
COPY arbitrator/arbutil arbitrator/arbutil
154150
COPY arbitrator/bench arbitrator/bench

Makefile

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ done = "%bdone!%b\n" $(color_pink) $(color_reset)
5757

5858
replay_wasm=$(output_latest)/replay.wasm
5959

60+
arb_brotli_files = $(wildcard arbitrator/brotli/src/*.* arbitrator/brotli/src/*/*.* arbitrator/brotli/*.toml arbitrator/brotli/*.rs) .make/cbrotli-lib .make/cbrotli-wasm
61+
6062
arbitrator_generated_header=$(output_root)/include/arbitrator.h
6163
arbitrator_wasm_libs=$(patsubst %, $(output_root)/machines/latest/%.wasm, forward wasi_stub host_io soft-float arbcompress user_host program_exec)
6264
arbitrator_stylus_lib=$(output_root)/lib/libstylus.a
@@ -80,15 +82,15 @@ WASI_SYSROOT?=/opt/wasi-sdk/wasi-sysroot
8082

8183
arbitrator_wasm_lib_flags=$(patsubst %, -l %, $(arbitrator_wasm_libs))
8284

83-
rust_arbutil_files = $(wildcard arbitrator/arbutil/src/*.* arbitrator/arbutil/src/*/*.* arbitrator/arbutil/*.toml arbitrator/caller-env/src/*.* arbitrator/caller-env/src/*/*.* arbitrator/caller-env/*.toml)
85+
rust_arbutil_files = $(wildcard arbitrator/arbutil/src/*.* arbitrator/arbutil/src/*/*.* arbitrator/arbutil/*.toml arbitrator/caller-env/src/*.* arbitrator/caller-env/src/*/*.* arbitrator/caller-env/*.toml) .make/cbrotli-lib
8486

8587
prover_direct_includes = $(patsubst %,$(output_latest)/%.wasm, forward forward_stub)
8688
prover_dir = arbitrator/prover/
87-
rust_prover_files = $(wildcard $(prover_dir)/src/*.* $(prover_dir)/src/*/*.* $(prover_dir)/*.toml $(prover_dir)/*.rs) $(rust_arbutil_files) $(prover_direct_includes)
89+
rust_prover_files = $(wildcard $(prover_dir)/src/*.* $(prover_dir)/src/*/*.* $(prover_dir)/*.toml $(prover_dir)/*.rs) $(rust_arbutil_files) $(prover_direct_includes) $(arb_brotli_files)
8890

8991
wasm_lib = arbitrator/wasm-libraries
9092
wasm_lib_cargo = $(wasm_lib)/.cargo/config.toml
91-
wasm_lib_deps = $(wildcard $(wasm_lib)/$(1)/*.toml $(wasm_lib)/$(1)/src/*.rs $(wasm_lib)/$(1)/*.rs) $(wasm_lib_cargo) $(rust_arbutil_files) .make/machines
93+
wasm_lib_deps = $(wildcard $(wasm_lib)/$(1)/*.toml $(wasm_lib)/$(1)/src/*.rs $(wasm_lib)/$(1)/*.rs) $(wasm_lib_cargo) $(rust_arbutil_files) $(arb_brotli_files) .make/machines
9294
wasm_lib_go_abi = $(call wasm_lib_deps,go-abi)
9395
wasm_lib_forward = $(call wasm_lib_deps,forward)
9496
wasm_lib_user_host_trait = $(call wasm_lib_deps,user-host-trait)
@@ -153,6 +155,8 @@ stylus_test_hostio-test_src = $(call get_stylus_test_rust,hostio-test)
153155
stylus_test_wasms = $(stylus_test_keccak_wasm) $(stylus_test_keccak-100_wasm) $(stylus_test_fallible_wasm) $(stylus_test_storage_wasm) $(stylus_test_multicall_wasm) $(stylus_test_log_wasm) $(stylus_test_create_wasm) $(stylus_test_math_wasm) $(stylus_test_sdk-storage_wasm) $(stylus_test_erc20_wasm) $(stylus_test_read-return-data_wasm) $(stylus_test_evm-data_wasm) $(stylus_test_hostio-test_wasm) $(stylus_test_bfs:.b=.wasm)
154156
stylus_benchmarks = $(wildcard $(stylus_dir)/*.toml $(stylus_dir)/src/*.rs) $(stylus_test_wasms)
155157

158+
CBROTLI_WASM_BUILD_ARGS ?=-d
159+
156160
# user targets
157161

158162
.PHONY: push
@@ -169,7 +173,7 @@ build: $(patsubst %,$(output_root)/bin/%, nitro deploy relay daprovider daserver
169173
@printf $(done)
170174

171175
.PHONY: build-node-deps
172-
build-node-deps: $(go_source) build-prover-header build-prover-lib build-jit .make/solgen
176+
build-node-deps: $(go_source) build-prover-header build-prover-lib build-jit .make/solgen .make/cbrotli-lib
173177

174178
.PHONY: test-go-deps
175179
test-go-deps: \
@@ -289,6 +293,7 @@ clean:
289293
rm -f arbitrator/wasm-libraries/soft-float/SoftFloat/build/Wasm-Clang/*.a
290294
rm -f arbitrator/wasm-libraries/forward/*.wat
291295
rm -rf arbitrator/stylus/tests/*/target/ arbitrator/stylus/tests/*/*.wasm
296+
rm -rf brotli/buildfiles
292297
@rm -rf contracts/build contracts/cache solgen/go/
293298
@rm -rf contracts-legacy/build contracts-legacy/cache
294299
@rm -rf contracts-local/out contracts-local/forge-cache
@@ -444,7 +449,7 @@ $(output_latest)/user_test.wasm: $(DEP_PREDICATE) $(call wasm_lib_deps,user-test
444449
install arbitrator/wasm-libraries/$(wasm32_wasi)/user_test.wasm $@
445450
./scripts/remove_reference_types.sh $@
446451

447-
$(output_latest)/arbcompress.wasm: $(DEP_PREDICATE) $(call wasm_lib_deps) $(wasm_lib_go_abi)
452+
$(output_latest)/arbcompress.wasm: $(DEP_PREDICATE) $(call wasm_lib_deps,brotli) $(wasm_lib_go_abi)
448453
cargo build --manifest-path arbitrator/wasm-libraries/Cargo.toml --release --target wasm32-wasip1 --config $(wasm_lib_cargo) --package arbcompress
449454
install arbitrator/wasm-libraries/$(wasm32_wasi)/arbcompress.wasm $@
450455
./scripts/remove_reference_types.sh $@
@@ -618,9 +623,23 @@ contracts/test/prover/proofs/%.json: $(arbitrator_cases)/%.wasm $(prover_bin)
618623
make -C contracts-local install
619624
@touch $@
620625

626+
.make/cbrotli-lib: $(DEP_PREDICATE) $(ORDER_ONLY_PREDICATE) .make
627+
test -f target/include/brotli/encode.h || ./scripts/build-brotli.sh -l
628+
test -f target/include/brotli/decode.h || ./scripts/build-brotli.sh -l
629+
test -f target/lib/libbrotlicommon-static.a || ./scripts/build-brotli.sh -l
630+
test -f target/lib/libbrotlienc-static.a || ./scripts/build-brotli.sh -l
631+
test -f target/lib/libbrotlidec-static.a || ./scripts/build-brotli.sh -l
632+
@touch $@
633+
634+
.make/cbrotli-wasm: $(DEP_PREDICATE) $(ORDER_ONLY_PREDICATE) .make
635+
test -f target/lib-wasm/libbrotlicommon-static.a || ./scripts/build-brotli.sh -w $(CBROTLI_WASM_BUILD_ARGS)
636+
test -f target/lib-wasm/libbrotlienc-static.a || ./scripts/build-brotli.sh -w $(CBROTLI_WASM_BUILD_ARGS)
637+
test -f target/lib-wasm/libbrotlidec-static.a || ./scripts/build-brotli.sh -w $(CBROTLI_WASM_BUILD_ARGS)
638+
@touch $@
639+
621640
.make/wasm-lib: $(DEP_PREDICATE) arbitrator/wasm-libraries/soft-float/SoftFloat/build/Wasm-Clang/softfloat.a $(ORDER_ONLY_PREDICATE) .make
622-
test -f arbitrator/wasm-libraries/soft-float/bindings32.o
623-
test -f arbitrator/wasm-libraries/soft-float/bindings64.o
641+
test -f arbitrator/wasm-libraries/soft-float/bindings32.o || ./scripts/build-brotli.sh -f -d -t ..
642+
test -f arbitrator/wasm-libraries/soft-float/bindings64.o || ./scripts/build-brotli.sh -f -d -t ..
624643
@touch $@
625644

626645
.make/machines: $(DEP_PREDICATE) $(ORDER_ONLY_PREDICATE) .make

arbitrator/brotli/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,11 @@ wasmer = { path = "../tools/wasmer/lib/api", optional = true }
1515
wee_alloc.workspace = true
1616

1717
[build-dependencies]
18-
cc = "1.0"
18+
cc = { version = "1.0", optional = true }
1919

2020
[lib]
2121
crate-type = ["lib"]
2222

2323
[features]
2424
wasmer_traits = ["dep:wasmer"]
25+
cc_brotli = ["dep:cc"]

arbitrator/brotli/build.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,26 @@
11
// Copyright 2021-2024, Offchain Labs, Inc.
22
// For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE.md
3+
#[cfg(not(feature = "cc_brotli"))]
4+
fn main() {
5+
use std::env;
6+
7+
let target_arch = env::var("TARGET").unwrap();
38

4-
use std::env;
5-
use std::path::PathBuf;
9+
if target_arch.contains("wasm32") {
10+
println!("cargo:rustc-link-search=../../target/lib-wasm/");
11+
} else {
12+
println!("cargo:rustc-link-search=../target/lib/");
13+
println!("cargo:rustc-link-search=../../target/lib/");
14+
}
15+
println!("cargo:rustc-link-lib=static=brotlienc-static");
16+
println!("cargo:rustc-link-lib=static=brotlidec-static");
17+
println!("cargo:rustc-link-lib=static=brotlicommon-static");
18+
}
619

20+
#[cfg(feature = "cc_brotli")]
721
fn main() {
22+
use std::env;
23+
use std::path::PathBuf;
824
let manifest_dir = PathBuf::from(env::var_os("CARGO_MANIFEST_DIR").unwrap());
925
let include_dir = manifest_dir.join("../../brotli/c/include");
1026
cc::Build::new()

arbitrator/brotli/config.toml

Whitespace-only changes.

arbitrator/caller-env/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,4 @@ default = ["brotli"]
1515
brotli = ["dep:brotli"]
1616
static_caller = []
1717
wasmer_traits = ["dep:wasmer", "brotli?/wasmer_traits"]
18+
cc_brotli = ["brotli?/cc_brotli"]

arbitrator/jit/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,4 @@ sha2 = "0.9.9"
2525

2626
[features]
2727
llvm = ["dep:wasmer-compiler-llvm"]
28+
cc_brotli = ["brotli/cc_brotli"]

0 commit comments

Comments
 (0)