forked from microsoft/pict
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
88 lines (72 loc) · 3.26 KB
/
Copy pathMakefile
File metadata and controls
88 lines (72 loc) · 3.26 KB
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# To use another compiler, such clang++, set the CXX variable
# CXX=clang++
# variables used to generate a source snapshot of the GIT repo
COMMIT=$(shell git log --pretty=format:'%H' -n 1)
SHORT_COMMIT=$(shell git log --pretty=format:'%h' -n 1)
CXXFLAGS=-fPIC -pipe -std=c++11 -O2 -Iapi
TARGET=pict
TARGET_BENCH=pict-benchmark
TARGET_LIB_SO=libpict.so
TEST_OUTPUT = test/rel.log test/rel.log.failures test/dbg.log
TEST_OUTPUT += test/.stdout test/.stderr
OBJS = $(OBJS_API) $(OBJS_CLI)
OBJS_BENCH = benchmark/pict_benchmark.o $(OBJS_API)
OBJS_API = api/combination.o api/deriver.o api/exclusion.o
OBJS_API += api/model.o api/parameter.o api/pictapi.o
OBJS_API += api/task.o api/worklist.o
OBJS_CLI = cli/ccommon.o cli/cmdline.o
OBJS_CLI += cli/common.o cli/cparser.o cli/ctokenizer.o cli/gcd.o
OBJS_CLI += cli/gcdexcl.o cli/gcdmodel.o cli/model.o cli/mparser.o
OBJS_CLI += cli/pict.o cli/strings.o
IMAGE := pict:latest
# WebAssembly Settings
EXX=em++
WASM_OPTIMIZATION_LEVEL=-Oz
EXXFLAGS=-std=c++11 -Iapi -flto -fwasm-exceptions $(WASM_OPTIMIZATION_LEVEL) -sSTRICT=1
EXXLINKFLAGS=-flto -fwasm-exceptions $(WASM_OPTIMIZATION_LEVEL) --emit-tsd=$(TARGET_TSD) -sSTRICT=1
EXXLINKFLAGS+=-sALLOW_MEMORY_GROWTH=1 -sMALLOC=emmalloc -sWASMFS=1 -sFORCE_FILESYSTEM=1
EXXLINKFLAGS+=-sMODULARIZE=1 -sEXPORT_NAME=createModule -sEXPORT_ES6=1 -sINVOKE_RUN=0
EXXLINKFLAGS+=-sINCOMING_MODULE_JS_API=print,printErr
EXXLINKFLAGS+=-sEXPORTED_RUNTIME_METHODS=callMain,FS
TARGET_WASM_DIR=dist
TARGET_JS=pict.js
TARGET_TSD=pict.d.ts
WASM_WORK_DIR=wasm-work
WASM_OBJS=$(WASM_OBJS_API) $(WASM_OBJS_CLI)
WASM_OBJS_API=$(WASM_WORK_DIR)/api/combination.o $(WASM_WORK_DIR)/api/deriver.o $(WASM_WORK_DIR)/api/exclusion.o
WASM_OBJS_API+=$(WASM_WORK_DIR)/api/model.o $(WASM_WORK_DIR)/api/parameter.o $(WASM_WORK_DIR)/api/pictapi.o
WASM_OBJS_API+=$(WASM_WORK_DIR)/api/task.o $(WASM_WORK_DIR)/api/worklist.o
WASM_OBJS_CLI=$(WASM_WORK_DIR)/cli/ccommon.o $(WASM_WORK_DIR)/cli/cmdline.o
WASM_OBJS_CLI+=$(WASM_WORK_DIR)/cli/common.o $(WASM_WORK_DIR)/cli/cparser.o $(WASM_WORK_DIR)/cli/ctokenizer.o $(WASM_WORK_DIR)/cli/gcd.o
WASM_OBJS_CLI+=$(WASM_WORK_DIR)/cli/gcdexcl.o $(WASM_WORK_DIR)/cli/gcdmodel.o $(WASM_WORK_DIR)/cli/model.o $(WASM_WORK_DIR)/cli/mparser.o
WASM_OBJS_CLI+=$(WASM_WORK_DIR)/cli/pict.o $(WASM_WORK_DIR)/cli/strings.o
pict: $(OBJS)
$(CXX) $(OBJS) -o $(TARGET)
$(TARGET_BENCH): $(OBJS_BENCH)
$(CXX) $(OBJS_BENCH) -o $(TARGET_BENCH)
$(TARGET_LIB_SO): $(OBJS)
$(CXX) -fPIC -shared $(OBJS) -o $(TARGET_LIB_SO)
test: $(TARGET)
cd test; perl test.pl ../$(TARGET) rel.log
clean:
rm -f $(TARGET) $(TARGET_BENCH) $(TARGET_LIB_SO) $(TEST_OUTPUT) $(OBJS) $(OBJS_BENCH)
all: pict $(TARGET_BENCH) $(TARGET_LIB_SO)
source: clean
git archive --prefix="pict-$(COMMIT)/" -o "pict-$(SHORT_COMMIT).tar.gz" $(COMMIT)
.PHONY: all test clean source
image-build:
@podman build --layers=true -t $(IMAGE) .
image-run:
@podman run -it --rm -v ./doc/sample-models:/var/pict:Z $(IMAGE) create_volume.txt
# WebAssembly Build
wasm-prepare:
mkdir -p $(WASM_WORK_DIR)/api
mkdir -p $(WASM_WORK_DIR)/cli
mkdir -p $(TARGET_WASM_DIR)
$(WASM_WORK_DIR)/%.o: %.cpp
$(EXX) $(EXXFLAGS) -c $(OUTPUT_OPTION) $<
wasm: wasm-prepare $(WASM_OBJS)
$(EXX) $(WASM_OBJS) $(EXXLINKFLAGS) -o $(TARGET_WASM_DIR)/$(TARGET_JS)
wasm-clean:
rm -rf $(WASM_WORK_DIR)
rm -rf $(TARGET_WASM_DIR)