From 526801cdb3b1d951948e06f402632ded248fad6e Mon Sep 17 00:00:00 2001 From: Vadim Khotilovich Date: Sun, 31 Dec 2017 16:18:50 -0600 Subject: [PATCH] [R] fix for the 32 bit windows issue (#2994) * [R] disable thred_local for 32bit windows * [R] require C++11 and GNU make in DESCRIPTION * [R] enable 32+64 build and check in appveyor --- R-package/DESCRIPTION | 1 + R-package/src/Makevars.in | 6 ++++++ R-package/src/Makevars.win | 8 +++++++- appveyor.yml | 5 ++--- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/R-package/DESCRIPTION b/R-package/DESCRIPTION index 32f83d2e7..b5446d3b7 100644 --- a/R-package/DESCRIPTION +++ b/R-package/DESCRIPTION @@ -38,3 +38,4 @@ Imports: magrittr (>= 1.5), stringi (>= 0.5.2) RoxygenNote: 6.0.1 +SystemRequirements: GNU make, C++11 diff --git a/R-package/src/Makevars.in b/R-package/src/Makevars.in index 26aa5386c..728d6c519 100644 --- a/R-package/src/Makevars.in +++ b/R-package/src/Makevars.in @@ -10,6 +10,12 @@ XGB_RFLAGS = -DXGBOOST_STRICT_R_MODE=1 -DDMLC_LOG_BEFORE_THROW=0\ -DDMLC_LOG_CUSTOMIZE=1 -DXGBOOST_CUSTOMIZE_LOGGER=1\ -DRABIT_CUSTOMIZE_MSG_ -DRABIT_STRICT_CXX98_ +# 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)/rabit/include -I$(PKGROOT) $(XGB_RFLAGS) PKG_CXXFLAGS= @OPENMP_CXXFLAGS@ $(SHLIB_PTHREAD_FLAGS) PKG_LIBS = @OPENMP_CXXFLAGS@ $(SHLIB_PTHREAD_FLAGS) diff --git a/R-package/src/Makevars.win b/R-package/src/Makevars.win index 953b5dc23..195310d98 100644 --- a/R-package/src/Makevars.win +++ b/R-package/src/Makevars.win @@ -4,7 +4,7 @@ ENABLE_STD_THREAD=0 # _*_ mode: Makefile; _*_ # This file is only used for windows compilation from github -# It will be replaced by Makevars in CRAN version +# It will be replaced with Makevars.in for the CRAN version .PHONY: all xgblib all: $(SHLIB) $(SHLIB): xgblib @@ -22,6 +22,12 @@ XGB_RFLAGS = -DXGBOOST_STRICT_R_MODE=1 -DDMLC_LOG_BEFORE_THROW=0\ -DDMLC_LOG_CUSTOMIZE=1 -DXGBOOST_CUSTOMIZE_LOGGER=1\ -DRABIT_CUSTOMIZE_MSG_ -DRABIT_STRICT_CXX98_ +# 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)/rabit/include -I$(PKGROOT) $(XGB_RFLAGS) PKG_CXXFLAGS= $(SHLIB_OPENMP_CFLAGS) $(SHLIB_PTHREAD_FLAGS) PKG_LIBS = $(SHLIB_OPENMP_CFLAGS) $(SHLIB_PTHREAD_FLAGS) diff --git a/appveyor.yml b/appveyor.yml index 2dc35521a..af0e800c7 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -81,7 +81,7 @@ build_script: - if /i "%target%" == "rmingw" ( make Rbuild && ls -l && - R.exe CMD INSTALL --no-multiarch xgboost*.tar.gz + R.exe CMD INSTALL xgboost*.tar.gz ) # R package: cmake + VC2015 - if /i "%target%" == "rmsvc" ( @@ -98,10 +98,9 @@ test_script: # mingw R package: run the R check (which includes unit tests), and also keep the built binary package - if /i "%target%" == "rmingw" ( set _R_CHECK_CRAN_INCOMING_=FALSE&& - R.exe CMD check xgboost*.tar.gz --no-manual --no-build-vignettes --as-cran --install-args=--build --no-multiarch + R.exe CMD check xgboost*.tar.gz --no-manual --no-build-vignettes --as-cran --install-args=--build ) # MSVC R package: run only the unit tests - # TODO: create a binary msvc-built package to keep as an artifact - if /i "%target%" == "rmsvc" ( cd build_rmsvc%ver%\R-package && R.exe -q -e "library(testthat); setwd('tests'); source('testthat.R')"