Versão curta : após muita investigação, não consegui instalar o software no MacOS a partir da origem com llvm
e -mretpoline
flag ou com gcc
e -mindirect-branch=thunk -mfunction-return=thunk -mindirect-branch-register
flags. Isso parece mais geral do que R
e específico para MacOS
, então mudei o título de acordo. Eu suspeito que isso não pode ser feito em um Mac a partir de 27 de abril de 2018. Estou executando o MacOS High Sierra versão 10.13.3 (17D102).
Versão longa : O seguinte se aplica ao GnuPG, que eu decidi instalar antes de R (porque R requer gfortran, que requer gcc, que requer MPFR , que vem com uma assinatura GPG que eu queria verificar). Eu segui as etapas para instalar o GPG no Git .
Últimas LLVM (com Homebrew)
O LLVM da Apple falha (veja abaixo), então eu usei o LLVM clang 6 para consertar isso e instalei com o homebrew (ele derrota um pouco o propósito de compilar a partir da fonte com flags específicos, mas eu estava ficando sem tempo). Eu instalei o homebrew com:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
atualizou-o duas vezes com
brew update
Instalar o clang no Homebrew exigia o XCode, então eu instalei isso na App Store. Em seguida, segui os passos em esta página :
brew install --with-toolchain llvm
Em seguida, adicionei o sinal -mretpoline
a ambos os C
, adicionei o caminho aos compiladores C
e C++
e chamei os scripts de shell do GPG:
export CFLAGS='-mretpoline'
export CC=/usr/local/opt/llvm/bin/clang
export CXX=/usr/local/opt/llvm/bin/clang++
./autogen.sh
./configure --sysconfdir=/etc --enable-maintainer-mode && make
Eu recebi este erro:
checking whether the C compiler works... no
O arquivo de log config.log
fornece mais detalhes:
configure:4049: /usr/local/opt/llvm/bin/clang -mretpoline conftest.c >&5
fatal error: error in backend: MachO doesn't support COMDATs, '__llvm_retpoline_r11' cannot be lowered.
clang-6.0: error: clang frontend command failed with exit code 70 (use -v to see invocation)
Este tópico com um comentário de janeiro de 2018 na parte inferior dizendo que o Mac ainda não é compatível com -mretpoline
:
samkellett: @chandlerc is MacOS support omitted intentionally (ie. not implemented yet)? chandlerc: Not at all, I just don't have a Mac system to test with...
Não tem resposta desde então. Então, instalar com o LLVM falhou.
GCC (com Homebrew)
Outra alternativa foi compilar com gcc
em vez de LLVM. Eu instalei a versão mais recente do clang (6.0) com
brew install gcc
Adicionei as sinalizações gcc
de esta página , que são diferentes do LLVM. Esse script bash adiciona os sinalizadores a C
e C++
, fornece os caminhos para os dois compiladores e chama os scripts de shell do GPG:
export CFLAGS='-mindirect-branch=thunk -mfunction-return=thunk -mindirect-branch-register'
export CXXFLAGS=$CFLAGS
export CC=/usr/local/opt/gcc/bin/gcc-7
export CXX=/usr/local/opt/gcc/bin/g++-7
./autogen.sh
./configure --sysconfdir=/etc --enable-maintainer-mode && make
e novamente recebo o erro:
checking whether the C compiler works... no
O arquivo de log config.log
fornece mais detalhes:
configure:4027: checking whether the C compiler works
configure:4049: /usr/local/opt/gcc/bin/gcc-7 -mindirect-branch=thunk -mfunction-return=thunk -mindirect-branch-register conftest.c >&5
Undefined symbols for architecture x86_64:
"__x86_return_thunk", referenced from:
_main in ccZuBhFQ.o
(maybe you meant: ___x86_return_thunk)
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
configure:4053: $? = 1
configure:4091: result: no
É estranho que o compilador saiba sobre o nome de som similar com um sublinhado extra.
Portanto, gcc
falhou também. E agora eu estou perdido.
Apêndice: LLVM da Apple
O seguinte script bash exporta os sinalizadores para make
e chama os scripts de shell do GnuPG:
export CFLAGS='-mretpoline'
export CXXFLAGS=$CFLAGS
echo $CFLAGS
echo $CXXFLAGS
./autogen.sh
./configure --sysconfdir=/etc --enable-maintainer-mode && make
Ele falha com o compilador que vem da Apple, mas mostra que os sinalizadores estão chegando ao compilador:
configure:4045: gcc -mretpoline -mindirect-branch=thunk -mfunction-return=thunk -mindirect-branch-register conftest.c >&5
clang: error: unknown argument: '-mretpoline'
O comentário de So @ seth está certo em como enviar sinalizadores para o compilador.