Compilation of ABIC under OS X
OS X poses three challenges:
- Fat binaries, i.e. combining 32-bit and 64-bit binaries into one executable file
- C++-Standard-library (-stdlib=libstdc++ versus -stdlib=libc++)
- Minimum supported OS X version (-mmacosx-version-min=10.6)
As an additional challenge, all three must be consistent among all subprojects.
Basically, you need to add the following flags to all calls to configure:
CFLAGS="-arch i386 -arch x86_64 -mmacosx-version-min=10.6"
CXXFLAGS="-arch i386 -arch x86_64 -stdlib=libstdc++ -mmacosx-version-min=10.6"
LDFLAGS="-arch i386 -arch x86_64"
Of course, the exact flags depend on your choice of C++-Standard-library and minimum supported OS X version.
Here are some of the configure/cmake commands I used.
ZLIB:
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE="Release" -DCMAKE_OSX_ARCHITECTURES="i386;x86_64" -DCMAKE_C_FLAGS="-mmacosx-version-min=10.6" -DCMAKE_CXX_FLAGS="-mmacosx-version-min=10.6" -DCMAKE_INSTALL_PREFIX=$LIBSDIR/install $LIBSDIR/zlib-1.2.8
LZMA (xz):
./configure --prefix=$LIBSDIR/install CFLAGS="-arch i386 -arch x86_64 -mtune=generic -O2 -mmacosx-version-min=10.6" CXXFLAGS="-arch i386 -arch x86_64 -mtune=generic -O2 -mmacosx-version-min=10.6" LDFLAGS="-arch i386 -arch x86_64" --disable-dependency-tracking
GraphicsMagick:
./configure --prefix=$LIBSDIR/install --disable-installed --with-quantum-depth=16 --without-modules --disable-shared --disable-openmp CPPFLAGS="-I$LIBSDIR/install/include" CFLAGS="-arch i386 -arch x86_64 -O1 -mmacosx-version-min=10.6" CXXFLAGS="-arch i386 -arch x86_64 -O1 -stdlib=libstdc++ -mmacosx-version-min=10.6" LDFLAGS="-arch i386 -arch x86_64 -L$LIBSDIR/install/lib" LIBS="-llzma -ljbig -ljpeg"
I used -O1 with GraphicsMagick because I had crashes in writing TIFFs with -O2.
wxWidgets:
./configure CFLAGS=-Os CXXFLAGS="-Os -stdlib=libstdc++" --with-macosx-version-min=10.6 --disable-debug --disable-shared --disable-compat28 --with-opengl --with-libjpeg=sys --with-libpng=sys --with-libtiff=sys --with-expat=builtin --with-osx_cocoa --enable-universal-binary=i386,x86_64 --prefix=$LIBSDIR/install CPPFLAGS="-I$LIBSDIR/install/include" LDFLAGS="-L$LIBSDIR/install/lib" LIBS=" -llzma -ljbig -ljpeg "
OpenCV:
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE="Release" -DCMAKE_OSX_ARCHITECTURES="i386;x86_64" -DCMAKE_C_FLAGS="-mmacosx-version-min=10.6" -DCMAKE_CXX_FLAGS="-mmacosx-version-min=10.6 -stdlib=libstdc++" -DENABLE_PRECOMPILED_HEADERS=OFF -DBUILD_SHARED_LIBS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DWITH_WIN32UI=OFF -DWITH_QT=OFF -DWITH_CUDA=OFF -DWITH_CUFFT=OFF -DBUILD_ZLIB=OFF -DBUILD_PNG=OFF -DBUILD_JPEG=OFF -DBUILD_TIFF=OFF -DBUILD_JASPER=OFF -DBUILD_OPENEXR=OFF -DWITH_OPENEXR=OFF -DWITH_OPENGL=OFF -DWITH_NVCUVID=OFF -DWITH_CUBLAS=OFF -DWITH_OPENNI=OFF -DWITH_OPENMP=OFF -DEIGEN_INCLUDE_PATH=$LIBSDIR/eigen-3.2.1 -DZLIB_ROOT=$LIBSDIR/install -DWITH_TBB=OFF -DPNG_PNG_INCLUDE_DIR=$LIBSDIR/install/include -DPNG_LIBRARY=$LIBSDIR/install/lib/libpng16.a -DTIFF_INCLUDE_DIR=$LIBSDIR/install/include -DTIFF_LIBRARY=$LIBSDIR/install/lib/libtiff.a -DJPEG_INCLUDE_DIR=$LIBSDIR/install/include -DJPEG_LIBRARY=$LIBSDIR/install/lib/libjpeg.a -DJASPER_INCLUDE_DIR=$LIBSDIR/install/include -DJASPER_LIBRARIES=$LIBSDIR/install/lib/libjasper.a -DCMAKE_INSTALL_PREFIX=$LIBSDIR/install -DCMAKE_EXE_LINKER_FLAGS="-L$LIBSDIR/install/lib -ljbig -llzma" -DCMAKE_SHARED_LINKER_FLAGS="-L$LIBSDIR/install/lib -ljbig -llzma" $LIBSDIR/opencv/opencv-2.4.8
The resulting build script looks similar to this:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74 | #!/bin/bash
export LIBSDIR=/your/path/to/install
# wxWidgets
export wxWidgets_ROOT_DIR=$LIBSDIR
export wxWidgets_CONFIG_EXECUTABLE=$wxWidgets_ROOT_DIR/bin/wx-config
# JPG
export JPEG_INCLUDE_DIR=$LIBSDIR/include
export JPEG_LIBRARY=$LIBSDIR/lib/libjpeg.a
# PNG
export PNG_PNG_INCLUDE_DIR=$LIBSDIR/include
export PNG_LIBRARY=$LIBSDIR/lib/libpng16.a
# tiff
export TIFF_INCLUDE_DIR=$LIBSDIR/include
export TIFF_LIBRARY=$LIBSDIR/lib/libtiff.a
# ZLIB
export ZLIB_ROOT=$LIBSDIR
export ZLIB_INCLUDE_DIR=$ZLIB_ROOT/include
export ZLIB_LIBRARY=$ZLIB_ROOT/lib/libz.a
# LibLZMA
export LIBLZMA_INCLUDE_DIR=$LIBSDIR/include
export LIBLZMA_LIBRARY=$LIBSDIR/lib/liblzma.a
# OpenJPEG
export OPENJPEG_ROOT=$LIBSDIR
export OPENJPEG_NAMES=libopenjp2.a
export OPENJPEG_INCLUDE_DIR=$LIBSDIR/include/openjpeg-2.0
# WebP
export PC_WEBP_INCLUDE_DIRS=$LIBSDIR/include
export PC_WEBP_LIBRARY_DIRS=$LIBSDIR/lib
export WEBP_LIBRARY=$LIBSDIR/lib/libwebp.a
# Jasper
export JASPER_INCLUDE_DIR=$LIBSDIR/include
export JASPER_LIBRARIES=$LIBSDIR/lib/libjasper.a
# LittleCMS
export PC_LCMS2_INCLUDEDIR=$LIBSDIR/include
export PC_LCMS2_LIBDIR=$LIBSDIR/lib
export LCMS2_LIBRARIES=$LIBSDIR/lib/liblcms2.a
# ImageMagick
export ImageMagick_ROOT=$LIBSDIR
export ImageMagick_INCLUDE_DIRS=$ImageMagick_ROOT/include/GraphicsMagick
export ImageMagick_MagickPP_LIBRARY=$ImageMagick_ROOT/lib/libGraphicsMagick++.a
export ImageMagick_MagickWand_LIBRARY=$ImageMagick_ROOT/lib/libGraphicsMagickWand.a
export ImageMagick_MagickCore_LIBRARY=$ImageMagick_ROOT/lib/libGraphicsMagick.a
# OpenCV
export OpenCV_DIR=$LIBSDIR
# Google Test
export GOOGLE_TEST_ROOT=/Users/romanhiestand/dev/libs_univ/gtest
export GOOGLE_TEST_INCLUDE=$GOOGLE_TEST_ROOT/gtest-1.7.0/include
export GOOGLE_TEST_LIBRARY=$GOOGLE_TEST_ROOT/build_univ/libgtest.a
export ABIC_ADDITIONAL_LINK_LIBRARIES="-L$LIBSDIR $LIBSDIR/lib/libjbig.a $LIBSDIR/lib/libbz2.a"
export CMAKE_OSX_DEPLOYMENT_TARGET=10.6
export CMAKE_OSX_SYSROOT="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk"
mkdir build_osx_univ
cd build_osx_univ
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE="Release" -DCMAKE_VERBOSE_MAKEFILE=FALSE -DCMAKE_CXX_FLAGS="-stdlib=libstdc++" -DABIC_REMOVE_ADDITIONAL_LIBRARIES=TRUE -DABIC_COMPILER_SUPPORTS_CXX11=FALSE -DCMAKE_OSX_ARCHITECTURES="i386;x86_64" -DCMAKE_OSX_DEPLOYMENT_TARGET=$CMAKE_OSX_DEPLOYMENT_TARGET -DCMAKE_OSX_SYSROOT=$CMAKE_OSX_SYSROOT -DGOOGLE_TEST_INCLUDE=$GOOGLE_TEST_INCLUDE -DGOOGLE_TEST_LIBRARY=$GOOGLE_TEST_LIBRARY -DOpenCV_DIR=$OpenCV_DIR -DOpenCV_STATIC=ON -DABIC_ADDITIONAL_LINK_LIBRARIES="$ABIC_ADDITIONAL_LINK_LIBRARIES" -DLIBLZMA_INCLUDE_DIR=$LIBLZMA_INCLUDE_DIR -DLIBLZMA_LIBRARY=$LIBLZMA_LIBRARY -DJASPER_INCLUDE_DIR=$JASPER_INCLUDE_DIR -DJASPER_LIBRARIES=$JASPER_LIBRARIES -DPC_WEBP_INCLUDE_DIRS=$PC_WEBP_INCLUDE_DIRS -DPC_WEBP_LIBRARY_DIRS=$PC_WEBP_LIBRARY_DIRS -DWEBP_LIBRARY=$WEBP_LIBRARY -DPC_LCMS2_INCLUDEDIR=$PC_LCMS2_INCLUDEDIR -DPC_LCMS2_LIBDIR=$PC_LCMS2_LIBDIR -DLCMS2_LIBRARIES=$LCMS2_LIBRARIES -DwxWidgets_ROOT_DIR=$wxWidgets_ROOT_DIR -DwxWidgets_CONFIG_EXECUTABLE=$wxWidgets_CONFIG_EXECUTABLE -DZLIB_ROOT=$ZLIB_ROOT -DZLIB_LIBRARY=$ZLIB_LIBRARY -DPNG_PNG_INCLUDE_DIR=$PNG_PNG_INCLUDE_DIR -DPNG_LIBRARY=$PNG_LIBRARY -DTIFF_INCLUDE_DIR=$TIFF_INCLUDE_DIR -DTIFF_LIBRARY=$TIFF_LIBRARY -DJPEG_INCLUDE_DIR=$JPEG_INCLUDE_DIR -DJPEG_LIBRARY=$JPEG_LIBRARY -DOPENJPEG_ROOT=$OPENJPEG_ROOT -DOPENJPEG_NAMES=$OPENJPEG_NAMES -DOPENJPEG_INCLUDE_DIR=$OPENJPEG_INCLUDE_DIR -DImageMagick_INCLUDE_DIRS=$ImageMagick_INCLUDE_DIRS -DImageMagick_Magick++_LIBRARY=$ImageMagick_MagickPP_LIBRARY -DImageMagick_MagickWand_LIBRARY=$ImageMagick_MagickWand_LIBRARY -DImageMagick_MagickCore_LIBRARY=$ImageMagick_MagickCore_LIBRARY -DImageMagick_Magick++_INCLUDE_DIR=$ImageMagick_INCLUDE_DIRS -DImageMagick_MagickCore_INCLUDE_DIR=$ImageMagick_INCLUDE_DIRS -DImageMagick_MagickWand_INCLUDE_DIR=$ImageMagick_INCLUDE_DIRS ../src
make
cd ..
|