-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMakefile
59 lines (42 loc) · 2.55 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# Project-specific settings
PROJECT := evoke
EMP_DIR := ../Empirical/include/
# Flags to use regardless of compiler
CFLAGS_all := -Wall -Wno-unused-function -std=c++17 -I$(EMP_DIR)/
# Native compiler information
CXX_nat := g++
CFLAGS_nat := -O3 -DNDEBUG $(CFLAGS_all)
CFLAGS_nat_debug := -g $(CFLAGS_all)
# Emscripten compiler information
CXX_web := emcc
OFLAGS_web_all := -s "EXTRA_EXPORTED_RUNTIME_METHODS=['ccall', 'cwrap']" -s TOTAL_MEMORY=67108864 --js-library $(EMP_DIR)/web/library_emp.js -s EXPORTED_FUNCTIONS="['_main', '_empCppCallback']" -s DISABLE_EXCEPTION_CATCHING=1 -s NO_EXIT_RUNTIME=1 #--embed-file configs
OFLAGS_web := -Oz -DNDEBUG
OFLAGS_web_debug := -g4 -Oz -Wno-dollar-in-identifier-extension
CFLAGS_web := $(CFLAGS_all) $(OFLAGS_web) $(OFLAGS_web_all)
CFLAGS_web_debug := $(CFLAGS_all) $(OFLAGS_web_debug) $(OFLAGS_web_all)
default: $(PROJECT)
native: $(PROJECT)
web: $(PROJECT).js
all: $(PROJECT) $(PROJECT).js
# CFLAGS_web := $(CFLAGS_all) $(OFLAGS_web) --js-library ../Empirical/include/emp/web/library_emp.js -s EXPORTED_FUNCTIONS="['_main', '_empCppCallback']" -s "EXPORTED_RUNTIME_METHODS=['ccall', 'cwrap']" -s DISABLE_EXCEPTION_CATCHING=1 -s NO_EXIT_RUNTIME=1 --embed-file configs
debug: CFLAGS_nat := $(CFLAGS_nat_debug)
debug: $(PROJECT)
debug-web: CFLAGS_web := $(CFLAGS_web_debug)
debug-web: $(PROJECT).js
web-debug: debug-web
$(PROJECT): source/drivers/command_line.cc
$(CXX_nat) $(CFLAGS_nat) source/drivers/command_line.cc -o $(PROJECT)
@echo To build the web version use: make web
$(PROJECT).js: source/drivers/html.cc
$(CXX_web) $(CFLAGS_web) source/drivers/html.cc -o web/$(PROJECT).js
.PHONY: clean test serve
serve:
python3 -m http.server
clean:
rm -f $(PROJECT) web/$(PROJECT).js web/*.js.map web/*.js.map *~ source/*.o web/*.wasm web/*.wast
test: debug debug-web
./evoke | grep -q 'Hello, world!' && echo 'matched!' || exit 1
npm install
echo "const puppeteer = require('puppeteer'); var express = require('express'); var app = express(); app.use(express.static('web')); app.listen(3000); express.static.mime.types['wasm'] = 'application/wasm'; function sleep(millis) { return new Promise(resolve => setTimeout(resolve, millis)); } async function run() { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('http://localhost:3000/evoke.html'); await sleep(1000); const html = await page.content(); console.log(html); browser.close(); process.exit(0); } run();" | node | tr -d '\n' | grep -q "Each circle" && echo "matched!" || exit 1
# Debugging information
print-%: ; @echo '$(subst ','\'',$*=$($*))'