diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2010-11-12 15:51:18 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2010-11-12 15:51:18 +0200 |
commit | b7c3f32ea4e68a0865761f65d68a011ab9606363 (patch) | |
tree | 103c457491742cf2883822d9e1455654065f9737 /dist/etc | |
parent | 41d5736ad3bfe495915f17ce6ff6cddede47b53a (diff) |
Add sample Android configuration and build system setup/instructions
Diffstat (limited to 'dist/etc')
-rw-r--r-- | dist/etc/android/README | 67 | ||||
-rw-r--r-- | dist/etc/android/config.make | 203 | ||||
-rw-r--r-- | dist/etc/android/libxsde/Android.mk | 21 | ||||
-rw-r--r-- | dist/etc/android/minimal/Android.mk | 55 |
4 files changed, 346 insertions, 0 deletions
diff --git a/dist/etc/android/README b/dist/etc/android/README new file mode 100644 index 0000000..31bc804 --- /dev/null +++ b/dist/etc/android/README @@ -0,0 +1,67 @@ +This file describes how to build and use XSD/e with Android. While it should +be possible to build the XSD/e runtime library (libxsde) using GNU make and +the native XSD/e build system, the amount of compiler options one has to +keep track of makes this approach impractical. Instead, the configuration +files and makefiles in this directory implement a split build procedure +where the XSD/e build system is used to generate the XSD/e configuration +header (libxsde/xsde/config.h) as well as the list of source files that +need to be compiled. Then the Android build system is used to compile the +source files and build the libxsde.a library. The XSD/e build system is +transparently invoked by the Android build system when the XSD/e +configuration file is changed. + +This directory also includes the Android makefile (Android.mk) for the +'minimal' C++/Hybrid example (examples/cxx/hybrid/minimal) which shows +how to integrate the libxsde build into your application's build, set +up the include directories, as well as compile the schemas with the +XSD/e compiler. + +To set up an application to use XSD/e, follow these steps: + +1. Unpack the pre-compiled XSD/e package for your host development + platform into your application's 'jni' directory. Rename the + resulting directory to 'xsde' or, alternatively, adjust the + MY_XSDE_DIR variable in steps 4.a/4.b. + +2. Copy the xsde/etc/android/config.make configuration file to the + xsde/config/ directory. The default configuration disables STL, + iostream, and C++ exceptions which can be enabled if supported + by the Android NDK you are using. You may also adjust other + configuration parameters except for those in the "Toolchain" + section. + +3. Copy the xsde/etc/android/libxsde/Android.mk file to the + xsde/libxsde/ directory. + +4.a If you would like to integrate the libxsde build into an existing + application, then in your top-level Android.mk file (in the jni/ + directory), replace the following line at the beginning of the file: + + LOCAL_PATH := $(call my-dir) + + With the following fragment: + + MY_XSDE_DIR := xsde + MY_LOCAL_PATH := $(call my-dir) + + include $(MY_LOCAL_PATH)/$(MY_XSDE_DIR)/libxsde/Android.mk + + LOCAL_PATH := $(MY_LOCAL_PATH) + + Also add the following two lines after the LOCAL_SRC_FILES + definition: + + LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(MY_XSDE_DIR)/libxsde + LOCAL_STATIC_LIBRARIES := libxsde + +4.b Alternatively, if you would like to build the 'minimal' example + from the XSD/e distribution, replace the top-level Android.mk + file with xsde/etc/android/minimal/Android.mk. You will also + need to copy over the driver.cxx and person.xsd files from the + xsde/examples/cxx/hybrid/minimal/ directory. + +5. Run ndk-build in the jni/ directory which should build the libxsde + library as well as the application. + +For information on how to perform schema compilation from the Android +makefile, refer to the sample Android.mk file for the 'minimal' example. diff --git a/dist/etc/android/config.make b/dist/etc/android/config.make new file mode 100644 index 0000000..3c892e0 --- /dev/null +++ b/dist/etc/android/config.make @@ -0,0 +1,203 @@ +# Sample configuration file for Android. This configuration disables +# STL, iostream, and C++ exceptions which can be enabled if supported +# by the Android NDK you are using. For more information, see the +# accompanying README file. +# + +# Toolchain. +# +CC = @echo 'LOCAL_SRC_FILES += xsde/$<' >>xsde-files.mk ; : +CXX = $(CC) +AR := @: +RANLIB := + +# Common XSD/e flags. +# +XSDFLAGS := --generate-inline + + +# Platform. Valid values are: +# +# 'wince' - Windows CE +# 'win32' - Windows 2000, XP, etc. +# 'posix' - POSIX OS, including UNIX/Linux, VxWorks, etc. +# +XSDE_PLATFORM := posix + + +# Platform architecture width in bits. +# +XSDE_ARCH_WIDTH := 32 + + +# Platform byte order. Valid values are 'b' for big-endian and 'l' +# for little-endian. +# +XSDE_BYTEORDER := l + + +# Application character encoding. Valid values are 'utf8' for UTF-8 +# and 'iso8859-1' for ISO-8859-1. Note that this encoding is not +# the same as the XML document encoding that is being parsed or +# serialized. Rather, it is the encoding that is used inside the +# application. When an XML document is parsed, the character data +# is automatically converted to the application encoding. Similarly, +# when an XML document is serialized, the data in the application +# encoding is automatically converted to the resulting document +# encoding. Also don't forget to use the --char-encoding option +# when compiling your schemas if using an encoding other than UTF-8. +# +XSDE_ENCODING := utf8 + + +# Set to 'n' if you don't have STL (std::string, etc.). Also don't +# forget to use the --no-stl option when compiling your schemas. +# +XSDE_STL := n + + +# Set to 'n' if you don't want iterators to conform to the STL +# requirements. This feature requires working <iterator> header +# and allows you to use the standard algorithms such as find_if, +# etc. +# +XSDE_STL_ITERATOR := n + + +# Set to 'n' if you don't have iostream. +# +XSDE_IOSTREAM := n + + +# Set to 'n' if you don't have C++ exceptions. Also don't forget to +# use the --no-exceptions option when compiling your schemas. +# +XSDE_EXCEPTIONS := n + + +# Set to 'n' if your platform doesn't have the "long long int" type or +# the strtoull function. Also don't forget to use the --no-long-long +# option when compiling your schemas. +# +XSDE_LONGLONG := y + + +# Set to 'n' if your platform doesn't have the snprintf function. +# +XSDE_SNPRINTF := y + + +# Set to 'n' if you don't want support for XML Schema validation in +# C++/Parser. Also don't forget to use the --suppress-validation +# option when compiling your schemas. +# +XSDE_PARSER_VALIDATION := y + + +# Set to 'n' if you don't want support for XML Schema validation in +# C++/Serializer. Also don't forget to use the --suppress-validation +# option when compiling your schemas. +# +XSDE_SERIALIZER_VALIDATION := y + + +# Set to 'y' if you would like to have support for regular expressions in +# the XSD/e runtime. If the regexp support is enabled, then the parser and +# serializer validation code will use it to validate the xs:pattern facet. +# If the regexp support is disabled, then this facet will be ignored. The +# regexp support increases the resulting executable size by about 30-50Kb. +# +XSDE_REGEXP := n + + +# Base parser/serializer implementation reuse style. Valid values are: +# +# 'mixin' - virtual inheritance-based reuse (specify --reuse-style-mixin) +# 'tiein' - delegation-based reuse (recommended) +# 'none' - no reuse support (specify --reuse-style-none) +# +XSDE_REUSE_STYLE := tiein + + +# Set to 'y' if you would like the XSD/e runtime and the generated code +# to perform memory management using custom allocator functions provided +# by your application instead of the standard operator new/delete. Also +# don't forget to use the --custom-allocator option when compiling your +# schemas. See the documentation and examples for more information on +# custom allocators. +# +XSDE_CUSTOM_ALLOCATOR := n + + +# Set to 'y' if you would like to include the default implementation of the +# custom allocator into the XSD/e runtime library. This option is primarily +# useful for testing and only makes sense if XSDE_CUSTOM_ALLOCATOR is set +# to 'y'. +# +XSDE_DEFAULT_ALLOCATOR := n + + +# Set to 'y' if you want support for serialization of the C++/Hybrid +# object model to the CDR (Common Data Representation) binary format. +# This functionality requires the ACE library. +# +XSDE_CDR := n + + +# Set to 'y' if you want support for serialization of the C++/Hybrid +# object model to the XDR (eXternal Data Representation) binary format. +# This functionality requires the XDR API which is available out of the +# box on most POSIX systems as part of Sun RPC. On some systems (e.g., +# (Linux, iPhone OS, VxWorks) this API is part of libc in which case +# you don't need to link anything extra. On other platforms, the XDR +# API may require linking to another library (which you can add to the +# LIBS variable above), such as -lrpc (QNX, LynxOS) or -lnsl. On non- +# POSIX platforms you may need to install a third-party library which +# provides the XDR API. Also note that some older versions of the API +# (e.g., those found on LynxOS) may not support serialization of the +# long long type. In this case you will get a compilation error saying +# that xdr_longlong_t and xdr_u_longlong_t are not declared. One way to +# resolve this is to disable the use of the long long type in XSD/e (see +# XSDE_LONGLONG above). +# +XSDE_XDR := n + + +# Set to 'y' if you need to handle XML vocabularies that use XML Schema +# polymorphism (xsi:type or substitution groups). Also don't forget to +# use either --generate-polymorphic (generates polymorphism-aware code) +# or --runtime-polymorphic (generates non-polymorphic code that uses the +# runtime library configured with polymorphism support). Note that support +# for XML Schema polymorphism requires runtime static initialization +# support in the C++ compiler (that is, support for automatic calling +# of constructors for static objects). Furthermore, if the mixin reuse +# style is used (XSDE_REUSE_STYLE) then the generated code requires +# support for dynamic_cast. +# +XSDE_POLYMORPHIC := n + + +# When polymorphism support is enabled (XSDE_POLYMORPHIC), the following +# parameters control the substitution and inheritance hashmaps bucket +# allocation. Because the number of elements in these hashmaps depends +# on the schemas being compiled and thus is fairly static, these hashmaps +# do not perform automatic table resizing. To obtain good performance the +# elements to buckets ratio should be between 0.7 and 0.9. The recommended +# way to ensure this range is to add diagnostics code to your application +# as shown in the documentation and examples. It is also a good idea to +# use prime numbers for bucket counts: 53 97 193 389 769 1543 3079 6151 +# 12289 24593 49157 98317 196613 393241. Inheritance hashmaps are only +# used when validation is enabled. +# +XSDE_PARSER_SMAP_BUCKETS := 53 +XSDE_PARSER_IMAP_BUCKETS := 97 +XSDE_SERIALIZER_SMAP_BUCKETS := 53 +XSDE_SERIALIZER_SMAP_BUCKET_BUCKETS := 53 +XSDE_SERIALIZER_IMAP_BUCKETS := 97 + + +# Options tuning depending on the features selected. +# +ifeq ($(XSDE_EXCEPTIONS),y) +CFLAGS += -fexceptions +endif diff --git a/dist/etc/android/libxsde/Android.mk b/dist/etc/android/libxsde/Android.mk new file mode 100644 index 0000000..76c1180 --- /dev/null +++ b/dist/etc/android/libxsde/Android.mk @@ -0,0 +1,21 @@ +# Android build system makefile for the XSD/e runtime library. See the +# accompanying README file for more information on how to use XSD/e +# with Android. +# + +LOCAL_PATH:= $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := libxsde +LOCAL_CPP_EXTENSION := .cxx + +$(LOCAL_PATH)/xsde/xsde-files.mk: LP := $(LOCAL_PATH) +$(LOCAL_PATH)/xsde/xsde-files.mk: $(LOCAL_PATH)/../config/config.make + @echo "updating XSD/e configuration" + @rm -f $(LP)/xsde/xsde-files.mk $(LP)/xsde/config.h + @$(MAKE) -s -C $(LP) + +-include $(LOCAL_PATH)/xsde/xsde-files.mk + +include $(BUILD_STATIC_LIBRARY) diff --git a/dist/etc/android/minimal/Android.mk b/dist/etc/android/minimal/Android.mk new file mode 100644 index 0000000..41d7615 --- /dev/null +++ b/dist/etc/android/minimal/Android.mk @@ -0,0 +1,55 @@ +# Android build system makefile for the 'minimal' C++/Hybrid example +# (examples/cxx/hybrid/minimal). See the accompanying README file for +# more information on how to use XSD/e with Android. +# +MY_XSDE_DIR := xsde + +# Save the local path and include the XSD/e runtime library makefile. +# +MY_LOCAL_PATH := $(call my-dir) + +include $(MY_LOCAL_PATH)/$(MY_XSDE_DIR)/libxsde/Android.mk + +LOCAL_PATH := $(MY_LOCAL_PATH) + +include $(CLEAR_VARS) + +# Add the XSD/e runtime library to the include search list as well as +# link to the libxsde.a library. +# +LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(MY_XSDE_DIR)/libxsde +LOCAL_STATIC_LIBRARIES := libxsde + +LOCAL_MODULE := minimal +LOCAL_CPP_EXTENSION := .cxx +LOCAL_SRC_FILES := \ +driver.cxx \ +people.cxx \ +people-pimpl.cxx \ +people-pskel.cxx \ +people-simpl.cxx \ +people-sskel.cxx \ + +# Explicit dependency that tells the build system it should compile +# the schema before compiling C++ files. +# +$(LOCAL_PATH)/driver.cxx: $(LOCAL_PATH)/people.hxx + +# XSD/e compiler pattern rules. +# +MY_XSDFLAGS := \ +--no-stl \ +--no-exceptions \ +--no-iostream \ +--generate-parser \ +--generate-serializer \ +--generate-aggregate + +.PRECIOUS: %.hxx %.cxx %-pskel.hxx %-pskel.cxx %-pimpl.hxx %-pimpl.cxx \ +%-sskel.hxx %-sskel.cxx %-simpl.hxx %-simpl.cxx + +%.hxx %.cxx %-pskel.hxx %-pskel.cxx %-pimpl.hxx %-pimpl.cxx \ +%-sskel.hxx %-sskel.cxx %-simpl.hxx %-simpl.cxx: %.xsd + $(LOCAL_PATH)/$(MY_XSDE_DIR)/bin/xsde cxx-hybrid $(MY_XSDFLAGS) $< + +include $(BUILD_SHARED_LIBRARY) |