Makefile 3.25 KB
Newer Older
1 2
ROOTDIR = $(CURDIR)

3
.PHONY: clean all test doc pylint cpplint lint\
4
	 cython cython2 cython3 web runtime vta
5

ziheng committed
6 7 8 9 10 11 12 13
ifndef DMLC_CORE_PATH
  DMLC_CORE_PATH = $(ROOTDIR)/dmlc-core
endif

ifndef DLPACK_PATH
  DLPACK_PATH = $(ROOTDIR)/dlpack
endif

14
INCLUDE_FLAGS = -Iinclude -I$(DLPACK_PATH)/include -I$(DMLC_CORE_PATH)/include
15
PKG_CFLAGS = -std=c++11 -Wall -O2 $(INCLUDE_FLAGS) -fPIC
16
PKG_LDFLAGS =
17

18

19 20
all:
	@mkdir -p build && cd build && cmake .. && $(MAKE)
21

22 23
runtime:
	@mkdir -p build && cd build && cmake .. && $(MAKE) runtime
24

25 26 27
vta:
	@mkdir -p build && cd build && cmake .. && $(MAKE) vta

28 29
cpptest:
	@mkdir -p build && cd build && cmake .. && $(MAKE) cpptest
30

31 32 33 34 35 36 37
# EMCC; Web related scripts
EMCC_FLAGS= -std=c++11 -DDMLC_LOG_STACK_TRACE=0\
	-Oz -s RESERVED_FUNCTION_POINTERS=2 -s MAIN_MODULE=1 -s NO_EXIT_RUNTIME=1\
	-s TOTAL_MEMORY=1073741824\
	-s EXTRA_EXPORTED_RUNTIME_METHODS="['cwrap','getValue','setValue','addFunction']"\
	-s USE_GLFW=3 -s USE_WEBGL2=1 -lglfw\
	$(INCLUDE_FLAGS)
tqchen committed
38

39
web: build/libtvm_web_runtime.js build/libtvm_web_runtime.bc
tqchen committed
40

41
build/libtvm_web_runtime.bc: web/web_runtime.cc
42 43
	@mkdir -p build/web
	@mkdir -p $(@D)
44
	emcc $(EMCC_FLAGS) -MM -MT build/libtvm_web_runtime.bc $< >build/web/web_runtime.d
45 46
	emcc $(EMCC_FLAGS) -o $@ web/web_runtime.cc

47
build/libtvm_web_runtime.js: build/libtvm_web_runtime.bc
48
	@mkdir -p $(@D)
49
	emcc $(EMCC_FLAGS) -o $@ build/libtvm_web_runtime.bc
50

51
# Lint scripts
52
cpplint:
53
	python3 dmlc-core/scripts/lint.py vta cpp vta/include vta/src
54 55 56
	python3 dmlc-core/scripts/lint.py topi cpp topi/include;
	python3 dmlc-core/scripts/lint.py nnvm cpp nnvm/include nnvm/src;
	python3 dmlc-core/scripts/lint.py tvm cpp include src verilog\
57
	 examples/extension/src examples/graph_executor/src
58 59

pylint:
60 61 62
	python3 -m pylint python/tvm --rcfile=$(ROOTDIR)/tests/lint/pylintrc
	python3 -m pylint topi/python/topi --rcfile=$(ROOTDIR)/tests/lint/pylintrc
	python3 -m pylint nnvm/python/nnvm --rcfile=$(ROOTDIR)/tests/lint/pylintrc
63
	python3 -m pylint vta/python/vta --rcfile=$(ROOTDIR)/tests/lint/pylintrc
64

65
jnilint:
66
	python3 dmlc-core/scripts/lint.py tvm4j-jni cpp jvm/native/src
67 68

lint: cpplint pylint jnilint
tqchen committed
69

70 71 72
doc:
	doxygen docs/Doxyfile

73 74 75 76 77 78 79 80 81 82 83
# Cython build
cython:
	cd python; python setup.py build_ext --inplace

cython2:
	cd python; python2 setup.py build_ext --inplace

cython3:
	cd python; python3 setup.py build_ext --inplace

cyclean:
84
	rm -rf python/tvm/*/*/*.so python/tvm/*/*/*.dylib python/tvm/*/*/*.cpp
85

86 87
# JVM build rules
ifeq ($(OS),Windows_NT)
88 89
  JVM_PKG_PROFILE := windows
  SHARED_LIBRARY_SUFFIX := dll
90
else
91 92 93 94 95 96 97 98
  UNAME_S := $(shell uname -s)
  ifeq ($(UNAME_S), Darwin)
    JVM_PKG_PROFILE := osx-x86_64
    SHARED_LIBRARY_SUFFIX := dylib
  else
    JVM_PKG_PROFILE := linux-x86_64
    SHARED_LIBRARY_SUFFIX := so
  endif
99 100 101 102
endif

JVM_TEST_ARGS := $(if $(JVM_TEST_ARGS),$(JVM_TEST_ARGS),-DskipTests -Dcheckstyle.skip=true)

103 104 105
jvmpkg:
	(cd $(ROOTDIR)/jvm; \
		mvn clean package -P$(JVM_PKG_PROFILE) -Dcxx="$(CXX)" \
106 107
			-Dcflags="$(PKG_CFLAGS)" -Dldflags="$(PKG_LDFLAGS)" \
			-Dcurrent_libdir="$(ROOTDIR)/build" $(JVM_TEST_ARGS))
Yizhi Liu committed
108 109 110
jvminstall:
	(cd $(ROOTDIR)/jvm; \
		mvn install -P$(JVM_PKG_PROFILE) -Dcxx="$(CXX)" \
111 112
			-Dcflags="$(PKG_CFLAGS)" -Dldflags="$(PKG_LDFLAGS)" \
			-Dcurrent_libdir="$(ROOTDIR)/build" $(JVM_TEST_ARGS))
113

114
# clean rule
tqchen committed
115
clean:
116
	@mkdir -p build && cd build && cmake .. && $(MAKE) clean