@@ -105,6 +105,9 @@ useBundledTbb <- function() {
105
105
cmake <- Sys.getenv(" CMAKE" , unset = " cmake" )
106
106
buildType <- Sys.getenv(" CMAKE_BUILD_TYPE" , unset = " Release" )
107
107
verbose <- Sys.getenv(" VERBOSE" , unset = " 0" )
108
+
109
+ cxxFlags <- paste(Sys.getenv(" CPPFLAGS" , " CXXFLAGS" , " CXXPICFLAGS" ), collapse = " " )
110
+ Sys.setenv(CXXFLAGS = cxxFlags )
108
111
109
112
cmakeFlags <- c(
110
113
sprintf(" -DCMAKE_BUILD_TYPE=%s" , buildType ),
@@ -159,20 +162,90 @@ useBundledTbb <- function() {
159
162
160
163
}
161
164
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
+
162
234
163
235
# Main ----
164
236
237
+ tbbSrc <- Sys.getenv(" TBB_SRC" )
165
238
tbbLib <- Sys.getenv(" TBB_LIB" )
166
239
tbbInc <- Sys.getenv(" TBB_INC" )
167
240
168
241
args <- commandArgs(trailingOnly = TRUE )
169
242
if (identical(args , " build" )) {
170
243
if (nzchar(tbbLib ) && nzchar(tbbInc )) {
171
244
useSystemTbb(tbbLib , tbbInc )
172
- } else if (.Platform $ OS.type == " windows" ) {
173
- writeLines(" ** building RcppParallel without tbb backend" )
174
- } else {
245
+ } else if (tbbSrc == " tbb" ) {
175
246
useBundledTbb()
247
+ } else if (tbbSrc == " tbb-2019" ) {
248
+ useOldBundledTbb()
176
249
}
177
250
} else {
178
251
source(" ../R/tbb-autodetected.R" )
0 commit comments