| # 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. |
| |
| |
| .PHONY: all \ |
| runtime vta cpptest crttest \ |
| lint pylint cpplint scalalint \ |
| cppdoc docs \ |
| web webclean \ |
| cython cython3 cyclean \ |
| clean |
| |
| .SECONDEXPANSION: |
| |
| # Remember the root directory, to be usable by submake invocation. |
| ROOTDIR = $(CURDIR) |
| |
| # Specify an alternate output directory relative to ROOTDIR. Defaults |
| # to "build". Can also be a space-separated list of build |
| # directories, each with a different configuation. |
| TVM_BUILD_PATH ?= build |
| TVM_BUILD_PATH := $(abspath $(TVM_BUILD_PATH)) |
| |
| # Allow environment variables for 3rd-party libraries, default to |
| # packaged version. |
| DMLC_CORE_PATH ?= $(ROOTDIR)/3rdparty/dmlc-core |
| DLPACK_PATH ?= $(ROOTDIR)/3rdparty/dlpack |
| VTA_HW_PATH ?= $(ROOTDIR)/3rdparty/vta-hw |
| |
| |
| |
| |
| all: $(addsuffix /all,$(TVM_BUILD_PATH)) |
| |
| runtime: $(addsuffix /runtime,$(TVM_BUILD_PATH)) |
| vta: $(addsuffix /vta,$(TVM_BUILD_PATH)) |
| cpptest: $(addsuffix /cpptest,$(TVM_BUILD_PATH)) |
| crttest: $(addsuffix /crttest,$(TVM_BUILD_PATH)) |
| |
| # If there is a config.cmake in the tvm directory, preferentially use |
| # it. Otherwise, copy the default cmake/config.cmake. |
| ifeq ($(wildcard config.cmake),config.cmake) |
| %/config.cmake: | config.cmake |
| @echo "No config.cmake found in $(TVM_BUILD_PATH), using config.cmake in root tvm directory" |
| @mkdir -p $(@D) |
| else |
| # filter-out used to avoid circular dependency |
| %/config.cmake: | $$(filter-out %/config.cmake,$(ROOTDIR)/cmake/config.cmake) |
| @echo "No config.cmake found in $(TVM_BUILD_PATH), using default config.cmake" |
| @mkdir -p $(@D) |
| @cp $| $@ |
| endif |
| |
| |
| # Cannot use .PHONY with a pattern rule, using FORCE instead. For |
| # now, force cmake to be re-run with each compile to mimic previous |
| # behavior. This may be relaxed in the future with the |
| # CONFIGURE_DEPENDS option for GLOB (requres cmake >= 3.12). |
| FORCE: |
| %/CMakeCache.txt: %/config.cmake FORCE |
| @cd $(@D) && cmake $(ROOTDIR) |
| |
| |
| # Since the pattern stem is already being used for the directory name, |
| # cannot also have it refer to the command passed to cmake. |
| # Therefore, explicitly listing out the delegated. |
| CMAKE_TARGETS = all runtime vta cpptest crttest clean |
| |
| define GEN_CMAKE_RULE |
| %/$(CMAKE_TARGET): %/CMakeCache.txt FORCE |
| @$$(MAKE) -C $$(@D) $(CMAKE_TARGET) |
| endef |
| $(foreach CMAKE_TARGET,$(CMAKE_TARGETS),$(eval $(GEN_CMAKE_RULE))) |
| |
| |
| |
| # Dev tools for formatting, linting, and documenting. NOTE: lint |
| # scripts that are executed in the CI should be in tests/lint. This |
| # allows docker/lint.sh to behave similarly to the CI. |
| format: |
| ./tests/lint/git-clang-format.sh -i --rev origin/main |
| black . |
| cd rust && which cargo && cargo fmt --all |
| |
| lint: cpplint pylint jnilint |
| |
| cpplint: |
| tests/lint/cpplint.sh |
| |
| pylint: |
| tests/lint/pylint.sh |
| |
| jnilint: |
| python3 3rdparty/dmlc-core/scripts/lint.py tvm4j-jni cpp jvm/native/src |
| |
| scalalint: |
| make -C $(VTA_HW_PATH)/hardware/chisel lint |
| |
| |
| mypy: |
| tests/scripts/task_mypy.sh |
| |
| cppdoc: |
| doxygen docs/Doxyfile |
| |
| |
| # Cython build |
| cython cython3: |
| cd python; python3 setup.py build_ext --inplace |
| |
| cyclean: |
| rm -rf python/tvm/*/*/*.so python/tvm/*/*/*.dylib python/tvm/*/*/*.cpp |
| |
| |
| |
| # EMCC; Web related scripts |
| web: |
| $(MAKE) -C $(ROOTDIR)/web |
| |
| webclean: |
| $(MAKE) -C $(ROOTDIR)/web clean |
| |
| |
| # JVM build rules |
| INCLUDE_FLAGS = -Iinclude -I$(DLPACK_PATH)/include -I$(DMLC_CORE_PATH)/include |
| PKG_CFLAGS = -std=c++11 -Wall -O2 $(INCLUDE_FLAGS) -fPIC |
| PKG_LDFLAGS = |
| |
| ifeq ($(OS),Windows_NT) |
| JVM_PKG_PROFILE := windows |
| SHARED_LIBRARY_SUFFIX := dll |
| else |
| 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 |
| endif |
| |
| JVM_TEST_ARGS ?= -DskipTests -Dcheckstyle.skip=true |
| |
| # Built java docs are in jvm/core/target/site/apidocs |
| javadoc: |
| (cd $(ROOTDIR)/jvm; \ |
| mvn "javadoc:javadoc" -Dnotimestamp=true) |
| |
| jvmpkg: |
| (cd $(ROOTDIR)/jvm; \ |
| mvn clean package -P$(JVM_PKG_PROFILE) -Dcxx="$(CXX)" \ |
| -Dcflags="$(PKG_CFLAGS)" -Dldflags="$(PKG_LDFLAGS)" \ |
| -Dcurrent_libdir="$(TVM_BUILD_PATH)" $(JVM_TEST_ARGS)) |
| |
| jvminstall: |
| (cd $(ROOTDIR)/jvm; \ |
| mvn install -P$(JVM_PKG_PROFILE) -Dcxx="$(CXX)" \ |
| -Dcflags="$(PKG_CFLAGS)" -Dldflags="$(PKG_LDFLAGS)" \ |
| -Dcurrent_libdir="$(TVM_BUILD_PATH)" $(JVM_TEST_ARGS)) |
| |
| # Final cleanup rules, delegate to more specific rules. |
| clean: $(addsuffix /clean,$(TVM_BUILD_PATH)) cyclean webclean |
| |
| docs: |
| python3 tests/scripts/ci.py docs |