# package root
PKGROOT=../../
ENABLE_STD_THREAD=0
# _*_ mode: Makefile; _*_

CXX_STD = CXX17

XGB_RFLAGS = \
    -DXGBOOST_STRICT_R_MODE=1 \
    -DDMLC_LOG_BEFORE_THROW=0 \
    -DDMLC_ENABLE_STD_THREAD=$(ENABLE_STD_THREAD) \
    -DDMLC_DISABLE_STDIN=1 \
    -DDMLC_LOG_CUSTOMIZE=1

# disable the use of thread_local for 32 bit windows:
ifeq ($(R_OSTYPE)$(WIN),windows)
    XGB_RFLAGS += -DDMLC_CXX11_THREAD_LOCAL=0
endif
$(foreach v, $(XGB_RFLAGS), $(warning $(v)))

PKG_CPPFLAGS = \
    -I$(PKGROOT)/include \
    -I$(PKGROOT)/dmlc-core/include \
    -I$(PKGROOT) \
    $(XGB_RFLAGS)

PKG_CXXFLAGS = \
    $(SHLIB_OPENMP_CXXFLAGS) \
    -DDMLC_CMAKE_LITTLE_ENDIAN=1 \
    $(SHLIB_PTHREAD_FLAGS) \
    $(CXX_VISIBILITY)

PKG_LIBS = \
    $(SHLIB_OPENMP_CXXFLAGS) \
    -DDMLC_CMAKE_LITTLE_ENDIAN=1 \
    $(SHLIB_PTHREAD_FLAGS) \
    -lwsock32 \
    -lws2_32

OBJECTS= \
    ./xgboost_R.o \
    ./xgboost_custom.o \
    ./init.o \
    $(PKGROOT)/src/metric/metric.o \
    $(PKGROOT)/src/metric/elementwise_metric.o \
    $(PKGROOT)/src/metric/multiclass_metric.o \
    $(PKGROOT)/src/metric/rank_metric.o \
    $(PKGROOT)/src/metric/auc.o \
    $(PKGROOT)/src/metric/survival_metric.o \
    $(PKGROOT)/src/objective/objective.o \
    $(PKGROOT)/src/objective/regression_obj.o \
    $(PKGROOT)/src/objective/multiclass_obj.o \
    $(PKGROOT)/src/objective/lambdarank_obj.o \
    $(PKGROOT)/src/objective/hinge.o \
    $(PKGROOT)/src/objective/aft_obj.o \
    $(PKGROOT)/src/objective/adaptive.o \
    $(PKGROOT)/src/objective/init_estimation.o \
    $(PKGROOT)/src/objective/quantile_obj.o \
    $(PKGROOT)/src/gbm/gbm.o \
    $(PKGROOT)/src/gbm/gbtree.o \
    $(PKGROOT)/src/gbm/gbtree_model.o \
    $(PKGROOT)/src/gbm/gblinear.o \
    $(PKGROOT)/src/gbm/gblinear_model.o \
    $(PKGROOT)/src/data/adapter.o \
    $(PKGROOT)/src/data/array_interface.o \
    $(PKGROOT)/src/data/simple_dmatrix.o \
    $(PKGROOT)/src/data/data.o \
    $(PKGROOT)/src/data/sparse_page_raw_format.o \
    $(PKGROOT)/src/data/ellpack_page.o \
    $(PKGROOT)/src/data/file_iterator.o \
    $(PKGROOT)/src/data/gradient_index.o \
    $(PKGROOT)/src/data/gradient_index_page_source.o \
    $(PKGROOT)/src/data/gradient_index_format.o \
    $(PKGROOT)/src/data/sparse_page_dmatrix.o \
    $(PKGROOT)/src/data/sparse_page_source.o \
    $(PKGROOT)/src/data/extmem_quantile_dmatrix.o \
    $(PKGROOT)/src/data/quantile_dmatrix.o \
    $(PKGROOT)/src/data/batch_utils.o \
    $(PKGROOT)/src/data/proxy_dmatrix.o \
    $(PKGROOT)/src/data/iterative_dmatrix.o \
    $(PKGROOT)/src/predictor/predictor.o \
    $(PKGROOT)/src/predictor/cpu_predictor.o \
    $(PKGROOT)/src/predictor/cpu_treeshap.o \
    $(PKGROOT)/src/tree/constraints.o \
    $(PKGROOT)/src/tree/param.o \
    $(PKGROOT)/src/tree/fit_stump.o \
    $(PKGROOT)/src/tree/tree_model.o \
    $(PKGROOT)/src/tree/multi_target_tree_model.o \
    $(PKGROOT)/src/tree/tree_updater.o \
    $(PKGROOT)/src/tree/updater_approx.o \
    $(PKGROOT)/src/tree/updater_colmaker.o \
    $(PKGROOT)/src/tree/updater_prune.o \
    $(PKGROOT)/src/tree/updater_quantile_hist.o \
    $(PKGROOT)/src/tree/updater_refresh.o \
    $(PKGROOT)/src/tree/updater_sync.o \
    $(PKGROOT)/src/tree/hist/param.o \
    $(PKGROOT)/src/tree/hist/histogram.o \
    $(PKGROOT)/src/linear/linear_updater.o \
    $(PKGROOT)/src/linear/updater_coordinate.o \
    $(PKGROOT)/src/linear/updater_shotgun.o \
    $(PKGROOT)/src/learner.o \
    $(PKGROOT)/src/context.o \
    $(PKGROOT)/src/logging.o \
    $(PKGROOT)/src/global_config.o \
    $(PKGROOT)/src/collective/result.o \
    $(PKGROOT)/src/collective/allgather.o \
    $(PKGROOT)/src/collective/allreduce.o \
    $(PKGROOT)/src/collective/broadcast.o \
    $(PKGROOT)/src/collective/comm.o \
    $(PKGROOT)/src/collective/comm_group.o \
    $(PKGROOT)/src/collective/coll.o \
    $(PKGROOT)/src/collective/tracker.o \
    $(PKGROOT)/src/collective/in_memory_handler.o \
    $(PKGROOT)/src/collective/loop.o \
    $(PKGROOT)/src/collective/socket.o \
    $(PKGROOT)/src/common/charconv.o \
    $(PKGROOT)/src/common/column_matrix.o \
    $(PKGROOT)/src/common/common.o \
    $(PKGROOT)/src/common/cuda_rt_utils.o \
    $(PKGROOT)/src/common/error_msg.o \
    $(PKGROOT)/src/common/hist_util.o \
    $(PKGROOT)/src/common/host_device_vector.o \
    $(PKGROOT)/src/common/io.o \
    $(PKGROOT)/src/common/json.o \
    $(PKGROOT)/src/common/numeric.o \
    $(PKGROOT)/src/common/pseudo_huber.o \
    $(PKGROOT)/src/common/quantile.o \
    $(PKGROOT)/src/common/random.o \
    $(PKGROOT)/src/common/stats.o \
    $(PKGROOT)/src/common/survival_util.o \
    $(PKGROOT)/src/common/threading_utils.o \
    $(PKGROOT)/src/common/ranking_utils.o \
    $(PKGROOT)/src/common/quantile_loss_utils.o \
    $(PKGROOT)/src/common/timer.o \
    $(PKGROOT)/src/common/version.o \
    $(PKGROOT)/src/c_api/c_api.o \
    $(PKGROOT)/src/c_api/c_api_error.o \
    $(PKGROOT)/amalgamation/dmlc-minimum0.o
