Skip to content

Commit fd17c8f

Browse files
authored
chore: Build openssl (#364)
1 parent ac9818f commit fd17c8f

File tree

2 files changed

+98
-32
lines changed

2 files changed

+98
-32
lines changed

c-dependencies/js-compute-runtime/Makefile

Lines changed: 86 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,22 @@ INIT_JS ?= test.js
33
WIZER ?= wizer
44
DESTDIR ?= .
55
WASI_SDK ?= /opt/wasi-sdk
6+
OPENSSL_VERSION = 3.0.7
67

7-
CXX_OPT ?= -O2
8+
OPT_FLAGS ?= -O2
89

910
DEBUG ?= false
1011
ifneq ($(DEBUG),false)
1112
MODE := debug
1213
CARGO_FLAG :=
13-
CXX_OPT := $(CXX_OPT) -DDEBUG -DJS_DEBUG -g
14+
OPT_FLAGS += -DDEBUG -DJS_DEBUG -g
1415
Q :=
16+
quiet_flag =
1517
else
1618
MODE := release
1719
CARGO_FLAG := --release
1820
Q := @
21+
quiet_flag = $1
1922
endif
2023

2124
ROOT_SRC ?= $(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))/..
@@ -39,9 +42,13 @@ CXX_FLAGS += -fPIC -fno-rtti -fno-exceptions -fno-math-errno -pipe
3942
CXX_FLAGS += -fno-omit-frame-pointer -funwind-tables -I$(FSM_SRC)
4043
CXX_FLAGS += --sysroot=$(WASI_SDK)/share/wasi-sysroot
4144

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
4347

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
4552

4653
DEFINES ?=
4754

@@ -54,18 +61,18 @@ DEFINES += -DMOZ_JS_STREAMS
5461
all: js-compute-runtime.wasm js-compute-runtime-component.wasm | wasi_snapshot_preview1.wasm
5562

5663
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)' > $@
5865

59-
ifeq (,$(findstring g,$(CXX_OPT)))
66+
ifeq (,$(findstring g,$(OPT_FLAGS)))
6067
ifneq (,$(shell which wasm-opt))
6168
WASM_STRIP = wasm-opt --strip-debug -o $1 $1
6269
endif
6370
endif
6471

65-
OBJ_DIR := obj/
72+
OBJ_DIR := obj
6673
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))
6976
RUST_URL_SRC := $(FSM_SRC)rust-url
7077
RUST_URL_RS_FILES := $(shell find $(RUST_URL_SRC)/src -name '*.rs')
7178
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)
7683
cd $(RUST_URL_SRC) && cbindgen --output rust-url.h
7784
cargo build --manifest-path $(RUST_URL_SRC)/Cargo.toml --target-dir ./rusturl --target=wasm32-wasi $(CARGO_FLAG)
7885

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 $@ $<
96143

97144
# NOTE: we shadow wasm-opt by adding $(FSM_SRC)/scripts to the path, which
98145
# includes a script called wasm-opt that immediately exits successfully. See
99146
# that script for more information about why we do this.
100147

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 $@ $^
103153
$(call WASM_STRIP,$@)
104154

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 $@ $^
107160
$(call WASM_STRIP,$@)
108161

109162
install: js-compute-runtime.wasm
@@ -119,7 +172,8 @@ clean:
119172
$(RM) compile_commands.json $(FSM_OBJ) xqd-world/xqd_world_component_type.o
120173

121174
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
123177

124178
.PHONY: compile_commands.json
125179
compile_commands.json:
@@ -129,7 +183,7 @@ compile_commands.json:
129183
echo "$$sep"; \
130184
sep=","; \
131185
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\","; \
133187
echo -n " \"file\": \"$${file#$(FSM_SRC)}\"}"; \
134188
done; \
135189
echo; \
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
diff --color -ru openssl-3.0.7/crypto/uid.c openssl-3.0.7-orig/crypto/uid.c
2+
--- a/crypto/uid.c 2023-01-09 17:00:00.094912576 -0800
3+
+++ b/crypto/uid.c 2022-11-01 07:14:36.000000000 -0700
4+
@@ -10,7 +10,7 @@
5+
#include <openssl/crypto.h>
6+
#include <openssl/opensslconf.h>
7+
8+
-#if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_UEFI)
9+
+#if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_UEFI) || defined(__wasi__)
10+
11+
int OPENSSL_issetugid(void)
12+
{

0 commit comments

Comments
 (0)