annotate doc/manual/manual_build.tex @ 0:3e629dc19168

initial from svn dyncall-1745
author Daniel Adler
date Thu, 19 Mar 2015 22:24:28 +0100
parents
children 8326c5ced916
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
1 %//////////////////////////////////////////////////////////////////////////////
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
2 %
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
3 % Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
4 % Tassilo Philipp <tphilipp@potion-studios.com>
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
5 %
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
6 % Permission to use, copy, modify, and distribute this software for any
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
7 % purpose with or without fee is hereby granted, provided that the above
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
8 % copyright notice and this permission notice appear in all copies.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
9 %
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
10 % THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
11 % WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
12 % MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
13 % ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
14 % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
15 % ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
16 % OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
17 %
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
18 %//////////////////////////////////////////////////////////////////////////////
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
19
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
20 \newpage
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
21 \section{Building the library}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
22
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
23 The library has been built and used successfully on several
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
24 platform/architecture configurations and build systems.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
25 Please see notes on specfic platforms to check if the target
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
26 architecture is currently supported.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
27
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
28
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
29 \subsection{Requirements}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
30
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
31 The following tools are supported directly to build the \product{dyncall} library.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
32 However, as the number of source files to be compiled for a given
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
33 platform is small, it shouldn't be difficult to build it manually with
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
34 another toolchain.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
35 \begin{itemize}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
36 \item C compiler to build the \product{dyncall} library (GCC, Clang, SunPro or Microsoft C/C++ compiler)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
37 \item C++ compiler to build the optional test cases (GCC, Clang, SunPro or Microsoft C/C++ compiler)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
38 \item BSD make, GNU make, Microsoft nmake or mk (on Plan9) as automated build tools
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
39 \item Python (optional - for generation of some test cases)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
40 \item Lua (optional - for generation of some test cases)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
41 \item CMake (optional support)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
42 \end{itemize}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
43
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
44
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
45 \subsection{Supported/tested platforms and build systems}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
46
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
47 Building \product{dyncall} is a straightforward two-step process, first configure, then make. The
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
48 library should be able to be built with the default operating systems' build tools, so BSD make on
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
49 BSD and derived systems, GNU make on GNU and compatible, mk on Plan9, nmake on Windows, etc..
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
50 This is a detailed overview of platforms and their build tools that are known to build
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
51 \product{dyncall}:\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
52 \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
53
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
54
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
55 \begin{tabular}{l l l}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
56 {\bf{\large Platform}} & Build Tool(s) & Compiler, SDK \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
57 \hline
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
58 {\bf{\large Windows}} & nmake,Visual Studio & cl, cygwin (gcc), mingw (gcc) \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
59 {\bf{\large Unix-like}} & GNU/BSD/Sun make & gcc, clang, sunc \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
60 {\bf{\large Plan9}} & mk & 8c \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
61 {\bf{\large Haiku/BeOS}} & GNU make & gcc \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
62 {\bf{\large iOS/iPhone}} & GNU make & gcc and iPhone SDK on Mac OS X \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
63 {\bf{\large Nintendo DS}} & nmake & devkitPro\cite{devkitPro} tools on Windows \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
64 {\bf{\large Playstation Portable}} & GNU make & psptoolchain\cite{psptoolchain} tools \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
65
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
66 \end{tabular}\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
67
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
68 \pagebreak
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
69
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
70 \subsection{Build instructions}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
71
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
72
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
73 \begin{enumerate}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
74 \item Configure the source (not needed for Makefile.embedded)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
75
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
76 \paragraph{*nix flavour}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
77 \begin{lstlisting}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
78 ./configure [--option ...]
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
79 \end{lstlisting}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
80
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
81 Available options (omit for defaults):
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
82
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
83 \begin{tabular}{ll}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
84 {\tt --help} & display help \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
85 {\tt --prefix={\it path}} & specify installation prefix (Unix shell) \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
86 {\tt --target={\it platform}} & MacOSX,iOS,iPhoneSimulator,PSP,... \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
87 {\tt --sdk={\it version}} & SDK version \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
88 \end{tabular}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
89
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
90 \paragraph{Windows flavour, and cross-build from Windows (PSP, NDS, etc.)}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
91
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
92 \begin{lstlisting}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
93 .\configure [/option ...]
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
94 \end{lstlisting}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
95
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
96 Available options:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
97
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
98 \begin{tabular}{ll}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
99 {\tt /?} & display help \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
100 {\tt /prefix {\it path}} & set installation prefix (GNU make only) \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
101 {\tt /prefix-bd {\it path}} & set build directory prefix (GNU make only) \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
102 {\tt /target-x86} & build for x86 architecture (default) \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
103 {\tt /target-x64} & build for x64 architecture \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
104 {\tt /target-psp} & build for PlayStation Portable (homebrew SDK) \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
105 {\tt /target-nds-arm} & build for Nintendo DS (devkitPro, ARM mode) \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
106 {\tt /target-nds-thumb} & build for Nintendo DS (devkitPro, THUMB mode) \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
107 {\tt /tool-msvc} & use Microsoft Visual C++ compiler (default) \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
108 {\tt /tool-gcc} & use GNU Compiler Collection \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
109 {\tt /asm-ml} & use Microsoft Macro Assembler (default) \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
110 {\tt /asm-as} & use the GNU Assembler \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
111 {\tt /asm-nasm} & use NASM Assembler \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
112 {\tt /config-release} & build release version (default) \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
113 {\tt /config-debug} & build debug version \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
114 \end{tabular}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
115
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
116
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
117 \paragraph{Plan 9 flavour}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
118
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
119 \begin{lstlisting}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
120 ./configure.rc [--option ...]
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
121 \end{lstlisting}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
122
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
123 Available options (none, at the moment):
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
124
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
125 \begin{tabular}{ll}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
126 {\tt --help} & display help \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
127 \end{tabular}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
128
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
129
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
130 \item Build the static libraries \product{dyncall}, \product{dynload} and \product{dyncallback}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
131 \begin{lstlisting}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
132 make # for {GNU,BSD} Make
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
133 nmake /f Nmakefile # for NMake on Windows
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
134 mk # for mk on Plan9
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
135 \end{lstlisting}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
136
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
137 \item Install libraries and includes (supported for GNU and BSD make based builds, only)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
138 \begin{lstlisting}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
139 make install
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
140 \end{lstlisting}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
141
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
142 \item Optionally, build the test suite
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
143 \begin{lstlisting}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
144 make tests # for {GNU,BSD} Make
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
145 nmake /f Nmakefile tests # for NMake on Windows
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
146 mk tests # for mk on Plan9
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
147 \end{lstlisting}% @@@ check Plan9, should work already
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
148 \end{enumerate}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
149
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
150 \subsection{Build-tool specific notes}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
151
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
152 Some platforms require some manual tweaks:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
153
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
154 Problem: Build fails because CC and/or related are not set, or different compiler,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
155 linker, etc. should be used.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
156
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
157 Solution: Set the 'CC' and other environment variables explicitly to the desired
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
158 tools. E.g.:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
159
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
160 \begin{lstlisting}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
161 CC=gcc make
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
162 \end{lstlisting}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
163
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
164
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
165 Problem: On windows using mingw and msys/unixutils 'Make', the make uses
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
166 'cc' for C compilation, which does not exist in mingw.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
167
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
168 Solution: Set the 'CC' environment variable explicitly to 'gcc' (as in
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
169 the example above).
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
170
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
171 \subsection{Build with CMake}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
172
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
173 \begin{lstlisting}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
174 cmake -DCMAKE_INSTALL_PREFIX=<location>
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
175 make
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
176 \end{lstlisting}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
177