# 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) TPARTYDIR = $(ROOTDIR)/3rdparty ifeq ($(OS),Windows_NT) UNAME_S := Windows else UNAME_S := $(shell uname -s) UNAME_P := $(shell uname -p) endif ifndef config ifdef CXXNET_CONFIG config = $(CXXNET_CONFIG) else ifneq ("$(wildcard ./config.mk)","") config = config.mk else config = make/config.mk endif endif ifndef DMLC_CORE DMLC_CORE = $(TPARTYDIR)/dmlc-core endif CORE_INC = $(wildcard $(DMLC_CORE)/include/*/*.h) ifndef NNVM_PATH NNVM_PATH = $(TPARTYDIR)/tvm/nnvm endif ifndef DLPACK_PATH DLPACK_PATH = $(ROOTDIR)/3rdparty/dlpack endif ifndef AMALGAMATION_PATH AMALGAMATION_PATH = $(ROOTDIR)/amalgamation endif ifneq ($(USE_OPENMP), 1) export NO_OPENMP = 1 endif # use customized config file include $(config) ifndef USE_MKLDNN ifneq ($(UNAME_S), Darwin) ifneq ($(UNAME_S), Windows) ifeq ($(UNAME_P), x86_64) USE_MKLDNN=1 endif endif endif endif ifeq ($(USE_MKL2017), 1) $(warning "USE_MKL2017 is deprecated. We will switch to USE_MKLDNN.") USE_MKLDNN=1 endif ifeq ($(USE_MKLDNN), 1) MKLDNNROOT = $(ROOTDIR)/3rdparty/mkldnn/build/install MKLROOT = $(ROOTDIR)/3rdparty/mkldnn/build/install export USE_MKLML = 1 endif include $(TPARTYDIR)/mshadow/make/mshadow.mk include $(DMLC_CORE)/make/dmlc.mk # all tge possible warning tread WARNFLAGS= -Wall -Wsign-compare CFLAGS = -DMSHADOW_FORCE_STREAM $(WARNFLAGS) ifeq ($(DEV), 1) CFLAGS += -g -Werror NVCCFLAGS += -Werror cross-execution-space-call endif # CFLAGS for debug ifeq ($(DEBUG), 1) CFLAGS += -g -O0 else CFLAGS += -O3 -DNDEBUG=1 endif CFLAGS += -I$(TPARTYDIR)/mshadow/ -I$(TPARTYDIR)/dmlc-core/include -fPIC -I$(NNVM_PATH)/include -I$(DLPACK_PATH)/include -I$(TPARTYDIR)/tvm/include -Iinclude $(MSHADOW_CFLAGS) LDFLAGS = -pthread $(MSHADOW_LDFLAGS) $(DMLC_LDFLAGS) ifeq ($(ENABLE_TESTCOVERAGE), 1) CFLAGS += --coverage LDFLAGS += --coverage endif ifeq ($(USE_TENSORRT), 1) CFLAGS += -I$(ROOTDIR) -I$(TPARTYDIR) -DONNX_NAMESPACE=$(ONNX_NAMESPACE) -DMXNET_USE_TENSORRT=1 LDFLAGS += -lprotobuf -pthread -lonnx -lonnx_proto -lnvonnxparser -lnvonnxparser_runtime -lnvinfer -lnvinfer_plugin endif # -L/usr/local/lib ifeq ($(DEBUG), 1) NVCCFLAGS += -std=c++11 -Xcompiler -D_FORCE_INLINES -g -G -O0 -ccbin $(CXX) $(MSHADOW_NVCCFLAGS) else NVCCFLAGS += -std=c++11 -Xcompiler -D_FORCE_INLINES -O3 -ccbin $(CXX) $(MSHADOW_NVCCFLAGS) endif # CFLAGS for segfault logger ifeq ($(USE_SIGNAL_HANDLER), 1) CFLAGS += -DMXNET_USE_SIGNAL_HANDLER=1 endif # Caffe Plugin ifdef CAFFE_PATH CFLAGS += -DMXNET_USE_CAFFE=1 endif ifndef LINT_LANG LINT_LANG = "all" endif ifeq ($(USE_MKLDNN), 1) CFLAGS += -DMXNET_USE_MKLDNN=1 CFLAGS += -DUSE_MKL=1 CFLAGS += -I$(ROOTDIR)/src/operator/nn/mkldnn/ ifneq ($(MKLDNNROOT), $(MKLROOT)) CFLAGS += -I$(MKLROOT)/include LDFLAGS += -L$(MKLROOT)/lib endif CFLAGS += -I$(MKLDNNROOT)/include LDFLAGS += -L$(MKLDNNROOT)/lib -lmkldnn -Wl,-rpath,'$${ORIGIN}' endif # setup opencv ifeq ($(USE_OPENCV), 1) CFLAGS += -DMXNET_USE_OPENCV=1 ifneq ($(filter-out NONE, $(USE_OPENCV_INC_PATH)),) CFLAGS += -I$(USE_OPENCV_INC_PATH)/include ifeq ($(filter-out NONE, $(USE_OPENCV_LIB_PATH)),) $(error Please add the path of OpenCV shared library path into `USE_OPENCV_LIB_PATH`, when `USE_OPENCV_INC_PATH` is not NONE) endif LDFLAGS += -L$(USE_OPENCV_LIB_PATH) ifneq ($(wildcard $(USE_OPENCV_LIB_PATH)/libopencv_imgcodecs.*),) LDFLAGS += -lopencv_imgcodecs endif ifneq ($(wildcard $(USE_OPENCV_LIB_PATH)/libopencv_highgui.*),) LDFLAGS += -lopencv_highgui endif else ifeq ("$(shell pkg-config --exists opencv4; echo $$?)", "0") OPENCV_LIB = opencv4 else OPENCV_LIB = opencv endif CFLAGS += $(shell pkg-config --cflags $(OPENCV_LIB)) LDFLAGS += $(shell pkg-config --libs-only-L $(OPENCV_LIB)) LDFLAGS += $(filter -lopencv_imgcodecs -lopencv_highgui, $(shell pkg-config --libs-only-l $(OPENCV_LIB))) endif LDFLAGS += -lopencv_imgproc -lopencv_core BIN += bin/im2rec else CFLAGS += -DMXNET_USE_OPENCV=0 endif ifeq ($(USE_OPENMP), 1) CFLAGS += -fopenmp endif ifeq ($(USE_NNPACK), 1) CFLAGS += -DMXNET_USE_NNPACK=1 LDFLAGS += -lnnpack endif ifeq ($(USE_OPERATOR_TUNING), 1) CFLAGS += -DMXNET_USE_OPERATOR_TUNING=1 endif # verify existence of separate lapack library when using blas/openblas/atlas # switch off lapack support in case it can't be found # issue covered with this # - for Ubuntu 14.04 or lower, lapack is not automatically installed with openblas # - for Ubuntu, installing atlas will not automatically install the atlas provided lapack library # - for rhel7.2, try installing the package `lapack-static` via yum will dismiss this warning. # silently switching lapack off instead of letting the build fail because of backward compatibility ifeq ($(USE_LAPACK), 1) ifeq ($(USE_BLAS),$(filter $(USE_BLAS),blas openblas atlas mkl)) ifeq (,$(wildcard $(USE_LAPACK_PATH)/liblapack.a)) ifeq (,$(wildcard $(USE_LAPACK_PATH)/liblapack.so)) ifeq (,$(wildcard /lib/liblapack.a)) ifeq (,$(wildcard /lib/liblapack.so)) ifeq (,$(wildcard /usr/lib/liblapack.a)) ifeq (,$(wildcard /usr/lib/liblapack.so)) ifeq (,$(wildcard /usr/lib64/liblapack.a)) ifeq (,$(wildcard /usr/lib64/liblapack.so)) USE_LAPACK = 0 $(warning "USE_LAPACK disabled because libraries were not found") endif endif endif endif endif endif endif endif endif endif # lapack settings. ifeq ($(USE_LAPACK), 1) ifneq ($(USE_LAPACK_PATH), ) LDFLAGS += -L$(USE_LAPACK_PATH) endif ifeq ($(USE_BLAS),$(filter $(USE_BLAS),blas openblas atlas mkl)) LDFLAGS += -llapack endif CFLAGS += -DMXNET_USE_LAPACK endif ifeq ($(USE_CUDNN), 1) CFLAGS += -DMSHADOW_USE_CUDNN=1 LDFLAGS += -lcudnn endif ifeq ($(use_blas), open) CFLAGS += -DMXNET_USE_BLAS_OPEN=1 else ifeq ($(use_blas), atlas) CFLAGS += -DMXNET_USE_BLAS_ATLAS=1 else ifeq ($(use_blas), mkl) CFLAGS += -DMXNET_USE_BLAS_MKL=1 else ifeq ($(use_blas), apple) CFLAGS += -DMXNET_USE_BLAS_APPLE=1 endif # whether to use F16C instruction set extension for fast fp16 compute on CPU # if cross compiling you may want to explicitly turn it off if target system does not support it ifndef USE_F16C ifneq ($(OS),Windows_NT) detected_OS := $(shell uname -s) ifeq ($(detected_OS),Darwin) F16C_SUPP = $(shell sysctl -a | grep machdep.cpu.features | grep F16C) endif ifeq ($(detected_OS),Linux) F16C_SUPP = $(shell cat /proc/cpuinfo | grep flags | grep f16c) endif ifneq ($(strip $(F16C_SUPP)),) USE_F16C=1 else USE_F16C=0 endif endif # if OS is Windows, check if your processor and compiler support F16C architecture. # One way to check if processor supports it is to download the tool # https://docs.microsoft.com/en-us/sysinternals/downloads/coreinfo. # If coreinfo -c shows F16C and compiler supports it, # then you can set USE_F16C=1 explicitly to leverage that capability" endif # gperftools malloc library (tcmalloc) ifeq ($(USE_GPERFTOOLS), 1) FIND_LIBFILEEXT=so ifeq ($(USE_GPERFTOOLS_STATIC), 1) FIND_LIBFILEEXT=a endif FIND_LIBFILE=$(wildcard $(USE_GPERFTOOLS_PATH)/libtcmalloc.$(FIND_LIBFILEEXT)) ifeq (,$(FIND_LIBFILE)) FIND_LIBFILE=$(wildcard /lib/libtcmalloc.$(FIND_LIBFILEEXT)) ifeq (,$(FIND_LIBFILE)) FIND_LIBFILE=$(wildcard /usr/lib/libtcmalloc.$(FIND_LIBFILEEXT)) ifeq (,$(FIND_LIBFILE)) FIND_LIBFILE=$(wildcard /usr/local/lib/libtcmalloc.$(FIND_LIBFILEEXT)) ifeq (,$(FIND_LIBFILE)) FIND_LIBFILE=$(wildcard /usr/lib64/libtcmalloc.$(FIND_LIBFILEEXT)) ifeq (,$(FIND_LIBFILE)) USE_GPERFTOOLS=0 endif endif endif endif endif ifeq ($(USE_GPERFTOOLS), 1) CFLAGS += -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free LDFLAGS += $(FIND_LIBFILE) endif # jemalloc malloc library (if not using gperftools) else ifeq ($(USE_JEMALLOC), 1) FIND_LIBFILEEXT=so ifeq ($(USE_JEMALLOC_STATIC), 1) FIND_LIBFILEEXT=a endif FIND_LIBFILE=$(wildcard $(USE_JEMALLOC_PATH)/libjemalloc.$(FIND_LIBFILEEXT)) ifeq (,$(FIND_LIBFILE)) FIND_LIBFILE=$(wildcard /lib/libjemalloc.$(FIND_LIBFILEEXT)) ifeq (,$(FIND_LIBFILE)) FIND_LIBFILE=$(wildcard /usr/lib/libjemalloc.$(FIND_LIBFILEEXT)) ifeq (,$(FIND_LIBFILE)) FIND_LIBFILE=$(wildcard /usr/local/lib/libjemalloc.$(FIND_LIBFILEEXT)) ifeq (,$(FIND_LIBFILE)) FIND_LIBFILE=$(wildcard /usr/lib/x86_64-linux-gnu/libjemalloc.$(FIND_LIBFILEEXT)) ifeq (,$(FIND_LIBFILE)) FIND_LIBFILE=$(wildcard /usr/lib64/libjemalloc.$(FIND_LIBFILEEXT)) ifeq (,$(FIND_LIBFILE)) USE_JEMALLOC=0 endif endif endif endif endif endif ifeq ($(USE_JEMALLOC), 1) CFLAGS += -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc \ -fno-builtin-free -DUSE_JEMALLOC LDFLAGS += $(FIND_LIBFILE) endif endif endif # If not using tcmalloc or jemalloc, print a warning (user should consider installing) ifneq ($(USE_GPERFTOOLS), 1) ifneq ($(USE_JEMALLOC), 1) $(warning WARNING: Significant performance increases can be achieved by installing and \ enabling gperftools or jemalloc development packages) endif endif ifeq ($(USE_THREADED_ENGINE), 1) CFLAGS += -DMXNET_USE_THREADED_ENGINE endif ifneq ($(ADD_CFLAGS), NONE) CFLAGS += $(ADD_CFLAGS) endif ifneq ($(ADD_LDFLAGS), NONE) LDFLAGS += $(ADD_LDFLAGS) endif ifeq ($(NVCC), NONE) # If NVCC has not been manually defined, use the CUDA_PATH bin dir. ifneq ($(USE_CUDA_PATH), NONE) NVCC=$(USE_CUDA_PATH)/bin/nvcc endif endif # Guard against displaying nvcc info messages to users not using CUDA. ifeq ($(USE_CUDA), 1) # If NVCC is not at the location specified, use CUDA_PATH instead. ifeq ("$(wildcard $(NVCC))","") ifneq ($(USE_CUDA_PATH), NONE) NVCC=$(USE_CUDA_PATH)/bin/nvcc $(info INFO: nvcc was not found on your path) $(info INFO: Using $(NVCC) as nvcc path) else $(warning WARNING: could not find nvcc compiler, the specified path was: $(NVCC)) endif endif endif # Sets 'CUDA_ARCH', which determines the GPU architectures supported # by the compiled kernels. Users can edit the KNOWN_CUDA_ARCHS list below # to remove archs they don't wish to support to speed compilation, or they can # pre-set the CUDA_ARCH args in config.mk to a non-null value for full control. # # For archs in this list, nvcc will create a fat-binary that will include # the binaries (SASS) for all architectures supported by the installed version # of the cuda toolkit, plus the assembly (PTX) for the most recent such architecture. # If these kernels are then run on a newer-architecture GPU, the binary will # be JIT-compiled by the updated driver from the included PTX. ifeq ($(USE_CUDA), 1) ifeq ($(CUDA_ARCH),) KNOWN_CUDA_ARCHS := 30 35 50 52 60 61 70 75 # Run nvcc on a zero-length file to check architecture-level support. # Create args to include SASS in the fat binary for supported levels. CUDA_ARCH := $(foreach arch,$(KNOWN_CUDA_ARCHS), \ $(shell $(NVCC) -arch=sm_$(arch) -E --x cu /dev/null >/dev/null 2>&1 && \ echo -gencode arch=compute_$(arch),code=sm_$(arch))) # Convert a trailing "code=sm_NN" to "code=[sm_NN,compute_NN]" to also # include the PTX of the most recent arch in the fat-binaries for # forward compatibility with newer GPUs. CUDA_ARCH := $(shell echo $(CUDA_ARCH) | sed 's/sm_\([0-9]*\)$$/[sm_\1,compute_\1]/') # Add fat binary compression if supported by nvcc. COMPRESS := --fatbin-options -compress-all CUDA_ARCH += $(shell $(NVCC) -cuda $(COMPRESS) --x cu /dev/null -o /dev/null >/dev/null 2>&1 && \ echo $(COMPRESS)) endif $(info Running CUDA_ARCH: $(CUDA_ARCH)) endif # ps-lite PS_PATH=$(ROOTDIR)/3rdparty/ps-lite DEPS_PATH=$(shell pwd)/deps include $(PS_PATH)/make/ps.mk ifeq ($(USE_DIST_KVSTORE), 1) CFLAGS += -DMXNET_USE_DIST_KVSTORE -I$(PS_PATH)/include -I$(DEPS_PATH)/include LIB_DEP += $(PS_PATH)/build/libps.a LDFLAGS += $(PS_LDFLAGS_A) endif .PHONY: clean all extra-packages test lint docs clean_all rcpplint rcppexport roxygen\ cython2 cython3 cython cyclean all: lib/libmxnet.a lib/libmxnet.so $(BIN) extra-packages SRC = $(wildcard src/*/*/*/*.cc src/*/*/*.cc src/*/*.cc src/*.cc) OBJ = $(patsubst %.cc, build/%.o, $(SRC)) CUSRC = $(wildcard src/*/*/*/*.cu src/*/*/*.cu src/*/*.cu src/*.cu) CUOBJ = $(patsubst %.cu, build/%_gpu.o, $(CUSRC)) # extra operators ifneq ($(EXTRA_OPERATORS),) EXTRA_SRC = $(wildcard $(patsubst %, %/*.cc, $(EXTRA_OPERATORS)) $(patsubst %, %/*/*.cc, $(EXTRA_OPERATORS))) EXTRA_OBJ = $(patsubst %.cc, %.o, $(EXTRA_SRC)) EXTRA_CUSRC = $(wildcard $(patsubst %, %/*.cu, $(EXTRA_OPERATORS)) $(patsubst %, %/*/*.cu, $(EXTRA_OPERATORS))) EXTRA_CUOBJ = $(patsubst %.cu, %_gpu.o, $(EXTRA_CUSRC)) else EXTRA_SRC = EXTRA_OBJ = EXTRA_CUSRC = EXTRA_CUOBJ = endif # plugin PLUGIN_OBJ = PLUGIN_CUOBJ = include $(MXNET_PLUGINS) ifneq ($(UNAME_S), Windows) ifeq ($(UNAME_S), Darwin) WHOLE_ARCH= -all_load NO_WHOLE_ARCH= -noall_load else WHOLE_ARCH= --whole-archive NO_WHOLE_ARCH= --no-whole-archive endif endif # all dep LIB_DEP += $(DMLC_CORE)/libdmlc.a $(NNVM_PATH)/lib/libnnvm.a ALL_DEP = $(OBJ) $(EXTRA_OBJ) $(PLUGIN_OBJ) $(LIB_DEP) ifeq ($(USE_CUDA), 1) CFLAGS += -I$(ROOTDIR)/3rdparty/nvidia_cub ALL_DEP += $(CUOBJ) $(EXTRA_CUOBJ) $(PLUGIN_CUOBJ) LDFLAGS += -lcufft ifeq ($(ENABLE_CUDA_RTC), 1) LDFLAGS += -lcuda -lnvrtc CFLAGS += -DMXNET_ENABLE_CUDA_RTC=1 endif # Make sure to add stubs as fallback in order to be able to build # without full CUDA install (especially if run without nvidia-docker) LDFLAGS += -L/usr/local/cuda/lib64/stubs ifeq ($(USE_NCCL), 1) ifneq ($(USE_NCCL_PATH), NONE) CFLAGS += -I$(USE_NCCL_PATH)/include LDFLAGS += -L$(USE_NCCL_PATH)/lib endif LDFLAGS += -lnccl CFLAGS += -DMXNET_USE_NCCL=1 else CFLAGS += -DMXNET_USE_NCCL=0 endif else CFLAGS += -DMXNET_USE_NCCL=0 endif ifeq ($(USE_LIBJPEG_TURBO), 1) ifneq ($(USE_LIBJPEG_TURBO_PATH), NONE) CFLAGS += -I$(USE_LIBJPEG_TURBO_PATH)/include LDFLAGS += -L$(USE_LIBJPEG_TURBO_PATH)/lib endif LDFLAGS += -lturbojpeg CFLAGS += -DMXNET_USE_LIBJPEG_TURBO=1 else CFLAGS += -DMXNET_USE_LIBJPEG_TURBO=0 endif ifeq ($(CI), 1) MAVEN_ARGS := -B endif # For quick compile test, used smaller subset ALLX_DEP= $(ALL_DEP) build/src/%.o: src/%.cc | mkldnn @mkdir -p $(@D) $(CXX) -std=c++11 -c $(CFLAGS) -MMD -c $< -o $@ build/src/%_gpu.o: src/%.cu | mkldnn @mkdir -p $(@D) $(NVCC) $(NVCCFLAGS) $(CUDA_ARCH) -Xcompiler "$(CFLAGS)" --generate-dependencies -MT build/src/$*_gpu.o $< >build/src/$*_gpu.d $(NVCC) -c -o $@ $(NVCCFLAGS) $(CUDA_ARCH) -Xcompiler "$(CFLAGS)" $< # A nvcc bug cause it to generate "generic/xxx.h" dependencies from torch headers. # Use CXX to generate dependency instead. build/plugin/%_gpu.o: plugin/%.cu @mkdir -p $(@D) $(CXX) -std=c++11 $(CFLAGS) -MM -MT build/plugin/$*_gpu.o $< >build/plugin/$*_gpu.d $(NVCC) -c -o $@ $(NVCCFLAGS) $(CUDA_ARCH) -Xcompiler "$(CFLAGS)" $< build/plugin/%.o: plugin/%.cc | mkldnn @mkdir -p $(@D) $(CXX) -std=c++11 -c $(CFLAGS) -MMD -c $< -o $@ %_gpu.o: %.cu @mkdir -p $(@D) $(NVCC) $(NVCCFLAGS) $(CUDA_ARCH) -Xcompiler "$(CFLAGS) -Isrc/operator" --generate-dependencies -MT $*_gpu.o $< >$*_gpu.d $(NVCC) -c -o $@ $(NVCCFLAGS) $(CUDA_ARCH) -Xcompiler "$(CFLAGS) -Isrc/operator" $< %.o: %.cc $(CORE_INC) @mkdir -p $(@D) $(CXX) -std=c++11 -c $(CFLAGS) -MMD -Isrc/operator -c $< -o $@ # Set install path for libmxnet.so on Mac OS ifeq ($(UNAME_S), Darwin) LDFLAGS += -Wl,-install_name,@rpath/libmxnet.so endif # NOTE: to statically link libmxnet.a we need the option # --Wl,--whole-archive -lmxnet --Wl,--no-whole-archive lib/libmxnet.a: $(ALLX_DEP) @mkdir -p $(@D) ar crv $@ $(filter %.o, $?) lib/libmxnet.so: $(ALLX_DEP) @mkdir -p $(@D) $(CXX) $(CFLAGS) -shared -o $@ $(filter-out %libnnvm.a, $(filter %.o %.a, $^)) $(LDFLAGS) \ -Wl,${WHOLE_ARCH} $(filter %libnnvm.a, $^) -Wl,${NO_WHOLE_ARCH} ifeq ($(USE_MKLDNN), 1) ifeq ($(UNAME_S), Darwin) install_name_tool -change '@rpath/libmklml.dylib' '@loader_path/libmklml.dylib' $@ install_name_tool -change '@rpath/libiomp5.dylib' '@loader_path/libiomp5.dylib' $@ install_name_tool -change '@rpath/libmkldnn.0.dylib' '@loader_path/libmkldnn.0.dylib' $@ endif endif $(PS_PATH)/build/libps.a: PSLITE PSLITE: $(MAKE) CXX="$(CXX)" DEPS_PATH="$(DEPS_PATH)" -C $(PS_PATH) ps $(DMLC_CORE)/libdmlc.a: DMLCCORE DMLCCORE: + cd $(DMLC_CORE); $(MAKE) libdmlc.a USE_SSE=$(USE_SSE) config=$(ROOTDIR)/$(config); cd $(ROOTDIR) NNVM_INC = $(wildcard $(NNVM_PATH)/include/*/*.h) NNVM_SRC = $(wildcard $(NNVM_PATH)/src/*/*/*.cc $(NNVM_PATH)/src/*/*.cc $(NNVM_PATH)/src/*.cc) $(NNVM_PATH)/lib/libnnvm.a: $(NNVM_INC) $(NNVM_SRC) + cd $(NNVM_PATH); $(MAKE) lib/libnnvm.a DMLC_CORE_PATH=$(DMLC_CORE); cd $(ROOTDIR) bin/im2rec: tools/im2rec.cc $(ALLX_DEP) $(BIN) : @mkdir -p $(@D) $(CXX) $(CFLAGS) -std=c++11 -o $@ $(filter %.cpp %.o %.c %.a %.cc, $^) $(LDFLAGS) # CPP Package ifeq ($(USE_CPP_PACKAGE), 1) include cpp-package/cpp-package.mk endif include mkldnn.mk include tests/cpp/unittest.mk extra-packages: $(EXTRA_PACKAGES) test: $(TEST) lint: cpplint rcpplint jnilint pylint cpplint: 3rdparty/dmlc-core/scripts/lint.py mxnet cpp include src plugin cpp-package tests \ --exclude_path src/operator/contrib/ctc_include pylint: pylint --rcfile=$(ROOTDIR)/ci/other/pylintrc --ignore-patterns=".*\.so$$,.*\.dll$$,.*\.dylib$$" python/mxnet tools/caffe_converter/*.py doc: docs docs: make -C docs html clean_docs: make -C docs clean doxygen: doxygen docs/Doxyfile # Cython build cython: cd python; python setup.py build_ext --inplace --with-cython cython2: cd python; python2 setup.py build_ext --inplace --with-cython cython3: cd python; python3 setup.py build_ext --inplace --with-cython cyclean: rm -rf python/mxnet/*/*.so python/mxnet/*/*.cpp # R related shortcuts rcpplint: 3rdparty/dmlc-core/scripts/lint.py mxnet-rcpp ${LINT_LANG} R-package/src rpkg: mkdir -p R-package/inst/libs cp src/io/image_recordio.h R-package/src cp -rf lib/libmxnet.so R-package/inst/libs if [ -e "lib/libmkldnn.so.0" ]; then \ cp -rf lib/libmkldnn.so.0 R-package/inst/libs; \ cp -rf lib/libiomp5.so R-package/inst/libs; \ cp -rf lib/libmklml_intel.so R-package/inst/libs; \ fi mkdir -p R-package/inst/include cp -rl include/* R-package/inst/include Rscript -e "if(!require(devtools)){install.packages('devtools', repo = 'https://cloud.r-project.org/')}" Rscript -e "if(!require(roxygen2)||packageVersion('roxygen2') < '6.1.1'){install.packages('roxygen2', repo = 'https://cloud.r-project.org/')}" Rscript -e "library(devtools); library(methods); options(repos=c(CRAN='https://cloud.r-project.org/')); install_deps(pkg='R-package', dependencies = TRUE)" cp R-package/dummy.NAMESPACE R-package/NAMESPACE echo "import(Rcpp)" >> R-package/NAMESPACE R CMD INSTALL R-package Rscript -e "require(mxnet); mxnet:::mxnet.export('R-package'); warnings()" rm R-package/NAMESPACE Rscript -e "devtools::document('R-package');warnings()" R CMD INSTALL R-package rpkgtest: Rscript -e 'require(testthat);res<-test_dir("R-package/tests/testthat");if(!testthat:::all_passed(res)){stop("Test failures", call. = FALSE)}' Rscript -e 'res<-covr:::package_coverage("R-package");fileConn<-file(paste("r-package_coverage_",toString(runif(1)),".json"));writeLines(covr:::to_codecov(res), fileConn);close(fileConn)' scalaclean: (cd $(ROOTDIR)/scala-package && mvn clean) scalapkg: (cd $(ROOTDIR)/scala-package && mvn install -DskipTests) scalainstall: (cd $(ROOTDIR)/scala-package && mvn install) scalaunittest: (cd $(ROOTDIR)/scala-package && mvn install) scalaintegrationtest: (cd $(ROOTDIR)/scala-package && mvn integration-test -DskipTests=false) jnilint: 3rdparty/dmlc-core/scripts/lint.py mxnet-jnicpp cpp scala-package/native/src --exclude_path scala-package/native/src/main/native/org_apache_mxnet_native_c_api.h rclean: $(RM) -r R-package/src/image_recordio.h R-package/NAMESPACE R-package/man R-package/R/mxnet_generated.R \ R-package/inst R-package/src/*.o R-package/src/*.so mxnet_*.tar.gz ifneq ($(EXTRA_OPERATORS),) clean: rclean cyclean $(EXTRA_PACKAGES_CLEAN) $(RM) -r build lib bin deps *~ */*~ */*/*~ */*/*/*~ (cd scala-package && mvn clean) || true cd $(DMLC_CORE); $(MAKE) clean; cd - cd $(PS_PATH); $(MAKE) clean; cd - cd $(NNVM_PATH); $(MAKE) clean; cd - cd $(AMALGAMATION_PATH); $(MAKE) clean; cd - $(RM) -r $(patsubst %, %/*.d, $(EXTRA_OPERATORS)) $(patsubst %, %/*/*.d, $(EXTRA_OPERATORS)) $(RM) -r $(patsubst %, %/*.o, $(EXTRA_OPERATORS)) $(patsubst %, %/*/*.o, $(EXTRA_OPERATORS)) else clean: rclean mkldnn_clean cyclean testclean $(EXTRA_PACKAGES_CLEAN) $(RM) -r build lib bin *~ */*~ */*/*~ */*/*/*~ (cd scala-package && mvn clean) || true cd $(DMLC_CORE); $(MAKE) clean; cd - cd $(PS_PATH); $(MAKE) clean; cd - cd $(NNVM_PATH); $(MAKE) clean; cd - cd $(AMALGAMATION_PATH); $(MAKE) clean; cd - endif clean_all: clean -include build/*.d -include build/*/*.d -include build/*/*/*.d -include build/*/*/*/*.d ifneq ($(EXTRA_OPERATORS),) -include $(patsubst %, %/*.d, $(EXTRA_OPERATORS)) $(patsubst %, %/*/*.d, $(EXTRA_OPERATORS)) endif