2012年8月11日土曜日

Android NDK で COLLADA dom ライブラリをビルド - pcre ビルド用設定



pcre ビルド用設定



 ソースの配置

「ColladaDom」プロジェクトの[jni/external-libs」ディレクトリに「pcre」ディレクトリを作成する。


「pcre-8.31.tar.bz2」ファイルを、任意のディレクトリに解凍する。

解凍したディレクトリの中の全ファイルを、「ColladaDom」プロジェクトの「jni/external-libs/pcre」ディレクトリの下にコピー。

ソースのパッチ

「config.h」ファイル

「config.h.generic」ファイルをコピーして、「config.h」ファイルを作成。

作成した「config.h」ファイルを以下のように修正。
47行目から49行目をコメントアウト
/* Define to 1 if you have the <bzlib.h> header file. */
//#ifndef HAVE_BZLIB_H
//#define HAVE_BZLIB_H 1
//#endif

135行目から137行目をコメントアウト
/* Define to 1 if you have `strtoq'. */
//#ifndef HAVE_STRTOQ
//#define HAVE_STRTOQ 1
//#endif

最後尾に以下を追加
#define HAVE_STRTOLL 1
#define SUPPORT_LIBZ
#define SUPPORT_UCP
#define SUPPORT_UTF

「pcre.h」ファイル

「pcre.h.generic」ファイルをコピーして、「pcre.h」ファイルを作成。
内容の変更は、無し。

「pcre_chartables.c」ファイル

「pcre_chartables.c.dist」ファイルをコピーして、「pcre_chartables.c」ファイルを作成。
内容の変更は、無し。

「pcre_stringpiece.h」ファイル

「pcre_stringpiece.h.in」ファイルをコピーして、「pcre_stringpiece.h」ファイルを作成。

作成した「pcre_stringpiece.h」ファイルを以下のように修正。
45行目および48行目を修正
#if 0
#define HAVE_TYPE_TRAITS
#include 
#elif 0
#define HAVE_TYPE_TRAITS
#include 
#endif

「pcrecpparg.h」ファイル

「pcrecpparg.h.in」ファイルをコピーして、「pcrecpparg.h」ファイルを作成。

作成した「pcrecpparg.h」ファイルを以下のように修正。
81行目および84行目を修正
  PCRE_MAKE_PARSER(char,               parse_char);
  PCRE_MAKE_PARSER(unsigned char,      parse_uchar);
  PCRE_MAKE_PARSER(short,              parse_short);
  PCRE_MAKE_PARSER(unsigned short,     parse_ushort);
  PCRE_MAKE_PARSER(int,                parse_int);
  PCRE_MAKE_PARSER(unsigned int,       parse_uint);
  PCRE_MAKE_PARSER(long,               parse_long);
  PCRE_MAKE_PARSER(unsigned long,      parse_ulong);
#if 1
  PCRE_MAKE_PARSER(long long,          parse_longlong);
#endif
#if 1
  PCRE_MAKE_PARSER(unsigned long long, parse_ulonglong);
#endif
  PCRE_MAKE_PARSER(float,              parse_float);
  PCRE_MAKE_PARSER(double,             parse_double);
  PCRE_MAKE_PARSER(std::string,        parse_string);
  PCRE_MAKE_PARSER(StringPiece,        parse_stringpiece);

160行目および163行目を修正
MAKE_INTEGER_PARSER(short,              short)     /*                        */
MAKE_INTEGER_PARSER(unsigned short,     ushort)    /*                        */
MAKE_INTEGER_PARSER(int,                int)       /* Don't use semicolons   */
MAKE_INTEGER_PARSER(unsigned int,       uint)      /* after these statement  */
MAKE_INTEGER_PARSER(long,               long)      /* because they can cause */
MAKE_INTEGER_PARSER(unsigned long,      ulong)     /* compiler warnings if   */
#if 1                                              /* the checking level is  */
MAKE_INTEGER_PARSER(long long,          longlong)  /* turned up high enough. */
#endif                                             /*                        */
#if 1                                              /*                        */
MAKE_INTEGER_PARSER(unsigned long long, ulonglong) /*                        */
#endif

Makefile の作成

「jni/external-libs/pcre」ディレクトリに「Application.mk」および「Android.mk」ファイルを作成する。LF改行にしておくこと。

「Application.mk」ファイル

APP_MODULES := pcre pcrecpp
APP_ABI := armeabi-v7a
APP_PLATFORM := android-9

「Android.mk」ファイル

LOCAL_PATH := $(call my-dir)

LOCAL_EXPORT_INCLUDES := $(LOCAL_PATH)

#
# build pcre.a
#
include $(CLEAR_VARS)
LOCAL_MODULE := pcre

LOCAL_SRC_FILES := \
    pcre_byte_order.c \
    pcre_chartables.c \
    pcre_compile.c \
    pcre_config.c \
    pcre_dfa_exec.c \
    pcre_exec.c \
    pcre_fullinfo.c \
    pcre_get.c \
    pcre_globals.c \
    pcre_maketables.c \
    pcre_newline.c \
    pcre_ord2utf8.c \
    pcre_refcount.c \
    pcre_string_utils.c \
    pcre_study.c \
    pcre_tables.c \
    pcre_ucd.c \
    pcre_valid_utf8.c \
    pcre_version.c \
    pcre_xclass.c \
    pcreposix.c

LOCAL_ARM_MODE := arm
LOCAL_CFLAGS := -DHAVE_CONFIG_H

include $(BUILD_STATIC_LIBRARY)

#
# build pcrecpp.a
#
include $(CLEAR_VARS)
LOCAL_MODULE := pcrecpp

LOCAL_CPP_EXTENSION := .cc

LOCAL_SRC_FILES := \
    pcre_scanner.cc \
    pcre_stringpiece.cc \
    pcrecpp.cc

LOCAL_ARM_MODE := arm
LOCAL_CFLAGS := -DHAVE_CONFIG_H
LOCAL_CPPFLAGS := -fexceptions

include $(BUILD_STATIC_LIBRARY)