@@ -3,19 +3,22 @@ INIT_JS ?= test.js
3
3
WIZER ?= wizer
4
4
DESTDIR ?= .
5
5
WASI_SDK ?= /opt/wasi-sdk
6
+ OPENSSL_VERSION = 3.0.7
6
7
7
- CXX_OPT ?= -O2
8
+ OPT_FLAGS ?= -O2
8
9
9
10
DEBUG ?= false
10
11
ifneq ($(DEBUG ) ,false)
11
12
MODE := debug
12
13
CARGO_FLAG :=
13
- CXX_OPT := $( CXX_OPT ) -DDEBUG -DJS_DEBUG -g
14
+ OPT_FLAGS += -DDEBUG -DJS_DEBUG -g
14
15
Q :=
16
+ quiet_flag =
15
17
else
16
18
MODE := release
17
19
CARGO_FLAG := --release
18
20
Q := @
21
+ quiet_flag = $1
19
22
endif
20
23
21
24
ROOT_SRC ?= $(shell dirname $(realpath $(firstword $(MAKEFILE_LIST ) ) ) ) /..
@@ -39,9 +42,13 @@ CXX_FLAGS += -fPIC -fno-rtti -fno-exceptions -fno-math-errno -pipe
39
42
CXX_FLAGS += -fno-omit-frame-pointer -funwind-tables -I$(FSM_SRC )
40
43
CXX_FLAGS += --sysroot=$(WASI_SDK ) /share/wasi-sysroot
41
44
42
- CFLAGS := -Wall -Werror -Wno-unknown-attributes -Wno-pointer-to-int-cast -Wno-int-to-pointer-cast
45
+ CFLAGS := -Wall -Werror -Wno-unknown-attributes -Wno-pointer-to-int-cast
46
+ CFLAGS += -Wno-int-to-pointer-cast --sysroot=$(WASI_SDK ) /share/wasi-sysroot
43
47
44
- LD_FLAGS := -Wl,-z,stack-size=1048576 -Wl,--stack-first -lwasi-emulated-getpid
48
+ LD_FLAGS := -Wl,-z,stack-size=1048576 -Wl,--stack-first
49
+ LD_FLAGS += -lwasi-emulated-signal
50
+ LD_FLAGS += -lwasi-emulated-process-clocks
51
+ LD_FLAGS += -lwasi-emulated-getpid
45
52
46
53
DEFINES ?=
47
54
@@ -54,18 +61,18 @@ DEFINES += -DMOZ_JS_STREAMS
54
61
all : js-compute-runtime.wasm js-compute-runtime-component.wasm | wasi_snapshot_preview1.wasm
55
62
56
63
compiler_flags :
57
- echo ' $(CXX_OPT ) $(CXX_FLAGS)' | cmp -s - $@ || echo ' $(CXX_OPT ) $(CXX_FLAGS)' > $@
64
+ echo ' $(OPT_FLAGS ) $(CXX_FLAGS)' | cmp -s - $@ || echo ' $(OPT_FLAGS ) $(CXX_FLAGS)' > $@
58
65
59
- ifeq (,$(findstring g,$(CXX_OPT ) ) )
66
+ ifeq (,$(findstring g,$(OPT_FLAGS ) ) )
60
67
ifneq (,$(shell which wasm-opt) )
61
68
WASM_STRIP = wasm-opt --strip-debug -o $1 $1
62
69
endif
63
70
endif
64
71
65
- OBJ_DIR := obj/
72
+ OBJ_DIR := obj
66
73
FSM_CPP := $(wildcard $(FSM_SRC ) * .cpp) $(wildcard $(FSM_SRC ) builtins/* .cpp)
67
- FSM_DEP := $(patsubst $(FSM_SRC ) % .cpp,$(OBJ_DIR ) % .d,$(FSM_CPP ) )
68
- FSM_OBJ := $(patsubst $(FSM_SRC ) % .cpp,$(OBJ_DIR ) % .o,$(FSM_CPP ) )
74
+ FSM_DEP := $(patsubst $(FSM_SRC ) % .cpp,$(OBJ_DIR ) / % .d,$(FSM_CPP ) )
75
+ FSM_OBJ := $(patsubst $(FSM_SRC ) % .cpp,$(OBJ_DIR ) / % .o,$(FSM_CPP ) )
69
76
RUST_URL_SRC := $(FSM_SRC ) rust-url
70
77
RUST_URL_RS_FILES := $(shell find $(RUST_URL_SRC ) /src -name '* .rs')
71
78
RUST_URL_LIB := rusturl/wasm32-wasi/$(MODE ) /librust_url.a
@@ -76,34 +83,80 @@ $(RUST_URL_LIB): $(RUST_URL_RS_FILES) $(RUST_URL_SRC)/Cargo.toml $(RUST_URL_SRC)
76
83
cd $(RUST_URL_SRC ) && cbindgen --output rust-url.h
77
84
cargo build --manifest-path $(RUST_URL_SRC ) /Cargo.toml --target-dir ./rusturl --target=wasm32-wasi $(CARGO_FLAG )
78
85
79
- obj :
80
- $Q mkdir -p $(OBJ_DIR ) builtins $(OBJ_DIR ) xqd-world
81
-
82
- $(OBJ_DIR ) % .o : $(FSM_SRC ) % .cpp $(FSM_SRC ) Makefile $(RUST_URL_LIB ) compiler_flags | obj
83
- $(WASI_CXX ) $(CXX_FLAGS ) $(CXX_OPT ) $(DEFINES ) -I $(SM_SRC ) include -MMD -MP -c -o $@ $<
84
-
85
- $(OBJ_DIR ) builtins/% .o : $(FSM_SRC ) builtins/% .cpp $(FSM_SRC ) Makefile $(RUST_URL_LIB ) compiler_flags | obj
86
- $(WASI_CXX ) $(CXX_FLAGS ) $(CXX_OPT ) $(DEFINES ) -I $(SM_SRC ) include -MMD -MP -c -o $@ $<
87
-
88
- $(OBJ_DIR ) xqd-world/xqd_world.o : $(FSM_SRC ) xqd-world/xqd_world.c $(FSM_SRC ) Makefile compiler_flags
89
- $(WASI_CC ) $(CFLAGS ) $(CXX_OPT ) $(DEFINES ) -I $(SM_SRC ) include -MMD -MP -c -o $@ $<
90
-
91
- $(OBJ_DIR ) xqd-world/xqd_world_adapter.o : $(FSM_SRC ) xqd-world/xqd_world_adapter.cpp $(FSM_SRC ) Makefile compiler_flags
92
- $(WASI_CXX ) $(CXX_FLAGS ) $(CXX_OPT ) $(DEFINES ) -I $(SM_SRC ) include -MMD -MP -c -o $@ $<
93
-
94
- $(OBJ_DIR ) xqd-world/xqd_world_adapter_component.o : $(FSM_SRC ) xqd-world/xqd_world_adapter.cpp $(FSM_SRC ) Makefile compiler_flags
95
- $(WASI_CXX ) $(CXX_FLAGS ) $(CXX_OPT ) $(DEFINES ) -DCOMPONENT -I $(SM_SRC ) include -MMD -MP -c -o $@ $<
86
+ $(OBJ_DIR ) :
87
+ $Q mkdir -p $(OBJ_DIR ) /builtins $(OBJ_DIR ) /xqd-world
88
+
89
+ $(OBJ_DIR ) /openssl-$(OPENSSL_VERSION ) .tar.gz : | $(OBJ_DIR )
90
+ $Q wget https://www.openssl.org/source/openssl-$(OPENSSL_VERSION ) .tar.gz \
91
+ $(call quiet_flag,--quiet) -O $@
92
+
93
+ $(OBJ_DIR ) /openssl-$(OPENSSL_VERSION ) /token : $(OBJ_DIR ) /openssl-$(OPENSSL_VERSION ) .tar.gz $(FSM_SRC ) /getuid.patch
94
+ $Q tar -C $(OBJ_DIR ) -xf $<
95
+ $Q patch -d $(OBJ_DIR ) /openssl-$(OPENSSL_VERSION ) -p1 < $(FSM_SRC ) /getuid.patch
96
+ $Q touch $@
97
+
98
+ OPENSSL_OPTS := -static -no-sock -no-asm -no-ui-console -no-egd
99
+ OPENSSL_OPTS += -no-afalgeng -no-tests -no-stdio -no-threads
100
+ OPENSSL_OPTS += -D_WASI_EMULATED_SIGNAL
101
+ OPENSSL_OPTS += -D_WASI_EMULATED_PROCESS_CLOCKS
102
+ OPENSSL_OPTS += -D_WASI_EMULATED_GETPID
103
+ OPENSSL_OPTS += -DHAVE_FORK=0
104
+ OPENSSL_OPTS += -DNO_SYSLOG
105
+ OPENSSL_OPTS += -DNO_CHMOD
106
+ OPENSSL_OPTS += -DOPENSSL_NO_SECURE_MEMORY
107
+ OPENSSL_OPTS += --with-rand-seed=getrandom
108
+ OPENSSL_OPTS += --prefix=$(FSM_SRC ) /$(OBJ_DIR ) /openssl
109
+ OPENSSL_OPTS += --cross-compile-prefix=$(WASI_SDK ) /bin/
110
+ OPENSSL_OPTS += linux-x32
111
+
112
+ OPENSSL_DISABLED_WARNINGS := -Wno-unused-command-line-argument
113
+ OPENSSL_DISABLED_WARNINGS += -Wno-constant-conversion
114
+ OPENSSL_DISABLED_WARNINGS += -Wno-shift-count-overflow
115
+
116
+ $(OBJ_DIR ) /openssl/token : $(OBJ_DIR ) /openssl-$(OPENSSL_VERSION ) /token
117
+ export WASI_SDK_PATH=$(WASI_SDK ) && \
118
+ cd $(OBJ_DIR ) /openssl-$(OPENSSL_VERSION ) && \
119
+ CC=clang \
120
+ CFLAGS=" --sysroot=$( WASI_SDK) /share/wasi-sysroot" \
121
+ ./Configure $(OPENSSL_OPTS ) && \
122
+ $(MAKE ) -j8 && \
123
+ $(MAKE ) install_sw
124
+ touch $@
125
+
126
+ OPENSSL_CFLAGS := -I$(OBJ_DIR ) /openssl/include
127
+ OPENSSL_LIBS := -L$(OBJ_DIR ) /openssl/libx32 -lcrypto
128
+
129
+ $(OBJ_DIR ) /% .o : $(FSM_SRC ) % .cpp $(OBJ_DIR ) /openssl/token $(FSM_SRC ) Makefile $(RUST_URL_LIB ) compiler_flags | $(OBJ_DIR )
130
+ $(WASI_CXX ) $(CXX_FLAGS ) $(OPENSSL_CFLAGS ) $(OPT_FLAGS ) $(DEFINES ) -I $(SM_SRC ) include -MMD -MP -c -o $@ $<
131
+
132
+ $(OBJ_DIR ) /% .o : $(FSM_SRC ) % .c $(FSM_SRC ) Makefile $(RUST_URL_LIB ) compiler_flags | $(OBJ_DIR )
133
+ $(WASI_CC ) $(CFLAGS ) $(OPT_FLAGS ) $(DEFINES ) -I $(SM_SRC ) include -MMD -MP -c -o $@ $<
134
+
135
+ $(OBJ_DIR ) /xqd-world/xqd_world.o : $(FSM_SRC ) xqd-world/xqd_world.c $(FSM_SRC ) Makefile compiler_flags | $(OBJ_DIR )
136
+ $(WASI_CC ) $(CFLAGS ) $(OPT_FLAGS ) $(DEFINES ) -I $(SM_SRC ) include -MMD -MP -c -o $@ $<
137
+
138
+ $(OBJ_DIR ) /xqd-world/xqd_world_adapter.o : $(FSM_SRC ) xqd-world/xqd_world_adapter.cpp $(FSM_SRC ) Makefile compiler_flags | $(OBJ_DIR )
139
+ $(WASI_CXX ) $(CXX_FLAGS ) $(OPT_FLAGS ) $(DEFINES ) -I $(SM_SRC ) include -MMD -MP -c -o $@ $<
140
+
141
+ $(OBJ_DIR ) /xqd-world/xqd_world_adapter_component.o : $(FSM_SRC ) xqd-world/xqd_world_adapter.cpp $(FSM_SRC ) Makefile compiler_flags | $(OBJ_DIR )
142
+ $(WASI_CXX ) $(CXX_FLAGS ) $(OPT_FLAGS ) $(DEFINES ) -DCOMPONENT -I $(SM_SRC ) include -MMD -MP -c -o $@ $<
96
143
97
144
# NOTE: we shadow wasm-opt by adding $(FSM_SRC)/scripts to the path, which
98
145
# includes a script called wasm-opt that immediately exits successfully. See
99
146
# that script for more information about why we do this.
100
147
101
- js-compute-runtime.wasm : $(FSM_OBJ ) $(SM_OBJ ) $(OBJ_DIR ) xqd-world/xqd_world.o $(OBJ_DIR ) xqd-world/xqd_world_adapter.o $(RUST_URL_LIB )
102
- PATH=" $( FSM_SRC) /scripts:$$ PATH" $(WASI_CXX ) $(CXX_FLAGS ) $(CXX_OPT ) $(DEFINES ) $(LD_FLAGS ) -o $@ $^
148
+ js-compute-runtime.wasm : $(FSM_OBJ ) $(SM_OBJ ) $(RUST_URL_LIB )
149
+ js-compute-runtime.wasm : $(OBJ_DIR ) /xqd-world/xqd_world.o
150
+ js-compute-runtime.wasm : $(OBJ_DIR ) /xqd-world/xqd_world_adapter.o
151
+ PATH=" $( FSM_SRC) /scripts:$$ PATH" $(WASI_CXX ) $(CXX_FLAGS ) $(OPT_FLAGS ) \
152
+ $(DEFINES ) $(LD_FLAGS ) $(OPENSSL_LIBS ) -o $@ $^
103
153
$(call WASM_STRIP,$@ )
104
154
105
- js-compute-runtime-component.wasm : $(FSM_OBJ ) $(OBJ_DIR ) xqd-world/xqd_world.o $(OBJ_DIR ) xqd-world/xqd_world_adapter_component.o $(SM_OBJ ) $(RUST_URL_LIB )
106
- PATH=" $( FSM_SRC) /scripts:$$ PATH" $(WASI_CXX ) $(CXX_FLAGS ) $(CXX_OPT ) $(DEFINES ) $(LD_FLAGS ) -o $@ $^
155
+ js-compute-runtime-component.wasm : $(FSM_OBJ ) $(SM_OBJ ) $(RUST_URL_LIB )
156
+ js-compute-runtime-component.wasm : $(OBJ_DIR ) /xqd-world/xqd_world.o
157
+ js-compute-runtime-component.wasm : $(OBJ_DIR ) /xqd-world/xqd_world_adapter_component.o
158
+ PATH=" $( FSM_SRC) /scripts:$$ PATH" $(WASI_CXX ) $(CXX_FLAGS ) $(OPT_FLAGS ) \
159
+ $(DEFINES ) $(LD_FLAGS ) $(OPENSSL_LIBS ) -o $@ $^
107
160
$(call WASM_STRIP,$@ )
108
161
109
162
install : js-compute-runtime.wasm
@@ -119,7 +172,8 @@ clean:
119
172
$(RM ) compile_commands.json $(FSM_OBJ ) xqd-world/xqd_world_component_type.o
120
173
121
174
distclean : clean
122
- $(RM ) $(FSM_DEP ) $(FSM_DEP_COMPONENT ) $(OBJ_DIR ) xqd-world/* .o compiler_flags
175
+ $(RM ) -r $(OBJ_DIR )
176
+ $(RM ) compiler_flags
123
177
124
178
.PHONY : compile_commands.json
125
179
compile_commands.json :
@@ -129,7 +183,7 @@ compile_commands.json:
129
183
echo " $$ sep" ; \
130
184
sep=" ," ; \
131
185
echo " { \" directory\" : \" $( FSM_SRC) \" ," ; \
132
- echo " \" command\" : \" $( WASI_CXX) $( CXX_FLAGS) $( DEFINES) -I $( SM_SRC) include\" ," ; \
186
+ echo " \" command\" : \" $( WASI_CXX) $( CXX_FLAGS) $( OPENSSL_CFLAGS ) $( DEFINES) -I $( SM_SRC) include\" ," ; \
133
187
echo -n " \" file\" : \" $$ {file#$( FSM_SRC) }\" }" ; \
134
188
done ; \
135
189
echo ; \
0 commit comments