summaryrefslogtreecommitdiff
path: root/CrossCompilingXorg.mdwn
diff options
context:
space:
mode:
Diffstat (limited to 'CrossCompilingXorg.mdwn')
-rw-r--r--CrossCompilingXorg.mdwn96
1 files changed, 96 insertions, 0 deletions
diff --git a/CrossCompilingXorg.mdwn b/CrossCompilingXorg.mdwn
new file mode 100644
index 00000000..554984be
--- /dev/null
+++ b/CrossCompilingXorg.mdwn
@@ -0,0 +1,96 @@
+
+[[!toc ]]
+## Introduction
+
+This page is an attempt to describe the process require to build the modular X.org tree using a crosscompiler. The majority of this document will assume that the reader already has a fully functioning crosscompiler on the _build_ system that can create binaries for the _host_ system. _Build_ and _host_ are the standard terms used by autoconfig to describe the system where the programs will be built (build) and the system where the programs will run (host). It would seem that the system where the programs will run should be called _target_, but that term carries a different meaning in autoconfig. _Target_ is the system for which a compiler (e.g., your crosscompiler) will generate code. Correct use of this terminology will help the process, trust me!
+
+For crosscompilers targeting Linux systems, [[crosstool|http://www.kegel.com/crosstool/]] is a good choice.
+
+
+## Additional Requirements
+
+In addition to a crosscompiler, some libraries and headers for the host system must also be available. These can either be crosscompiled or copied from the host system. At a minimum, the following are required:
+
+* zlib
+* libpng
+* expat
+* freetype
+* fontconfig
+* libdrm
+* openssl (for SHA1)
+For at least libdrm, PKG_CONFIG_PATH will need to be set to the location of that library's .pc file. Some configurations are known to build using the default system pkgconfig and simply over-ride the PKG_CONFIG_PATH. However, it may be necessary in some cases to build a "cross" pkgconfig.
+
+
+## Cross compiling dependencies
+
+The below instructions assume CROSS_COMPILE is set to your toolchain (e.g. export CROSS_COMPILE=arm-none-linux-gnueabi- ) and DISCIMAGE is set to where you want to install. They also assume a Debian/Ubuntu based system - update as appropriate.
+
+Install zlib
+[[!format txt """
+ mkdir ~/sources; cd ~/sources
+ apt-get source zlib
+ cd zlib*
+ AR=${CROSS_COMPILE}ar CC=${CROSS_COMPILE}gcc RANLIB=${CROSS_COMPILE}ranlib ./configure --prefix=$DISCIMAGE/usr/local/
+ make
+ make install
+"""]]
+Install libpng
+[[!format txt """
+ cd ~/sources
+ apt-get source libpng
+ cd libpng*
+ LDFLAGS="-L$DISCIMAGE/usr/local/lib" CPPFLAGS="-I$DISCIMAGE/usr/local/include" ./configure --prefix=$DISCIMAGE/usr --host=${CROSS_COMPILE%-}
+ make
+ make install
+"""]]
+Install expat
+[[!format txt """
+ cd ~/sources
+ apt-get source expat
+ cd expat*
+ AR=${CROSS_COMPILE}ar CC=${CROSS_COMPILE}gcc ./configure --prefix=$DISCIMAGE/usr/local/ --host=${CROSS_COMPILE%-}
+ make
+ make install
+"""]]
+Install openssl(For SHA-1)
+[[!format txt """
+ cd ~/sources
+ wget http://www.openssl.org/source/openssl-0.9.8h.tar.gz
+ tar -zxvf openssl-0.9.8h.tar.gz
+ cd openssl*
+ ./Configure dist --prefix=$DISCIMAGE/usr/local
+ make CC="${CROSS_COMPILE}gcc" AR="${CROSS_COMPILE}ar r" RANLIB="${CROSS_COMPILE}ranlib"
+ make CC="${CROSS_COMPILE}gcc" AR="${CROSS_COMPILE}ar r" RANLIB="${CROSS_COMPILE}ranlib" install
+"""]]
+Install jhbuild, on build machine (This isn't needed, but makes life easier)
+[[!format txt """
+ svn co http://svn.gnome.org/svn/jhbuild/trunk jhbuild
+ cd jhbuild
+ ./autogen.sh
+ make -f Makefile.plain install
+"""]]
+TODO: Other dependencies are needed depending on what you are doing. Please update these instructions if you need to install them.
+
+
+## Using jhbuild to compile
+
+Copy and modify the example ~/.jhbuildrc file at [[CrossCompilingXorgJhbuild|CrossCompilingXorgJhbuild]] and then run
+[[!format txt """
+ jhbuild xserver
+"""]]
+X should now cross compile. General Jhbuild instructions are given at [[JhBuildInstructions|JhBuildInstructions]]. Feel free to mention any problems that you've come across here, along with solutions if you have them.
+
+
+## Compiling without JHBuild
+
+This is not necessary if you use JHBuild to build. However if you do not want to, you will have to configure and build manually. Below are some general instructions to help you.
+
+To enable crosscompiling the _--host_ and _--build_ flags must be passed to configure. If the _build.sh_ script is being used, this can be done by setting CONFFLAGS. Both of these flags take a standard autoconfig system description. For example, to build on an x86-64 system running Linux for a PowerPC system running also running Linux, CONFFLAGS should be set to "--build x86_64-unknown-linux-gnu --host powerpc-unknown-linux-gnu". Based on these settings, the configure scripts will assume that the crosscompiler is named powerpc-unknown-linux-gnu-gcc and is in the path. If the compiler named something different, the name must be providied via the CC environment variable. The C++ compiler (CXX), linker (LD), ranlib (RANLIB), and ar (AR) must also be provided in this manner.
+
+Some components need to build and run programs on the build system that generate output used in the build process. For this compnents, CC_FOR_BUILD must be set to the name of the compiler that targets the build system. The majority of these components do not correctly use CC_FOR_BUILD, but there is a patch (see below) available.
+
+A number of steps in the autoconfig process implicitly assume that the build system and the host system are the same. For example, library components want to build and run test programs to determine the behavior of certain host system elements. This is clearly impossible when crosscompiling. To work around these issues, the --enable-malloc0returnsnull (or --disable-malloc0returnsnull, depending on the host system) must be passed to configure.
+
+In addition, the configure scripts for the video drivers use methods for detecting the availability of DRI that are incompatible with crosscompiling. Until a fix is provided, drivers must either be built on the host system or --disable-dri must be provided to their configure scripts. The issue in the drivers' configure scripts does _not_ effect the core X server.
+
+The -h and -b options to build.sh supply the --host and --build options to the configure scripts automatically. In addition, the value passed to -h is used in operation system and processor architecture based determinations of which drivers to build. The modifications to build.sh are based on the build.sh script that I use, but they have not been completely tested. If you encounter problems, please post to the xorg mailing list.