The setup.py is rewritten. This new script uses only Python code and provide customized implementation of setuptools commands. This way users can run most of setuptools commands just like any other Python libraries. * Remove setup_pip.py * Remove soft links. * Define customized commands. * Remove shell script. * Remove makefile script. * Update the doc for building from source.
259 lines
7.3 KiB
Makefile
259 lines
7.3 KiB
Makefile
ifndef config
|
|
ifneq ("$(wildcard ./config.mk)","")
|
|
config = config.mk
|
|
else
|
|
config = make/config.mk
|
|
endif
|
|
endif
|
|
|
|
ifndef DMLC_CORE
|
|
DMLC_CORE = dmlc-core
|
|
endif
|
|
|
|
ifndef RABIT
|
|
RABIT = rabit
|
|
endif
|
|
|
|
ROOTDIR = $(CURDIR)
|
|
|
|
# workarounds for some buggy old make & msys2 versions seen in windows
|
|
ifeq (NA, $(shell test ! -d "$(ROOTDIR)" && echo NA ))
|
|
$(warning Attempting to fix non-existing ROOTDIR [$(ROOTDIR)])
|
|
ROOTDIR := $(shell pwd)
|
|
$(warning New ROOTDIR [$(ROOTDIR)] $(shell test -d "$(ROOTDIR)" && echo " is OK" ))
|
|
endif
|
|
MAKE_OK := $(shell "$(MAKE)" -v 2> /dev/null)
|
|
ifndef MAKE_OK
|
|
$(warning Attempting to recover non-functional MAKE [$(MAKE)])
|
|
MAKE := $(shell which make 2> /dev/null)
|
|
MAKE_OK := $(shell "$(MAKE)" -v 2> /dev/null)
|
|
endif
|
|
$(warning MAKE [$(MAKE)] - $(if $(MAKE_OK),checked OK,PROBLEM))
|
|
|
|
ifeq ($(OS), Windows_NT)
|
|
UNAME="Windows"
|
|
else
|
|
UNAME=$(shell uname)
|
|
endif
|
|
|
|
include $(config)
|
|
ifeq ($(USE_OPENMP), 0)
|
|
export NO_OPENMP = 1
|
|
endif
|
|
include $(DMLC_CORE)/make/dmlc.mk
|
|
|
|
# set compiler defaults for OSX versus *nix
|
|
# let people override either
|
|
OS := $(shell uname)
|
|
ifeq ($(OS), Darwin)
|
|
ifndef CC
|
|
export CC = $(if $(shell which clang), clang, gcc)
|
|
endif
|
|
ifndef CXX
|
|
export CXX = $(if $(shell which clang++), clang++, g++)
|
|
endif
|
|
else
|
|
# linux defaults
|
|
ifndef CC
|
|
export CC = gcc
|
|
endif
|
|
ifndef CXX
|
|
export CXX = g++
|
|
endif
|
|
endif
|
|
|
|
export LDFLAGS= -pthread -lm $(ADD_LDFLAGS) $(DMLC_LDFLAGS)
|
|
export CFLAGS= -DDMLC_LOG_CUSTOMIZE=1 -std=c++11 -Wall -Wno-unknown-pragmas -Iinclude $(ADD_CFLAGS)
|
|
CFLAGS += -I$(DMLC_CORE)/include -I$(RABIT)/include -I$(GTEST_PATH)/include
|
|
#java include path
|
|
export JAVAINCFLAGS = -I${JAVA_HOME}/include -I./java
|
|
|
|
ifeq ($(TEST_COVER), 1)
|
|
CFLAGS += -g -O0 -fprofile-arcs -ftest-coverage
|
|
else
|
|
CFLAGS += -O3 -funroll-loops
|
|
ifeq ($(USE_SSE), 1)
|
|
CFLAGS += -msse2
|
|
endif
|
|
endif
|
|
|
|
ifndef LINT_LANG
|
|
LINT_LANG= "all"
|
|
endif
|
|
|
|
ifeq ($(UNAME), Windows)
|
|
XGBOOST_DYLIB = lib/xgboost.dll
|
|
JAVAINCFLAGS += -I${JAVA_HOME}/include/win32
|
|
else
|
|
ifeq ($(UNAME), Darwin)
|
|
XGBOOST_DYLIB = lib/libxgboost.dylib
|
|
CFLAGS += -fPIC
|
|
else
|
|
XGBOOST_DYLIB = lib/libxgboost.so
|
|
CFLAGS += -fPIC
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(UNAME), Linux)
|
|
LDFLAGS += -lrt
|
|
JAVAINCFLAGS += -I${JAVA_HOME}/include/linux
|
|
endif
|
|
|
|
ifeq ($(UNAME), Darwin)
|
|
JAVAINCFLAGS += -I${JAVA_HOME}/include/darwin
|
|
endif
|
|
|
|
OPENMP_FLAGS =
|
|
ifeq ($(USE_OPENMP), 1)
|
|
OPENMP_FLAGS = -fopenmp
|
|
else
|
|
OPENMP_FLAGS = -DDISABLE_OPENMP
|
|
endif
|
|
CFLAGS += $(OPENMP_FLAGS)
|
|
|
|
# specify tensor path
|
|
.PHONY: clean all lint clean_all doxygen rcpplint pypack Rpack Rbuild Rcheck java pylint
|
|
|
|
all: lib/libxgboost.a $(XGBOOST_DYLIB) xgboost
|
|
|
|
$(DMLC_CORE)/libdmlc.a: $(wildcard $(DMLC_CORE)/src/*.cc $(DMLC_CORE)/src/*/*.cc)
|
|
+ cd $(DMLC_CORE); "$(MAKE)" libdmlc.a config=$(ROOTDIR)/$(config); cd $(ROOTDIR)
|
|
|
|
$(RABIT)/lib/$(LIB_RABIT): $(wildcard $(RABIT)/src/*.cc)
|
|
+ cd $(RABIT); "$(MAKE)" lib/$(LIB_RABIT) USE_SSE=$(USE_SSE); cd $(ROOTDIR)
|
|
|
|
jvm: jvm-packages/lib/libxgboost4j.so
|
|
|
|
SRC = $(wildcard src/*.cc src/*/*.cc)
|
|
ALL_OBJ = $(patsubst src/%.cc, build/%.o, $(SRC))
|
|
AMALGA_OBJ = amalgamation/xgboost-all0.o
|
|
LIB_DEP = $(DMLC_CORE)/libdmlc.a $(RABIT)/lib/$(LIB_RABIT)
|
|
ALL_DEP = $(filter-out build/cli_main.o, $(ALL_OBJ)) $(LIB_DEP)
|
|
CLI_OBJ = build/cli_main.o
|
|
include tests/cpp/xgboost_test.mk
|
|
|
|
build/%.o: src/%.cc
|
|
@mkdir -p $(@D)
|
|
$(CXX) $(CFLAGS) -MM -MT build/$*.o $< >build/$*.d
|
|
$(CXX) -c $(CFLAGS) $< -o $@
|
|
|
|
# The should be equivalent to $(ALL_OBJ) except for build/cli_main.o
|
|
amalgamation/xgboost-all0.o: amalgamation/xgboost-all0.cc
|
|
$(CXX) -c $(CFLAGS) $< -o $@
|
|
|
|
# Equivalent to lib/libxgboost_all.so
|
|
lib/libxgboost_all.so: $(AMALGA_OBJ) $(LIB_DEP)
|
|
@mkdir -p $(@D)
|
|
$(CXX) $(CFLAGS) -shared -o $@ $(filter %.o %.a, $^) $(LDFLAGS)
|
|
|
|
lib/libxgboost.a: $(ALL_DEP)
|
|
@mkdir -p $(@D)
|
|
ar crv $@ $(filter %.o, $?)
|
|
|
|
lib/xgboost.dll lib/libxgboost.so lib/libxgboost.dylib: $(ALL_DEP)
|
|
@mkdir -p $(@D)
|
|
$(CXX) $(CFLAGS) -shared -o $@ $(filter %.o %a, $^) $(LDFLAGS)
|
|
|
|
jvm-packages/lib/libxgboost4j.so: jvm-packages/xgboost4j/src/native/xgboost4j.cpp $(ALL_DEP)
|
|
@mkdir -p $(@D)
|
|
$(CXX) $(CFLAGS) $(JAVAINCFLAGS) -shared -o $@ $(filter %.cpp %.o %.a, $^) $(LDFLAGS)
|
|
|
|
|
|
xgboost: $(CLI_OBJ) $(ALL_DEP)
|
|
$(CXX) $(CFLAGS) -o $@ $(filter %.o %.a, $^) $(LDFLAGS)
|
|
|
|
rcpplint:
|
|
python3 dmlc-core/scripts/lint.py xgboost ${LINT_LANG} R-package/src
|
|
|
|
lint: rcpplint
|
|
python3 dmlc-core/scripts/lint.py --exclude_path python-package/xgboost/dmlc-core \
|
|
python-package/xgboost/include python-package/xgboost/lib \
|
|
python-package/xgboost/make python-package/xgboost/rabit \
|
|
python-package/xgboost/src --pylint-rc ${PWD}/python-package/.pylintrc xgboost \
|
|
${LINT_LANG} include src python-package
|
|
|
|
pylint:
|
|
flake8 --ignore E501 python-package
|
|
flake8 --ignore E501 tests/python
|
|
|
|
test: $(ALL_TEST)
|
|
$(ALL_TEST)
|
|
|
|
check: test
|
|
./tests/cpp/xgboost_test
|
|
|
|
ifeq ($(TEST_COVER), 1)
|
|
cover: check
|
|
@- $(foreach COV_OBJ, $(COVER_OBJ), \
|
|
gcov -pbcul -o $(shell dirname $(COV_OBJ)) $(COV_OBJ) > gcov.log || cat gcov.log; \
|
|
)
|
|
endif
|
|
|
|
clean:
|
|
$(RM) -rf build lib bin *~ */*~ */*/*~ */*/*/*~ */*.o */*/*.o */*/*/*.o #xgboost
|
|
$(RM) -rf build_tests *.gcov tests/cpp/xgboost_test
|
|
if [ -d "R-package/src" ]; then \
|
|
cd R-package/src; \
|
|
$(RM) -rf rabit src include dmlc-core amalgamation *.so *.dll; \
|
|
cd $(ROOTDIR); \
|
|
fi
|
|
|
|
clean_all: clean
|
|
cd $(DMLC_CORE); "$(MAKE)" clean; cd $(ROOTDIR)
|
|
cd $(RABIT); "$(MAKE)" clean; cd $(ROOTDIR)
|
|
|
|
doxygen:
|
|
doxygen doc/Doxyfile
|
|
|
|
# create standalone python tar file.
|
|
pypack: ${XGBOOST_DYLIB}
|
|
cp ${XGBOOST_DYLIB} python-package/xgboost/lib
|
|
cd python-package; tar cf xgboost.tar xgboost; cd ..
|
|
|
|
# create pip source dist (sdist) pack for PyPI
|
|
pippack: clean_all
|
|
cd python-package; python setup.py sdist; mv dist/*.tar.gz ..; cd ..
|
|
|
|
# Script to make a clean installable R package.
|
|
Rpack: clean_all
|
|
rm -rf xgboost xgboost*.tar.gz
|
|
cp -r R-package xgboost
|
|
rm -rf xgboost/src/*.o xgboost/src/*.so xgboost/src/*.dll
|
|
rm -rf xgboost/src/*/*.o
|
|
rm -rf xgboost/demo/*.model xgboost/demo/*.buffer xgboost/demo/*.txt
|
|
rm -rf xgboost/demo/runall.R
|
|
cp -r src xgboost/src/src
|
|
cp -r include xgboost/src/include
|
|
cp -r amalgamation xgboost/src/amalgamation
|
|
mkdir -p xgboost/src/rabit
|
|
cp -r rabit/include xgboost/src/rabit/include
|
|
cp -r rabit/src xgboost/src/rabit/src
|
|
rm -rf xgboost/src/rabit/src/*.o
|
|
mkdir -p xgboost/src/dmlc-core
|
|
cp -r dmlc-core/include xgboost/src/dmlc-core/include
|
|
cp -r dmlc-core/src xgboost/src/dmlc-core/src
|
|
cp ./LICENSE xgboost
|
|
# Modify PKGROOT in Makevars.in
|
|
cat R-package/src/Makevars.in|sed '2s/.*/PKGROOT=./' > xgboost/src/Makevars.in
|
|
# Configure Makevars.win (Windows-specific Makevars, likely using MinGW)
|
|
cp xgboost/src/Makevars.in xgboost/src/Makevars.win
|
|
cat xgboost/src/Makevars.in| sed '3s/.*/ENABLE_STD_THREAD=0/' > xgboost/src/Makevars.win
|
|
sed -i -e 's/@OPENMP_CXXFLAGS@/$$\(SHLIB_OPENMP_CXXFLAGS\)/g' xgboost/src/Makevars.win
|
|
sed -i -e 's/-pthread/$$\(SHLIB_PTHREAD_FLAGS\)/g' xgboost/src/Makevars.win
|
|
sed -i -e 's/@ENDIAN_FLAG@/-DDMLC_CMAKE_LITTLE_ENDIAN=1/g' xgboost/src/Makevars.win
|
|
sed -i -e 's/@BACKTRACE_LIB@//g' xgboost/src/Makevars.win
|
|
sed -i -e 's/@OPENMP_LIB@//g' xgboost/src/Makevars.win
|
|
rm -f xgboost/src/Makevars.win-e # OSX sed create this extra file; remove it
|
|
bash R-package/remove_warning_suppression_pragma.sh
|
|
rm xgboost/remove_warning_suppression_pragma.sh
|
|
|
|
Rbuild: Rpack
|
|
R CMD build --no-build-vignettes xgboost
|
|
rm -rf xgboost
|
|
|
|
Rcheck: Rbuild
|
|
R CMD check xgboost*.tar.gz
|
|
|
|
-include build/*.d
|
|
-include build/*/*.d
|