mGSTEP
 
F A Q    |    Graphics    |    Notes    |    LLVM    |    Demos    |    Home   
 
Building with LLVM (clang) and the Libobjc2 runtime

The clang compiler (LLVM 19.1.7) can be used to build mGSTEP. Support for the Libobjc2 runtime (v1.9) is limited and does not yet include Distributed Objects. Libobjc2 changes to the NSThread and NSLock classes are employed only when the GCC runtime is not used.

Avoiding build and runtime namespace collisions is critical when multiple compilers and Objective-C runtimes are installed. On my dev platform clang is not the system compiler, Libobjc2 is not the default runtime and there's also a Linux port of Apple's CoreFoundation-Lite installed. Building in this environment requires a make command line that explicitly specifies clang and prefers Libobjc2. I also move the CoreFoundation-Lite headers to avoid conflicts with mGSTEP's internal mini CoreFoundation. Tune the following to your environment:
PATH="$HOME/toolchains/bin:$PATH" \
LD_LIBRARY_PATH="$HOME/toolchains/lib64:$HOME/libobjc2/lib" \
LFLAGS=" -Wl,-rpath,$HOME/toolchains/lib64 -L$HOME/toolchains/lib64 -L/usr/X11/lib -L$HOME/libobjc2/lib" \
CC=clang CFLAGS=" -fblocks -I$HOME/libobjc2/include" \
make

Known issues
  • Automatic Reference Counting (ARC) is not supported although some plumbing for it was added.
  • Forwarding is broken.
  • Distributed Objects is also broken (requires method forwarding).
  • Loading the about panel NIB crashes some examples without this Libobjc2-1.8.x patch.