@@ -105,6 +105,9 @@ useBundledTbb <- function() {
105105 cmake <- Sys.getenv(" CMAKE" , unset = " cmake" )
106106 buildType <- Sys.getenv(" CMAKE_BUILD_TYPE" , unset = " Release" )
107107 verbose <- Sys.getenv(" VERBOSE" , unset = " 0" )
108+
109+ cxxFlags <- paste(Sys.getenv(" CPPFLAGS" , " CXXFLAGS" , " CXXPICFLAGS" ), collapse = " " )
110+ Sys.setenv(CXXFLAGS = cxxFlags )
108111
109112 cmakeFlags <- c(
110113 sprintf(" -DCMAKE_BUILD_TYPE=%s" , buildType ),
@@ -159,20 +162,90 @@ useBundledTbb <- function() {
159162
160163}
161164
165+ useOldBundledTbb <- function () {
166+
167+ useTbbPreamble(" tbb-2019/include" )
168+ owd <- setwd(" tbb-2019/src" )
169+ on.exit(setwd(owd ), add = TRUE )
170+
171+ makeArgs <- " stdver=c++11"
172+ cxxFlags <- c(
173+ " -DTBB_NO_LEGACY=1" ,
174+ " -DTBB_SUPPRESS_DEPRECATED_MESSAGES=1" ,
175+ Sys.getenv(c(" CPPFLAGS" , " CXXFLAGS" ))
176+ )
177+
178+ cxxFlags <- paste(cxxFlags , collapse = " " )
179+ Sys.setenv(
180+ CONLY = Sys.getenv(" CC" , unset = " cc" ),
181+ CPLUS = Sys.getenv(" CXX" , unset = " c++" ),
182+ CXXFLAGS = paste(cxxFlags , collapse = " " ),
183+ PIC_KEY = Sys.getenv(" CXXPICFLAGS" , unset = " -fPIC" ),
184+ WARNING_SUPPRESS = " "
185+ )
186+
187+ if (.Platform $ OS.type == " windows" ) {
188+
189+ Sys.setenv(
190+ MSYS2_ARG_CONV_EXCL = " *" ,
191+ CYGWIN = " nodosfilewarning" ,
192+ WINARM64_CLANG = " $(WINARM64_CLANG)"
193+ )
194+
195+ makeArgs <- " rtools=true compiler=gcc runtime=mingw"
196+
197+ }
198+
199+ writeLines(" ** configuring tbb" )
200+ system(" make info" )
201+ writeLines(" " )
202+
203+ writeLines(" ** building tbb" )
204+ makeTargets <- c(" tbb_build_prefix=lib" , " tbb_release" , " tbbmalloc_release" )
205+ output <- system2(" make" , c(" -e" , makeArgs , makeTargets ), stdout = TRUE , stderr = TRUE )
206+ status <- attr(output , " status" )
207+ if (! is.null(status ) && status != 0 ) {
208+ writeLines(output , con = stderr())
209+ stop(" error building tbb" )
210+ }
211+
212+ shlibPattern <- switch (
213+ Sys.info()[[" sysname" ]],
214+ Windows = " ^tbb.*\\ .dll$" ,
215+ Darwin = " ^libtbb.*\\ .dylib$" ,
216+ " ^libtbb.*\\ .so.*$"
217+ )
218+
219+ setwd(owd )
220+ tbbFiles <- list.files(
221+ file.path(getwd(), " tbb-2019/build/lib_release" ),
222+ pattern = shlibPattern ,
223+ recursive = TRUE ,
224+ full.names = TRUE
225+ )
226+
227+ dir.create(" tbb/build/lib_release" , recursive = TRUE , showWarnings = FALSE )
228+ file.copy(tbbFiles , " tbb/build/lib_release" , overwrite = TRUE )
229+ unlink(" tbb/build-tbb" , recursive = TRUE )
230+ writeLines(" ** finished building tbb" )
231+
232+ }
233+
162234
163235# Main ----
164236
237+ tbbSrc <- Sys.getenv(" TBB_SRC" )
165238tbbLib <- Sys.getenv(" TBB_LIB" )
166239tbbInc <- Sys.getenv(" TBB_INC" )
167240
168241args <- commandArgs(trailingOnly = TRUE )
169242if (identical(args , " build" )) {
170243 if (nzchar(tbbLib ) && nzchar(tbbInc )) {
171244 useSystemTbb(tbbLib , tbbInc )
172- } else if (.Platform $ OS.type == " windows" ) {
173- writeLines(" ** building RcppParallel without tbb backend" )
174- } else {
245+ } else if (tbbSrc == " tbb" ) {
175246 useBundledTbb()
247+ } else if (tbbSrc == " tbb-2019" ) {
248+ useOldBundledTbb()
176249 }
177250} else {
178251 source(" ../R/tbb-autodetected.R" )
0 commit comments