Isso permitirá a instalação do data.table em sistemas/compiladores que não suportam openmp, mesmo que o arquivo Makeconf do site defina SHLIB_OPENMP_CFLAGS
. Este é o caso no macOS a partir do R 3.4.0 com o compilador clang padrão.
Algo como o seguinte deve ser suficiente, note que ifeq
é uma extensão GNU make, então ela precisará ser anotada em seu DESCRIPTION
```concha
CXX11=$(shell "${R_HOME}"/bin/R CMD config CXX11)
ifeq ($(shell $(CXX11) -fopenmp -E -xc++ - 2>&1 >/dev/null && echo 'true'), true)
PKG_CFLAGS=$(SHLIB_OPENMP_CFLAGS)
PKG_LIBS=$(SHLIB_OPENMP_CFLAGS)
fim se
Este problema está bloqueando o uso de data.table
no Mac com a versão devel de R
, que por sua vez bloqueia vários outros pacotes e, por sua vez, o desenvolvimento e atualização de pacotes:
> sessionInfo()
R Under development (unstable) (2017-05-26 r72742)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Sierra 10.12.5
Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets
[6] methods base
loaded via a namespace (and not attached):
[1] compiler_3.5.0 tools_3.5.0
Apenas uma observação de que isso ainda causa problemas (por exemplo, este novo na comunidade R), principalmente após um novo lançamento quando o CRAN ainda não construiu um binário. Agora que você está usando um script configure (https://github.com/Rdatatable/data.table/pull/3951) pode valer a pena adicionar este teste ao script configure para que a compilação funcione com a cadeia de ferramentas nativa do macOS (embora sem paralelização).
@jimhester Obrigado pela nota. Eu pensei que já funcionava com compiladores sem openmp, e isso é verificado em CRAN_Release.cmd aqui: https://github.com/Rdatatable/data.table/blob/b2d618ce291a50872e10fc1ca7137faa8484005a/.dev/CRAN_Release.cmd#L183. Mas claramente estou errado e isso não é suficiente. Vou tentar entender o que você está dizendo e sugerindo.
Fico um pouco frustrado com as alegações de usuários de que o data.table está bloqueando qualquer coisa. É o MacOS que é o problema ... por que não inclui o openmp por padrão? Tudo funciona sem problemas no Linux e no Windows.
Comentários muito úteis
Apenas uma observação de que isso ainda causa problemas (por exemplo, este novo na comunidade R), principalmente após um novo lançamento quando o CRAN ainda não construiu um binário. Agora que você está usando um script configure (https://github.com/Rdatatable/data.table/pull/3951) pode valer a pena adicionar este teste ao script configure para que a compilação funcione com a cadeia de ferramentas nativa do macOS (embora sem paralelização).