|
- /*
- * This file documents the process of porting JACK to new platforms.
- * It is part of the JACK reference manual, built using doxygen.
- */
-
- /**
-
- @page porting-guide Porting JACK
-
- The @ref index is designed to be portable to any system supporting the
- relevant POSIX and C language standards. It currently works with
- GNU/Linux and Mac OS X on several different processor architectures.
- This document describes the steps needed to port JACK to another
- platform, and the methods used to provide portability.
-
- - @ref portrequirements
- - @ref portoverview
- - @ref portopsys
- - @ref portcpu
- - @ref portissues
-
- @section portrequirements Requirements
-
- - Each platform should build directly from CVS or from a tarball
- using the GNU @c ./configure tools. Platform-specific toolsets can
- by used for development, but the GNU tools should at least work for
- basic distribution and configuration.
-
- - For long-term maintainability we want to minimize the use of
- conditional compilation in source files.
-
- - We should provide generic versions of all system-dependent
- headers, so platforms need only provide those they modify.
-
- - In some cases, operating system-specific information must be able
- to override processor-specific data.
-
- @section portoverview Overview
-
- JACK relies on two types of platform-specific headers:
-
- - @ref portopsys
- - @ref portcpu
-
- OS-specific headers take precedence over CPU-specific headers.
-
- The JACK @c configure.host script and its system-dependent header
- directories were adapted from the @c libstdc++-v3 component of the GNU
- Compiler Collective, <http://gcc.gnu.org>.
-
-
- @section portlang C Language Dependencies
-
- JACK is written to conform with C99, as defined in International
- Standard ISO/IEC 9899:1999. Because many existing compilers do not
- fully support this standard, some new features should be avoided for
- portablility reasons. For example, variables should not be declared
- in the middle of a compound statement, because many compilers still
- cannot handle that language extension.
-
-
- @section portopsys Operating System Dependencies
-
- JACK is written for a POSIX environment compliant with IEEE Std
- 1003.1-2001, ISO/IEC 9945:2003, including the POSIX Threads Extension
- (1003.1c-1995) and the Realtime and Realtime Threads feature groups.
- When some needed POSIX feature is missing on a platform, the preferred
- solution is to provide a substitute, as with the @c fakepoll.c
- implementation for Mac OS X.
-
- Whenever possible, OS dependencies should be auto-detected by @c
- configure. Sometimes they can be isolated in OS-specific header
- files, found in subdirectories of @c config/os and referenced with a
- @c <sysdeps/xxx.h> name.
-
- If conditional compilation must be used in mainline
- platform-independent code, avoid using the system name. Instead, @c
- \#define a descriptive name in @c <config.h>, and test it like this:
-
- @code
- \#ifdef JACK_USE_MACH_THREADS
- allocate_mach_serverport(engine, client);
- client->running = FALSE;
- \#endif
- @endcode
-
- Be sure to place any generic implementation alternative in the @c
- \#else or use an @c \#ifndef, so no other code needs to know your
- conditional labels.
-
- @section portissues Issues Not Addressed
-
- - Cross-compilation has not been tested, or even thought through in
- much detail. The @a host is the system on which JACK will run.
- This may differ from the @a build system doing the compilation.
- These are selected using the standard @c ./configure options @c
- --host and @c --build. Usually, @c ./config.guess can print the
- appropriate canonical name for any system on which it runs.
-
- - Platform-specific build tools like Apple's Project Builder are not
- well-supported.
-
- */
|