@@ -4,15 +4,18 @@ dllInfo <- NULL
44
55.onLoad <- function (libname , pkgname ) {
66
7- # load tbb if we aren't on windows
7+ # load tbb on supported platforms
88 sysname <- Sys.info()[' sysname' ]
9- if (sysname %in% c(" Linux" , " Darwin" )) {
10- if (sysname == " Darwin" )
11- ext = " .dylib"
12- else if (sysname == " Linux" )
13- ext = " .so.2"
14- dll <- system.file(paste(" lib/libtbb" , ext , sep = " " ), package = " RcppParallel" )
15- dllInfo <<- dyn.load(dll , local = FALSE , now = TRUE )
9+ tbbSupported <- list (
10+ " Darwin" = " libtbb.dylib" , " Linux" = " libtbb.so.2" , " Windows" = " tbb.dll"
11+ )
12+ if (sysname %in% names(tbbSupported )) {
13+ dll <- system.file(paste(" lib/" , tbbSupported [[sysname ]], sep = " " ), package = " RcppParallel" )
14+ if (! file.exists(dll )) {
15+ warning(paste(" TBB library" , dll , " not found." ))
16+ } else {
17+ dllInfo <<- dyn.load(dll , local = FALSE , now = TRUE )
18+ }
1619 }
1720
1821 # load the package library
@@ -27,7 +30,7 @@ dllInfo <- NULL
2730 # unload the package library
2831 library.dynam.unload(" RcppParallel" , libpath )
2932
30- # unload tbb if we loaded it (i.e. aren't on windows)
33+ # unload tbb if we loaded it
3134 if (! is.null(dllInfo ))
3235 dyn.unload(dllInfo [[" path" ]])
3336}
@@ -50,7 +53,8 @@ setThreadOptions <- function(numThreads = "auto", stackSize = "auto") {
5053 else
5154 stackSize <- as.integer(stackSize )
5255
53- if (Sys.info()[' sysname' ] %in% c(" Linux" , " Darwin" )) {
56+ # Call setThreadOptions if using tbb
57+ if (! is.null(dllInfo )) {
5458 invisible (.Call(" setThreadOptions" , numThreads , stackSize ,
5559 PACKAGE = " RcppParallel" ))
5660 }
0 commit comments