How to update LLVM & Clang on Mac OSX?

2019-01-14 12:23发布

问题:

On my version of Mac OSX (Lion 10.7.1, XCode 4.1), there is LLVM 3.0svn and Clang 2.1. The current versions are LLVM 3.0 and Clang 3.0.

From the XCode web site, it seems that the latest version (4.2.1) still uses LLVM 2.0, and this seems to be a mistake.

Do you know if installing the latest XCode I will get a more recent version of LLVM/Clang?

Do you know of any possible issues installing Clang manually?

Once installed, will the new Clang be used automatically by all the IDEs I have (e.g. NetBeans)?

回答1:

Software vendors are traditionally conservative about updating build tools and with good reason. If you want to use the latest publicly-supported versions of build tools supplied and modified by Apple, you should stick to those in the latest version of Xcode for the OS X release you are running. There are usually good reasons why Apple has not yet updated to the latest cutting-edge versions of open source components, like serious bugs. If you don't need the Apple-supplied modifications and don't mind living on the edge - i.e. no support from Apple and possibly (re-)discovering known problems - and are not planning to ship compiled files to other people's systems, you could install your own versions in, say, /usr/local/bin or by using third-party package managers, like MacPorts http://www.macports.org/ports.php?by=name&substr=clang). You should definitely not try to replace the files at the paths installed by Xcode. Is it worth it? Only you can decide that.



回答2:

The web site is incorrect. Xcode 4.2.1 and 4.2 include LLVM 3.0 and clang 3.0:

clang --version
Apple clang version 3.0 (tags/Apple/clang-211.12) (based on LLVM 3.0svn)

clang++ --version
Apple clang version 3.0 (tags/Apple/clang-211.12) (based on LLVM 3.0svn)

llvm-g++ --version
i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.1.00)

llvm-gcc --version
i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.1.00)



回答3:

You can comfortably build your own LLVM using homebrew:

brew install llvm

There are also versioned packages in case you need a specific version:

  • llvm@3.7
  • llvm@3.8
  • llvm@3.9
  • llvm@4


回答4:

On Mountain Lion 10.8.2 with XCode 4.6, the versions are:

$ clang --version
Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn)
Target: x86_64-apple-darwin12.2.0
Thread model: posix

$ clang++ --version
Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn)
Target: x86_64-apple-darwin12.2.0 
Thread model: posix

$ llvm-g++ --version
i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ llvm-gcc --version
i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

You can update XCode for Lion too from App Store or Apple Developer Account direct download, and install the command line tools, which will update clang & llvm to above versions.



回答5:

OS X Update version 10.9.2 brings XCode to version 5.1 (5B130a), and clang to the latest stable (for OS X):

$ clang --version
Apple LLVM version 5.1 (clang-503.0.38) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.1.0
Thread model: posix

On my Mac llvm-gcc and llvm-g++ are symlinks to this clang:

lrwxr-xr-x  1 root  wheel     5B 25 Oct 16:48 /usr/bin/llvm-gcc -> clang
lrwxr-xr-x  1 root  wheel     7B 25 Oct 16:48 /usr/bin/llvm-g++ -> clang++

My latest R installation is configured to use llvm-gcc-4.2 which would cause error when building SHLIB. Creating symlinks for llvm-gcc-4.2 and llvm-g++-4.2 the same way, instead of replacing LLVM or CLANG, is enough to resolve the errors.