├── .gitignore ├── Makefile ├── README.md └── spatialite.patch /.gitignore: -------------------------------------------------------------------------------- 1 | # Object files 2 | *.o 3 | 4 | # Libraries 5 | *.lib 6 | *.a 7 | 8 | # Shared objects (inc. Windows DLLs) 9 | *.dll 10 | *.so 11 | *.so.* 12 | *.dylib 13 | 14 | # Executables 15 | *.exe 16 | *.out 17 | *.app 18 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | XCODE_DEVELOPER = $(shell xcode-select --print-path) 2 | IOS_PLATFORM ?= iPhoneOS 3 | 4 | # Pick latest SDK in the directory 5 | IOS_PLATFORM_DEVELOPER = ${XCODE_DEVELOPER}/Platforms/${IOS_PLATFORM}.platform/Developer 6 | IOS_SDK = ${IOS_PLATFORM_DEVELOPER}/SDKs/$(shell ls ${IOS_PLATFORM_DEVELOPER}/SDKs | sort -r | head -n1) 7 | 8 | all: lib/libspatialite.a 9 | lib/libspatialite.a: build_arches 10 | mkdir -p lib 11 | mkdir -p include 12 | 13 | # Copy includes 14 | cp -R build/armv7/include/geos include 15 | cp -R build/armv7/include/spatialite include 16 | cp -R build/armv7/include/*.h include 17 | 18 | # Make fat libraries for all architectures 19 | for file in build/armv7/lib/*.a; \ 20 | do name=`basename $$file .a`; \ 21 | lipo -create \ 22 | -arch armv7 build/armv7/lib/$$name.a \ 23 | -arch armv7s build/armv7s/lib/$$name.a \ 24 | -arch arm64 build/arm64/lib/$$name.a \ 25 | -arch i386 build/i386/lib/$$name.a \ 26 | -arch x86_64 build/x86_64/lib/$$name.a \ 27 | -output lib/$$name.a \ 28 | ; \ 29 | done; 30 | 31 | # Build separate architectures 32 | build_arches: 33 | ${MAKE} arch ARCH=armv7 IOS_PLATFORM=iPhoneOS HOST=arm-apple-darwin 34 | ${MAKE} arch ARCH=armv7s IOS_PLATFORM=iPhoneOS HOST=arm-apple-darwin 35 | ${MAKE} arch ARCH=arm64 IOS_PLATFORM=iPhoneOS HOST=arm-apple-darwin 36 | ${MAKE} arch ARCH=i386 IOS_PLATFORM=iPhoneSimulator HOST=i386-apple-darwin 37 | ${MAKE} arch ARCH=x86_64 IOS_PLATFORM=iPhoneSimulator HOST=x86_64-apple-darwin 38 | 39 | PREFIX = ${CURDIR}/build/${ARCH} 40 | LIBDIR = ${PREFIX}/lib 41 | BINDIR = ${PREFIX}/bin 42 | INCLUDEDIR = ${PREFIX}/include 43 | 44 | CXX = ${XCODE_DEVELOPER}/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ 45 | CC = ${XCODE_DEVELOPER}/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang 46 | CFLAGS = -isysroot ${IOS_SDK} -I${IOS_SDK}/usr/include -arch ${ARCH} -I${INCLUDEDIR} -miphoneos-version-min=7.0 -O3 47 | CXXFLAGS = -stdlib=libc++ -std=c++11 -isysroot ${IOS_SDK} -I${IOS_SDK}/usr/include -arch ${ARCH} -I${INCLUDEDIR} -miphoneos-version-min=7.0 -O3 48 | LDFLAGS = -stdlib=libc++ -isysroot ${IOS_SDK} -L${LIBDIR} -L${IOS_SDK}/usr/lib -arch ${ARCH} -miphoneos-version-min=7.0 49 | 50 | arch: ${LIBDIR}/libspatialite.a 51 | 52 | ${LIBDIR}/libspatialite.a: ${LIBDIR}/libproj.a ${LIBDIR}/libgeos.a ${LIBDIR}/libsqlite3.a ${CURDIR}/spatialite 53 | cd spatialite && env \ 54 | CXX=${CXX} \ 55 | CC=${CC} \ 56 | CFLAGS="${CFLAGS} -Wno-error=implicit-function-declaration" \ 57 | CXXFLAGS="${CXXFLAGS} -Wno-error=implicit-function-declaration" \ 58 | LDFLAGS="${LDFLAGS} -liconv -lgeos -lgeos_c -lc++" ./configure --host=${HOST} --enable-freexl=no --enable-libxml2=no --prefix=${PREFIX} --with-geosconfig=${BINDIR}/geos-config --disable-shared && make clean install-strip 59 | 60 | ${CURDIR}/spatialite: 61 | curl http://www.gaia-gis.it/gaia-sins/libspatialite-sources/libspatialite-4.3.0a.tar.gz > spatialite.tar.gz 62 | tar -xzf spatialite.tar.gz 63 | rm spatialite.tar.gz 64 | mv libspatialite-4.3.0a spatialite 65 | patch -Np0 < spatialite.patch 66 | 67 | ${LIBDIR}/libproj.a: ${CURDIR}/proj 68 | cd proj && env \ 69 | CXX=${CXX} \ 70 | CC=${CC} \ 71 | CFLAGS="${CFLAGS}" \ 72 | CXXFLAGS="${CXXFLAGS}" \ 73 | LDFLAGS="${LDFLAGS}" ./configure --host=${HOST} --prefix=${PREFIX} --disable-shared && make clean install 74 | 75 | ${CURDIR}/proj: 76 | curl -L http://download.osgeo.org/proj/proj-4.9.3.tar.gz > proj.tar.gz 77 | tar -xzf proj.tar.gz 78 | rm proj.tar.gz 79 | mv proj-4.9.3 proj 80 | 81 | ${LIBDIR}/libgeos.a: ${CURDIR}/geos 82 | cd geos && env \ 83 | CXX=${CXX} \ 84 | CC=${CC} \ 85 | CFLAGS="${CFLAGS}" \ 86 | CXXFLAGS="${CXXFLAGS}" \ 87 | LDFLAGS="${LDFLAGS}" ./configure --host=${HOST} --prefix=${PREFIX} --disable-shared && make clean install 88 | 89 | ${CURDIR}/geos: 90 | curl http://download.osgeo.org/geos/geos-3.6.1.tar.bz2 > geos.tar.bz2 91 | tar -xzf geos.tar.bz2 92 | rm geos.tar.bz2 93 | mv geos-3.6.1 geos 94 | 95 | ${LIBDIR}/libsqlite3.a: ${CURDIR}/sqlite3 96 | cd sqlite3 && env LIBTOOL=${XCODE_DEVELOPER}/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool \ 97 | CXX=${CXX} \ 98 | CC=${CC} \ 99 | CFLAGS="${CFLAGS} -DSQLITE_THREADSAFE=1 -DSQLITE_ENABLE_RTREE=1 -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_FTS3_PARENTHESIS=1" \ 100 | CXXFLAGS="${CXXFLAGS} -DSQLITE_THREADSAFE=1 -DSQLITE_ENABLE_RTREE=1 -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_FTS3_PARENTHESIS=1" \ 101 | LDFLAGS="-Wl,-arch -Wl,${ARCH} -arch_only ${ARCH} ${LDFLAGS}" \ 102 | ./configure --host=${HOST} --prefix=${PREFIX} --disable-shared --enable-static && make clean install 103 | 104 | ${CURDIR}/sqlite3: 105 | curl http://www.sqlite.org/2017/sqlite-autoconf-3170000.tar.gz > sqlite3.tar.gz 106 | tar xzvf sqlite3.tar.gz 107 | rm sqlite3.tar.gz 108 | mv sqlite-autoconf-3170000 sqlite3 109 | touch sqlite3 110 | 111 | clean: 112 | rm -rf build geos proj spatialite sqlite3 include lib 113 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | libspatialite-ios 2 | ================= 3 | 4 | A Makefile for automatically downloading and compiling [libspatialite](https://www.gaia-gis.it/fossil/libspatialite/index) (including its dependencies [SQLite](http://sqlite.org/index.html), [GEOS](http://trac.osgeo.org/geos/) and [PROJ.4](https://trac.osgeo.org/proj/)) statically for iOS. 5 | 6 | The resulting library is a "fat" library suitable for multiple architectures. This includes: 7 | 8 | - armv7 (iOS) 9 | - armv7s (iOS) 10 | - arm64 (iOS) 11 | - i386 (iOS Simulator) 12 | - x86_64 (iOS Simulator) 13 | 14 | Requirements 15 | ------------ 16 | 17 | Xcode 6 with Command Line Tools installed. 18 | 19 | Installation 20 | ------------ 21 | 22 | Simply run 23 | 24 | make 25 | -------------------------------------------------------------------------------- /spatialite.patch: -------------------------------------------------------------------------------- 1 | diff -rupN spatialite/src/gaiaaux/gg_utf8.c spatialite-ios/src/gaiaaux/gg_utf8.c 2 | --- spatialite/src/gaiaaux/gg_utf8.c 2012-11-25 12:47:00.000000000 +0100 3 | +++ spatialite-ios/src/gaiaaux/gg_utf8.c 2013-02-20 16:58:56.000000000 +0100 4 | @@ -71,7 +71,7 @@ extern const char *locale_charset (void) 5 | #else /* not MINGW32 - WIN32 */ 6 | #if defined(__APPLE__) || defined(__ANDROID__) 7 | #include 8 | -#include 9 | +//#include 10 | #else /* neither Mac OsX nor Android */ 11 | #include 12 | #include 13 | diff -rupN spatialite/src/gaiageo/gg_shape.c spatialite-ios/src/gaiageo/gg_shape.c 14 | --- spatialite/src/gaiageo/gg_shape.c 2012-11-25 12:47:00.000000000 +0100 15 | +++ spatialite-ios/src/gaiageo/gg_shape.c 2013-02-20 16:59:01.000000000 +0100 16 | @@ -73,7 +73,7 @@ extern const char *locale_charset (void) 17 | #else /* not MINGW32 */ 18 | #if defined(__APPLE__) || defined(__ANDROID__) 19 | #include 20 | -#include 21 | +//#include 22 | #else /* neither Mac OsX nor Android */ 23 | #include 24 | #include 25 | --------------------------------------------------------------------------------