clang trunk if -fobjc-runtime-1.7 is specified and provides significantly
better interoperability with foreign exceptions.
Note: Most of the exception tests will not pass with gcc or clang < 3.3. They
test things that are impossible to implement quite correctly with the
GCC-compatible exception ABI.
Also updated the release notes to reflect recent improvements.
GNUMakefile rather than the Makefile.
This fixes segfaults in programs compiled with Clang using -fobjc-nonfragile-abi
on Linux x86-32, for a GNUmakefile-based build with GNUstep Make active.
systems after some further testing.
Currently, we have three build systems for libobjc2:
- GNUmakefile, which provides a number of options but not very cleanly (i.e.
the only way of knowing what they are is to read the source) and doesn't
correctly build the Objective-C++ runtime.
- Makefile, which works correctly for a single configuration, but requires
tweaking by hand to build others.
- Makefile.clang, which is experimental, doesn't really work, and confuses
people.
The new CMake system:
- Correctly installs in a GNUstep location if one exists, or in a system
location otherwise. This is configurable at build time.
- Provides inspectable options for all of the configuration choices (run ccmake
to see them all)
- Easily supports cross-compilation and out-of-tree builds
- Is easy to extend and inspect
- Automatically builds the LLVM optimisations (which already use CMake, as it's
the only clean way of building LLVM optimisations out of tree) and can be
easily configured not to if they are not required.
- Will build a single libobjc.so for platforms that provide a separate C++
runtime and a separate libobjcxx for ones that don't.
- Can generate build files for make, ninja, XCode, Eclipse, and Visual Studio
For those unfamiliar with CMake, the best way of building is an out-of-tree
build. For the simplest case, it's just a matter of:
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo -E make install
If you wish to edit any of the configuration options, the easiest way is to run
ccmake instead of cmake. You can also run ccmake . from the build directory to
edit the options after initial configuration.
For faster builds , try using ninja instead of make. Add -G Ninja to the
[c]cmake command line and then run ninja instead of make.
Linux x86-32.
If both -03 and -fobjc-nonfragile-abi are used, -march=i586 is required (at
least on my Linux machine). This flag was lost during the recent GNUmakefile
rewrite (see r35690).
In addition, I also added MinGW32 and pthread flags used previously in the
GNUmakefile but missing in the Makefile.