aboutsummaryrefslogtreecommitdiff
path: root/dist/etc
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2010-11-12 15:51:18 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2010-11-12 15:51:18 +0200
commitb7c3f32ea4e68a0865761f65d68a011ab9606363 (patch)
tree103c457491742cf2883822d9e1455654065f9737 /dist/etc
parent41d5736ad3bfe495915f17ce6ff6cddede47b53a (diff)
Add sample Android configuration and build system setup/instructions
Diffstat (limited to 'dist/etc')
-rw-r--r--dist/etc/android/README67
-rw-r--r--dist/etc/android/config.make203
-rw-r--r--dist/etc/android/libxsde/Android.mk21
-rw-r--r--dist/etc/android/minimal/Android.mk55
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)