From 9d45c2a295513066b2d8d602b0ef3e92ebfed5ed Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 10 Feb 2011 10:25:23 +0200 Subject: Add support for XCode project-based build for iOS --- dist/INSTALL | 25 ++--- dist/etc/ios/README | 140 ++++++++++++++++++++++++++++ dist/etc/ios/config-xcode.make | 202 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 350 insertions(+), 17 deletions(-) create mode 100644 dist/etc/ios/README create mode 100644 dist/etc/ios/config-xcode.make (limited to 'dist') 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 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 -- cgit v1.1