aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2011-02-10 10:25:23 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2011-02-10 10:25:23 +0200
commit9d45c2a295513066b2d8d602b0ef3e92ebfed5ed (patch)
tree3ea404342bf8762db36ec555f1188c1c78251f67
parent709cec02d3566b8f359b109440b50facceaab86a (diff)
Add support for XCode project-based build for iOS
-rw-r--r--dist/INSTALL25
-rw-r--r--dist/etc/ios/README140
-rw-r--r--dist/etc/ios/config-xcode.make202
3 files changed, 350 insertions, 17 deletions
diff --git a/dist/INSTALL b/dist/INSTALL
index ff48ba2..434c1a2 100644
--- a/dist/INSTALL
+++ b/dist/INSTALL
@@ -12,8 +12,8 @@ GNU make
This section provides general instructions for building the XSD/e
runtime and examples with GNU make. For additional information on
-building with XCode 3.1 iPhone SDK see the corresponding notes at
-the end of this document.
+building for iPhone/iOS and Android NDK see the corresponding notes
+at the end of this document.
The first step in building the source code with GNU make is to
configure the runtime library by editing the config/config.make
@@ -91,21 +91,12 @@ and link your executables with the libxsde\xsde\xsde.lib
library.
-Notes on XCode 3.1.x iPhone SDK
--------------------------------
-
-You can find two sample configuration files for this development
-environment in the etc/iphone/ directory. The first configuration
-file is for the device and the other is for the simulator. You will
-need to copy one of these files to the config/ directory and rename
-it to config.make. If your iPhone SDK is installed in a location
-other than the default (/Developer) then you will need to adjust
-the paths at the beginning of the configuration file. You may also
-need to adjust the iPhone SDK version (e.g., 2.1 or 2.2 instead of
-2.0) as well as the C and C++ compiler executable names if you are
-using newer versions of XCode. Additionally, you may also want to
-check other configuration parameters (e.g., the use of iostream,
-STL, C++ exceptions, etc; they are all enabled by default).
+Notes on XCode and iPhone/iOS SDK
+---------------------------------
+
+You can find sample configuration files for iPhone/iOS in the
+etc/ios/ directory. The accompanying README file provides step-by-
+step instructions on how to use XSD/e with iOS.
Notes on Android NDK
diff --git a/dist/etc/ios/README b/dist/etc/ios/README
new file mode 100644
index 0000000..5edfcb2
--- /dev/null
+++ b/dist/etc/ios/README
@@ -0,0 +1,140 @@
+This file describes how to build and use XSD/e with XCode and iPhone/iOS.
+
+It is possible to build the XSD/e runtime library (libxsde) and examples
+using GNU make and the native XSD/e build system. It is also possible to
+create an XCode project and build the XSD/e runtime from the XCode IDE.
+The latter approach allows you to make sure the XSD/e runtime and your
+application are built with exactly the same compiler options and without
+having to manually copy the options from the XCode project to the XSD/e
+configuration file. The following two sections describe each approach
+in more detail.
+
+
+GNU make Build
+--------------
+
+A number of sample configuration files are provided for the GNU make-
+based build. The config-device-*.make files are for the device and
+config-simulator-*.make are for the simulator. You will need to copy
+one of these files to the config/ directory and rename it to config.make.
+If your XCode is installed in a location other than the default
+(/Developer) then you will need to adjust the paths at the beginning
+of the configuration file. You may also need to adjust the iOS SDK
+version (e.g., 4.0 or 4.2 instead of 4.1) as well as the C and C++
+compiler flags, notably the target architecture (-arch). Additionally,
+you may also want to check other configuration parameters (e.g., the
+use of iostream, STL, C++ exceptions, etc; they are all enabled by
+default).
+
+
+XCode Build
+-----------
+
+For this approach the config-xcode.make configuration file included in
+this directory implements 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 XCode project is created to compile the source files
+and build the libxsde.a library.
+
+The following step-by-step instructions show how to build the XSD/e runtime
+library using this method as well as how to integrate XSD/e into your
+application.
+
+To build the XSD/e runtime library (libxsde.a), perform the following steps:
+
+1. Unpack the pre-compiled XSD/e package for Mac OS X. In the rest of the
+ steps we will refer to the resulting XSD/e directory as xsde-x.y.z.
+
+2. Start a new terminal window and run the following commands:
+
+ cd xsde-x.y.z
+ cp etc/iphone/config-xcode.make config/config.make
+
+ Don't close the terminal.
+
+3. Edit config/config.make and adjust the XSD/e configuration to suit your
+ requirements.
+
+4. In the terminal, execute:
+
+ cd libxsde
+ make
+
+ If the make command is not found, try /Developer/usr/bin/make (or your
+ alternative XCode installation directory).
+
+
+5. Start XCode and perform the following steps:
+
+ 5.1 Select "File"->"New Project"
+
+ 5.2 In the opened dialog select "iOS Library"->"Cocoa Touch Static
+ Library". Click "Choose...".
+
+ 5.3 In the next dialog type libxsde in the "Save As" field and navigate
+ to the xsde-x.y.z directory. Click "Save".
+
+ 5.4 Next you should see a warning dialog saying that the libxsde directory
+ already exists. This is expected so click "Replace".
+
+ 5.5 In the project window in the "Groups & Files" list select "Other
+ Sources" group, then select "Project"->"Add to Project...".
+
+ 5.6 In the opened dialog navigate to the xsde-x.y.z/libxsde directory and
+ select the src directory. Click "Add".
+
+ 5.7 In the next dialog leave the default settings and click "Add". Now
+ you should see multiple source files (.cxx and .c) listed in the
+ "Other Sources" group.
+
+ 5.8 Next select "Project"->"Edit Project Settings", "Build" tab. In the
+ "Configurations" drop-down list select "All Configurations".
+
+ 5.9 Scroll down to the "Search Paths" section and add . (dot) to the
+ "Header Search Paths" field.
+
+ 5.10 Build the project for all the desired configurations (for example,
+ Debug/Release, Device/Simulator, ARMv6/ARMv7, etc).
+
+6. In the terminal window create "fat" libraries by running the following
+ commands (which may need to be adjusted depending on the configurations
+ that you have built):
+
+ cd build
+ lipo -output libxsde.a -create Release-iphonesimulator/liblibxsde.a Release-iphoneos/liblibxsde.a
+ lipo -output libxsde-d.a -create Debug-iphonesimulator/liblibxsde.a Debug-iphoneos/liblibxsde.a
+
+
+If at some point you need to change the XSD/e configuration then it is best
+to start from scratch (step 1 above) since the set of files that is added
+to the XCode project may vary from configuration to configuration.
+
+Once the runtime library is built, to integrate XSD/e into your application
+perform the following steps:
+
+1. Compile your schemas to C++ with the XSD/e compiler (xsde-x.y.z/bin/xsde)
+ and add the resulting generated C++ files to your project.
+
+2. To link your application to the XSD/e runtime library (libxsde), perform
+ the following steps in your project:
+
+ 2.1 In the "Targets" group, double-click on your application to open the
+ "Info" dialog.
+
+ 2.2 Select the "General" tab and click on the Plus (+) button to add the
+ library.
+
+ 2.3 In the opened dialog click the "Add Other..." button and add either
+ the libxsde.a or libxsde-d.a (debug) fat library created above.
+
+3. To add the XSD/e runtime headers to your application's search paths,
+ perform the following steps in your project:
+
+ 3.1 Select "Project"->"Edit Project Settings", "Build" tab. In the
+ "Configurations" drop-down list select "All Configurations".
+
+ 3.2 Scroll down to the "Search Paths" section and add the path to the
+ xsde-x.y.z/libxsde directory to the "Header Search Paths" field.
+
+ 3.3 Build the application.
diff --git a/dist/etc/ios/config-xcode.make b/dist/etc/ios/config-xcode.make
new file mode 100644
index 0000000..a79dbeb
--- /dev/null
+++ b/dist/etc/ios/config-xcode.make
@@ -0,0 +1,202 @@
+# Sample configuration file for XCode/iOS. This configuration enables
+# STL, iostream, and C++ exceptions which can be disabled if not needed.
+# For more information, see the accompanying README file.
+#
+
+# Toolchain.
+#
+CC = @echo "copying $<" 1>&2 && mkdir -p ../src/xsde/$(dir $<) && cp $< ../src/xsde/$(dir $<)/ ; :
+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 := y
+
+
+# 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 := y
+
+
+# Set to 'n' if you don't have iostream.
+#
+XSDE_IOSTREAM := y
+
+
+# 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 := y
+
+
+# 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, VxWorks, iPhone OS) 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