Compilers on the Mac

The version of compiler you’re running will affect all the software you compile.

Unfortunately, the default changes on the Mac. It dependsĀ on:

  • the version of OS X you’re running
  • whether you installed Xcode (and/or the Command Line Tools) and, if so,
  • what version of Xcode you have installed

So, how does it affect the software?

For starters, you’ll find some just doesn’t compile. E.g. take a look at some of the problems installing Ruby under Lion:

So, here’s a small guide.

Compilers have a front-end, that contains the parser and semantic analysis for the programming language and generates an intermediate representation of your code, and a backend which takes the stuff the front-end produced, optimizes it, and generates assembly code.

  • GCC: contains both front-ends for various languages and back-ends for many processor architectures
  • LLVM: a set of back-ends for various architectures
  • clang: a new front-end for C, Objective-C, and C++, uses the LLVM back-ends This generates more readable errors and warnings and shorter compile times. There may also be incompatibilities or bugs as clang is still very young
  • LLVM-GCC: is a GCC front-end with an LLVM back-end. LLVM’s back-end is faster than GCCs

clang’s (Objective-)C++ support is far from being complete so it calls llvm-gcc when it encounters a C++ source file. It also contains the static analyzer that is now integrated into Xcode. Some people say LLVM’s back-end generates better code than GCC’s but your mileage may vary. LLVM also supports link-time optimizations (which you can enable in Xcode’s project settings). They may produce faster code.

Apple wants to replace GCC with clang in the future because they have a policy against GPLv3 licensed code (GCC 4.2 is the last version that’s licensed under GPLv2).

Try it out:

gcc –version
i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5659)

means you’re running gcc.




Leave a Reply

Your email address will not be published. Required fields are marked *