@@ -37,9 +37,10 @@ export LUA_PATH
37
37
.PHONY : all clean clean-submodules distclean install uninstall \
38
38
deps all-deps llvm-deps haskell-deps repo-deps system-deps k-deps ocaml-deps plugin-deps libsecp256k1 libff \
39
39
build build-ocaml build-java build-node build-llvm build-web3 split-tests \
40
- defn java-defn ocaml-defn node-defn haskell-defn llvm-defn \
40
+ defn java-defn ocaml-defn node-defn web3-defn haskell-defn llvm-defn \
41
41
test test-all test-conformance test-slow-conformance test-all-conformance \
42
42
test-vm test-slow-vm test-all-vm test-bchain test-slow-bchain test-all-bchain \
43
+ test-web3 \
43
44
test-prove test-klab-prove test-parse test-failure \
44
45
test-interactive test-interactive-help test-interactive-run test-interactive-prove test-interactive-search test-interactive-firefly \
45
46
media media-pdf sphinx metropolis-theme
@@ -156,20 +157,18 @@ LLVM_KOMPILE_OPTS:=
156
157
ocaml_kompiled: =$(DEFN_DIR ) /ocaml/$(MAIN_DEFN_FILE ) -kompiled/interpreter
157
158
java_kompiled: =$(DEFN_DIR ) /java/$(MAIN_DEFN_FILE ) -kompiled/timestamp
158
159
node_kompiled: =$(DEFN_DIR ) /vm/kevm-vm
160
+ web3_kompiled: =$(DEFN_DIR ) /web3/kevm-client
159
161
haskell_kompiled: =$(DEFN_DIR ) /haskell/$(MAIN_DEFN_FILE ) -kompiled/definition.kore
160
162
llvm_kompiled: =$(DEFN_DIR ) /llvm/$(MAIN_DEFN_FILE ) -kompiled/interpreter
161
163
162
164
build : build-ocaml build-java
163
165
build-ocaml : $(ocaml_kompiled )
164
166
build-java : $(java_kompiled )
165
167
build-node : $(node_kompiled )
168
+ build-web3 : $(web3_kompiled )
166
169
build-haskell : $(haskell_kompiled )
167
170
build-llvm : $(llvm_kompiled )
168
171
169
- build-web3 : MAIN_MODULE=WEB3
170
- build-web3 : MAIN_DEFN_FILE=web3
171
- build-web3 : $(llvm_kompiled )
172
-
173
172
# Tangle definition from *.md files
174
173
175
174
concrete_tangle: =.k:not(.node):not(.symbolic),.standalone,.concrete
@@ -185,14 +184,16 @@ llvm_files=$(patsubst %, $(DEFN_DIR)/llvm/%, $(ALL_K_FILES))
185
184
java_files =$(patsubst % , $(DEFN_DIR ) /java/% , $(ALL_K_FILES ) )
186
185
haskell_files =$(patsubst % , $(DEFN_DIR ) /haskell/% , $(ALL_K_FILES ) )
187
186
node_files =$(patsubst % , $(DEFN_DIR ) /node/% , $(ALL_K_FILES ) )
188
- defn_files =$(ocaml_files ) $(llvm_file ) $(java_files ) $(haskell_files ) $(node_files )
187
+ web3_files =$(patsubst % , $(DEFN_DIR ) /web3/% , $(ALL_K_FILES ) )
188
+ defn_files =$(ocaml_files ) $(llvm_file ) $(java_files ) $(haskell_files ) $(node_files ) $(web3_files )
189
189
190
190
defn : $(defn_files )
191
191
ocaml-defn : $(ocaml_files )
192
192
llvm-defn : $(llvm_files )
193
193
java-defn : $(java_files )
194
194
haskell-defn : $(haskell_files )
195
195
node-defn : $(node_files )
196
+ web3-defn : $(web3_files )
196
197
197
198
$(DEFN_DIR ) /ocaml/% .k : % .md $(TANGLER )
198
199
@echo " == tangle: $@ "
@@ -219,6 +220,11 @@ $(DEFN_DIR)/node/%.k: %.md $(TANGLER)
219
220
mkdir -p $(dir $@ )
220
221
pandoc --from markdown --to " $( TANGLER) " --metadata=code:" $( node_tangle) " $< > $@
221
222
223
+ $(DEFN_DIR ) /web3/% .k : % .md $(TANGLER )
224
+ @echo " == tangle: $@ "
225
+ mkdir -p $(dir $@ )
226
+ pandoc --from markdown --to " $( TANGLER) " --metadata=code:" $( node_tangle) " $< > $@
227
+
222
228
# Java Backend
223
229
224
230
$(java_kompiled ) : $(java_files )
@@ -309,13 +315,36 @@ $(DEFN_DIR)/node/$(MAIN_DEFN_FILE)-kompiled/plugin/proto/msg.pb.cc: $(PLUGIN_SUB
309
315
310
316
$(node_kompiled ) : $(DEFN_DIR ) /node/$(MAIN_DEFN_FILE ) -kompiled/interpreter $(libff_out )
311
317
mkdir -p $(DEFN_DIR ) /vm
312
- $(K_BIN ) /llvm-kompile $(DEFN_DIR ) /node/$(MAIN_DEFN_FILE ) -kompiled/definition.kore $(DEFN_DIR ) /node/$(MAIN_DEFN_FILE ) -kompiled/dt library $(PLUGIN_SUBMODULE ) /vm-c/main.cpp $(PLUGIN_SUBMODULE ) /vm-c/vm.cpp \
318
+ $(K_BIN ) /llvm-kompile $(DEFN_DIR ) /node/$(MAIN_DEFN_FILE ) -kompiled/definition.kore $(DEFN_DIR ) /node/$(MAIN_DEFN_FILE ) -kompiled/dt library $(PLUGIN_SUBMODULE ) /vm-c/init.cpp $( PLUGIN_SUBMODULE ) /vm-c/ main.cpp $(PLUGIN_SUBMODULE ) /vm-c/vm.cpp \
313
319
$(PLUGIN_SUBMODULE ) /plugin-c/* .cpp $(DEFN_DIR ) /node/$(MAIN_DEFN_FILE ) -kompiled/plugin/proto/msg.pb.cc $(PLUGIN_SUBMODULE ) /vm-c/kevm/semantics.cpp -o $@ -g -O2 \
314
320
-I $(PLUGIN_SUBMODULE ) /plugin-c/ -I $(DEFN_DIR ) /node/$(MAIN_DEFN_FILE ) -kompiled/plugin -I $(PLUGIN_SUBMODULE ) /vm-c/ -I $(PLUGIN_SUBMODULE ) /vm-c/kevm/ -I node/ \
315
321
$(LLVM_KOMPILE_OPTS ) \
316
322
-L$(LIBRARY_PATH ) \
317
323
-lff -lprotobuf -lgmp $(LINK_PROCPS ) -lcryptopp -lsecp256k1
318
324
325
+ # Web3 Backend
326
+
327
+ $(DEFN_DIR ) /web3/web3-kompiled/interpreter : $(web3_files ) $(libff_out )
328
+ @echo " == kompile: $@ "
329
+ $(K_BIN ) /kompile --debug --main-module WEB3 --backend llvm \
330
+ --syntax-module WEB3 $(DEFN_DIR ) /web3/web3.k \
331
+ --directory $(DEFN_DIR ) /web3 -I $(DEFN_DIR ) /web3 \
332
+ --hook-namespaces " KRYPTO BLOCKCHAIN JSON" \
333
+ --iterated \
334
+ $(KOMPILE_OPTS ) \
335
+ -ccopt $(PLUGIN_SUBMODULE ) /plugin-c/crypto.cpp -ccopt $(PLUGIN_SUBMODULE ) /client-c/json.cpp \
336
+ -ccopt -L$(LIBRARY_PATH ) -ccopt -I -ccopt $(PLUGIN_SUBMODULE ) /vm-c \
337
+ -ccopt -lff -ccopt -lcryptopp -ccopt -lsecp256k1 $(addprefix -ccopt ,$(LINK_PROCPS ) ) -ccopt -g -ccopt -std=c++11 -ccopt -O2
338
+
339
+ $(web3_kompiled ) : $(DEFN_DIR ) /web3/web3-kompiled/interpreter $(libff_out )
340
+ mkdir -p $(DEFN_DIR ) /web3
341
+ $(K_BIN ) /llvm-kompile $(DEFN_DIR ) /web3/web3-kompiled/definition.kore $(DEFN_DIR ) /web3/web3-kompiled/dt library $(PLUGIN_SUBMODULE ) /vm-c/init.cpp $(PLUGIN_SUBMODULE ) /client-c/main.cpp $(PLUGIN_SUBMODULE ) /client-c/json.cpp \
342
+ $(PLUGIN_SUBMODULE ) /plugin-c/crypto.cpp -o $@ -g -O2 \
343
+ -I $(PLUGIN_SUBMODULE ) /vm-c/ -I $(PLUGIN_SUBMODULE ) /plugin-c/ -I node/ \
344
+ $(LLVM_KOMPILE_OPTS ) \
345
+ -L$(LIBRARY_PATH ) \
346
+ -lff -lgmp $(LINK_PROCPS ) -lcryptopp -lsecp256k1
347
+
319
348
# LLVM Backend
320
349
321
350
$(llvm_kompiled ) : $(llvm_files ) $(libff_out )
@@ -390,6 +419,16 @@ tests/%.run-expected: tests/% tests/%.expected
390
419
|| $(CHECK ) tests/$* .expected tests/$* .$(TEST_CONCRETE_BACKEND ) -out
391
420
rm -rf tests/$* .$(TEST_CONCRETE_BACKEND ) -out
392
421
422
+ tests/% .run-web3 : tests/% .in.json
423
+ PORT=` tests/web3/get_port.py` ; \
424
+ ./kevm web3 -p $$ PORT & \
425
+ while ! netcat -z 127.0.0.1 $$ PORT; do \
426
+ sleep 0.1; \
427
+ done ; \
428
+ cat $^ | netcat 127.0.0.1 $$ PORT -q 0 | diff - tests/$* .out.json; RESULT=$$? ; \
429
+ pkill kevm-client -P $$$$ ; \
430
+ [ $$ ? -eq 0 ]
431
+
393
432
tests/% .parse : tests/%
394
433
$(TEST ) kast --backend $(TEST_CONCRETE_BACKEND ) $< kast > $@ -out
395
434
$(CHECK ) $@ -expected $@ -out
@@ -443,10 +482,14 @@ failing_bchain_tests=$(shell cat tests/failing.$(TEST_CONCRETE_BACKEND))
443
482
all_bchain_tests =$(filter-out $(bad_bchain_tests ) , $(filter-out $(failing_bchain_tests ) , $(bchain_tests ) ) )
444
483
quick_bchain_tests =$(filter-out $(slow_bchain_tests ) , $(all_bchain_tests ) )
445
484
485
+ web3_tests =$(wildcard tests/web3/* .in.json)
486
+
446
487
test-all-bchain : $(all_bchain_tests:=.run )
447
488
test-slow-bchain : $(slow_bchain_tests:=.run )
448
489
test-bchain : $(quick_bchain_tests:=.run )
449
490
491
+ test-web3 : $(web3_tests:.in.json=.run-web3 )
492
+
450
493
# Proof Tests
451
494
452
495
prove_specs_dir: =tests/specs
0 commit comments