# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. ROOTDIR = $(CURDIR) ifndef config ifneq ("$(wildcard ./config.mk)", "") config = config.mk else config = make/config.mk endif endif include $(config) TVMPATH = .. export LDFLAGS = -pthread -lm export CFLAGS = -std=c++11 -Wall -O2 -Iinclude -fPIC ifdef DMLC_CORE_PATH CFLAGS += -I$(DMLC_CORE_PATH)/include else CFLAGS += -I$(TVMPATH)/3rdparty/dmlc-core/include endif ifneq ($(ADD_CFLAGS), NONE) CFLAGS += $(ADD_CFLAGS) endif ifneq ($(ADD_LDFLAGS), NONE) LDFLAGS += $(ADD_LDFLAGS) endif # plugin PLUGIN_OBJ = include $(NNVM_PLUGINS) # specify tensor path .PHONY: clean all test lint cpplint pylint doc cython cython3 cyclean UNAME_S := $(shell uname -s) ifeq ($(UNAME_S), Darwin) SHARED_LIBRARY_SUFFIX := dylib WHOLE_ARCH= -all_load NO_WHOLE_ARCH= -noall_load LDFLAGS += -undefined dynamic_lookup else SHARED_LIBRARY_SUFFIX := so WHOLE_ARCH= --whole-archive NO_WHOLE_ARCH= --no-whole-archive endif all: lib/libnnvm.a lib/libnnvm.$(SHARED_LIBRARY_SUFFIX) SRC = $(wildcard src/*.cc src/c_api/*.cc src/core/*.cc src/pass/*.cc) SRC_COMPILER = $(wildcard src/top/*/*.cc wildcard src/top/vision/*/*.cc src/compiler/*.cc src/compiler/*/*.cc) ALL_OBJ = $(patsubst %.cc, build/%.o, $(SRC)) TOP_OBJ = $(patsubst %.cc, build/%.o, $(SRC_COMPILER)) ALL_DEP = $(ALL_OBJ) include tests/cpp/unittest.mk test: $(TEST) build/src/%.o: src/%.cc @mkdir -p $(@D) $(CXX) $(CFLAGS) -MM -MT build/src/$*.o $< >build/src/$*.d $(CXX) -c $(CFLAGS) -c $< -o $@ lib/libnnvm.a: $(ALL_DEP) @mkdir -p $(@D) $(AR) crv $@ $(filter %.o, $?) lib/libnnvm.$(SHARED_LIBRARY_SUFFIX): lib/libnnvm.a ${TOP_OBJ} @mkdir -p $(@D) $(CXX) $(CFLAGS) -shared -o $@ $(filter %.o, $^) $(LDFLAGS) -Wl,${WHOLE_ARCH} lib/libnnvm.a -Wl,${NO_WHOLE_ARCH} cython: cd python; python setup.py build_ext --inplace cython3: cd python; python3 setup.py build_ext --inplace cyclean: rm -rf python/nnvm/*/*.so python/nnvm/*/*.dylib python/nnvm/*/*.cpp lint: pylint cpplint doc: doxygen docs/Doxyfile cpplint: python ../dmlc-core/scripts/lint.py nnvm cpp include src pylint: pylint python/nnvm --rcfile=$(ROOTDIR)/tests/lint/pylintrc clean: $(RM) -rf build lib bin *~ */*~ */*/*~ */*/*/*~ */*.o */*/*.o */*/*/*.o cli_test -include build/*.d -include build/*/*.d -include build/*/*/*.d -include build/*/*/*/*.d