annotate doc/manual/manual_overview.tex @ 299:1fa2427dae49

- changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
author Tassilo Philipp
date Sat, 19 May 2018 18:25:29 +0200
parents aa0d2536a4eb
children 24fe46874d4a
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
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
22 \section{Overview}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
23
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
24 The \product{dyncall} library encapsulates architecture-, OS- and compiler-specific
72
2b89d8497aad - html manual work
cslag
parents: 26
diff changeset
25 function call semantics in a virtual %
2b89d8497aad - html manual work
cslag
parents: 26
diff changeset
26 %
73
8326c5ced916 - doc cleanup and html work
cslag
parents: 72
diff changeset
27 \casehtml{\Tg<span class="marker">}{\begin{center}}%
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
28 \emph{bind argument parameters from left to right and then call}
72
2b89d8497aad - html manual work
cslag
parents: 26
diff changeset
29 \casehtml{\Tg</span>}{\end{center}}%
2b89d8497aad - html manual work
cslag
parents: 26
diff changeset
30 %
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
31 interface allowing programmers to call C functions
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
32 in a completely dynamic manner. In other words, instead of calling a function
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
33 directly, the \product{dyncall} library provides a mechanism to push the function parameters
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
34 manually and to issue the call afterwards.\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
35 Since the idea behind this concept is similar to call dispatching mechanisms
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
36 of virtual machines, the object that can be dynamically loaded with arguments,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
37 and then used to actually invoke the call, is called CallVM. It is possible to
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
38 change the calling convention used by the CallVM at run-time.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
39 Due to the fact that nearly every platform comes with one or more distinct calling
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
40 conventions, the \product{dyncall} library project intends to be a portable and open-source
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
41 approach to the variety of compiler-specific binary interfaces, platform specific
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
42 subtleties, and so on\ldots\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
43 \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
44 The core of the library consists of dynamic implementations of different
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
45 calling conventions written in assembler.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
46 Although the library aims to be highly portable, some assembler code needs to
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
47 be written for nearly every platform/compiler/OS combination.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
48 Unfortunately, there are architectures we just don't have at home or work. If
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
49 you want to see \product{dyncall} running on such a platform, feel free to send
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
50 in code and patches, or even to donate hardware you don't need anymore.
73
8326c5ced916 - doc cleanup and html work
cslag
parents: 72
diff changeset
51 Check the \textbf{supported platforms} section for an overview of the supported
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
52 platforms and the different calling convention sections for details about the
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
53 support.
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{comment}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
56 @@@
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
57 A typical binary library consists of symbolic names that map to variables and
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
58 functions, the latter being pre-compiled for a
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
59 specific calling convention and architecture. Given \product{dyncall} has been ported to
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
60 that binary platform, it is possible to call such a function dynamically
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
61 without writing glue code or prototypes or even knowing its C declaration -
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
62 all that is needed is a pointer to it.\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
63 To avoid confusion, note that from the point of view of the library all
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
64 parameters are handled the same way, even though the implementation might use
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
65 other ways to pass parameters in order to suit specific calling conventions.\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
66 \end{comment}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
67
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
68
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
69 \subsection{Features}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
70
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
71 \begin{itemize}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
72 \item A portable and extendable function call interface for the C programming
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
73 language.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
74 \item Ports to major platforms including Windows, Mac OS X, Linux, BSD derivates, iPhone and embedded devices and more, including lesser known and/or older platforms like Plan 9, Playstation Portable, Nintendo DS, etc..
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
75 \item Add-on language bindings to Python, R, Ruby, Go, Erlang, Java, Lua, sh, ...
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
76 \item High-level state machine design using C to model calling convention
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
77 parameter transfer.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
78 \item One assembly \emph{hybrid} call routine per calling convention.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
79 \item Formatted call, vararg function API.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
80 \item Comprehensive test suite.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
81 \end{itemize}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
82
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
83 \pagebreak
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
84
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
85 \subsection{Showcase}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
86
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
87 \paragraph{Foreign function call in C}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
88 This section demonstrates how the foreign function call is issued without, and then
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
89 with, the help of the \product{dyncall} library and scripting language
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
90 bindings.
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}[language=c,caption=Foreign function call in C]
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
93 double call_as_sqrt(void* funptr, double x)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
94 {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
95 return ( ( double (*)(double) )funptr)(x);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
96 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
97 \end{lstlisting}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
98
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
99 \paragraph{\product{Dyncall} C library example}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
100
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
101 The same operation can be broken down into atomic pieces
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
102 (specify calling convention, binding arguments, invoking the call)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
103 using the \dc\ library.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
104
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
105 \begin{lstlisting}[language=c,caption=Dyncall C library example]
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
106 #include <dyncall.h>
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
107 double call_as_sqrt(void* funptr, double x)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
108 {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
109 double r;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
110 DCCallVM* vm = dcNewCallVM(4096);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
111 dcMode(vm, DC_CALL_C_DEFAULT);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
112 dcReset(vm);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
113 dcArgDouble(vm, x);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
114 r = dcCallDouble(vm, funptr);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
115 dcFree(vm);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
116 return r;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
117 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
118 \end{lstlisting}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
119
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
120 As you can see, this is more code after all, but completely dynamic.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
121 And definitely less than generated glue-code for each function call, if
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
122 used correctly.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
123
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
124 The following are examples from script bindings:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
125
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
126 \paragraph{Python example}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
127
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
128 \begin{lstlisting}[language=python,caption=Dyncall Python bindings example]
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
129 import pydc
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
130 def call_as_sqrt(funptr,x):
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
131 return pydc.call(funptr,"d)d", x)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
132 \end{lstlisting}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
133
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
134
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
135 \paragraph{R example}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
136
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
137 \begin{lstlisting}[language=R,caption=Dyncall R bindings example,escapeinside={TEX}{XET}] % escapeinside is a workaround for issues with '<' in lstlisting+tex4ht
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
138 library(rdyncall)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
139 call.as.sqrt TEX\textlessXET- function(funptr,x)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
140 .dyncall(funptr,"d)d", x)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
141 \end{lstlisting}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
142
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
143
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
144 \pagebreak
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
145
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
146 \subsection{Supported platforms/architectures}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
147
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
148 The feature matrix below gives a brief overview of the currently supported
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
149 platforms. Different colors are used, where a green cell indicates a supported
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
150 platform, yellow a platform that might work (but is untested) and red a platform
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
151 that is currently unsupported. Gray cells are combinations that don't exist
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
152 at the time of writing, or that are not taken into account.\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
153 Light green cells mark complete feature support, as in dyncall and dyncallback. Dark green means basic support but lacking features (e.g. dyncall support, but not dyncallback).
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
154 Please note that a green cell (even a light-green one) doesn't imply that all existing calling conventions/features/build tools are supported for that platform (but the most
299
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
155 important). The rightmost column gives a brief info about calling convention support or other notes.
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
156 For detailed info about a platform's support consult the calling convention appendix.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
157
299
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
158 % OLD support matrix
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
159 %\begin{table}[h]
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
160 %\begin{tabular}{r|*{3}{c!{\color{gray2}\vrule}}*{4}{c!{\color{gray2}\vrule}}*{11}{c!{\color{gray2}\vrule}}}
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
161 % & \ninety{\bf Alpha} & \ninety{\bf ARM} & \ninety{\bf ARM64} & \multicolumn{2}{c!{\color{gray2}\vrule}}{\ninety{\bf MIPS}} & \multicolumn{2}{c!{\color{gray2}\vrule}}{\ninety{\bf MIPS64}} & \ninety{\bf SuperH} & \ninety{\bf PowerPC} & \ninety{\bf PowerPC64} & \ninety{\bf m68k} & \ninety{\bf m88k} & \ninety{\bf x86} & \ninety{\bf x64} & \ninety{\bf Itanium} & \ninety{\bf SPARC} & \ninety{\bf SPARC64} & \ninety{\bf RISC-V} \\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
162 % & & & & \ninety{\tiny EB} & \ninety{\tiny EL} & \ninety{\tiny EB} & \ninety{\tiny EL} & & & & & & & & & & & \\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
163 %\hline
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
164 %{\bf Windows family} & \marknotx & \markunkn & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \markcmpl & \markcmpl & \marknimp & \marknotx & \marknotx & \marknotx \\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
165 %{\bf Linux} & \marknimp & \markcmpl & \markcmpl & \markcmpl & \markunkn & \markunkn & \markcmpl & \marknimp & \markcmpl & \markcmpl & \marknimp & \marknimp & \markcmpl & \markcmpl & \marknimp & \markcmpl & \markcmpl & \marknimp \\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
166 %{\bf macOS / iOS / Darwin} & \marknotx & \markcmpl & \markcmpl & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \markcmpl & \markunkn & \marknotx & \marknotx & \markcmpl & \markcmpl & \marknotx & \marknotx & \marknotx & \marknotx \\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
167 %{\bf FreeBSD} & \marknimp & \markcmpl & \markcmpl & \markunkn & \markunkn & \markunkn & \markunkn & \marknotx & \markimpl & \markcmpl & \marknotx & \marknotx & \markcmpl & \markcmpl & \marknimp & \marknotx & \markcmpl & \marknimp \\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
168 %{\bf NetBSD} & \marknimp & \markcmpl & \marknotx & \markunkn & \markcmpl & \markunkn & \markunkn & \marknimp & \markimpl & \marknotx & \marknimp & \marknimp & \markcmpl & \markcmpl & \marknimp & \markcmpl & \markcmpl & \marknimp \\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
169 %{\bf OpenBSD} & \marknimp & \markcmpl & \markunkn & \markunkn & \markunkn & \markcmpl & \markunkn & \marknimp & \markunkn & \marknotx & \marknimp & \marknimp & \markcmpl & \markcmpl & \marknimp & \markcmpl & \markcmpl & \marknotx \\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
170 %{\bf DragonFlyBSD} & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \markcmpl & \markcmpl & \marknotx & \marknotx & \marknotx & \marknotx \\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
171 %{\bf Solaris / SunOS} & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \markcmpl & \markcmpl & \marknotx & \markcmpl & \markimpl & \marknotx \\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
172 %{\bf Plan 9 / 9front} & \marknimp & \marknimp & \marknotx & \marknimp & \marknimp & \marknotx & \marknotx & \marknotx & \marknimp & \marknotx & \marknotx & \marknotx & \markcmpl & \marknimp & \marknotx & \marknimp & \marknotx & \marknotx \\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
173 %{\bf Haiku / BeOS} & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \markcmpl & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
174 %{\bf Minix} & \marknotx & \markunkn & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \markcmpl & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
175 %{\bf Playstation Portable} & \marknotx & \marknotx & \marknotx & \marknotx & \markcmpl & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
176 %{\bf Nintendo DS} & \marknotx & \markcmpl & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
177 %\end{tabular}
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
178 %\caption{Supported platforms}%
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
179 %\end{table}
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
180
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
181 \newcommand{\OSwinfam} {\ninety{Windows family} }
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
182 \newcommand{\OSlinux} {\ninety{Linux} }
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
183 \newcommand{\OSdarwin} {\ninety{macOS / iOS / Darwin}}
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
184 \newcommand{\OSfreebsd}{\ninety{FreeBSD} }
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
185 \newcommand{\OSnetbsd} {\ninety{NetBSD} }
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
186 \newcommand{\OSopenbsd}{\ninety{OpenBSD} }
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
187 \newcommand{\OSdflybsd}{\ninety{DragonFlyBSD} }
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
188 \newcommand{\OSsunos} {\ninety{Solaris / SunOS} }
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
189 \newcommand{\OSplanN} {\ninety{Plan 9 / 9front} }
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
190 \newcommand{\OSbeos} {\ninety{Haiku / BeOS} }
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
191 \newcommand{\OSminix} {\ninety{Minix} }
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
192 \newcommand{\OSpsp} {\ninety{Playstation Portable}}
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
193 \newcommand{\OSnds} {\ninety{Nintendo DS} }
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
194
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
195 % also include hardfloat/softfloat @@@
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
196 \begin{table}[h]
299
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
197 \begin{tabular}{r>{\rule{0pt}{2.5ex}\tiny}l*{12}{c!{\color{gray3}\vrule}}c>{\tiny}l}
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
198 & & \OSwinfam & \OSlinux & \OSdarwin & \OSfreebsd & \OSnetbsd & \OSopenbsd & \OSdflybsd & \OSsunos & \OSplanN & \OSbeos & \OSminix & \OSpsp & \OSnds \\%& \\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
199 \arrayrulecolor{gray3}
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
200 Alpha & & \marknotx & \marknimp & \marknotx & \marknimp & \marknimp & \marknimp & \marknotx & \marknotx & \marknimp & \marknotx & \marknotx & \marknotx & \marknotx \\%& \\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
201 \hline
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
202 ARM & & \markunkn & \markcmpl & \markcmpl & \markcmpl & \markcmpl & \markcmpl & \marknotx & \marknotx & \marknimp & \marknotx & \markunkn & \marknotx & \markcmpl \\%& atpcs (arm \& thumb), eabi (arm \& thumb), armhf\\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
203 \hline
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
204 ARM64 & & \marknotx & \markcmpl & \markcmpl & \markcmpl & \marknotx & \markunkn & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\%& aapcs64, apple\\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
205 \hline
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
206 \multirow{2}{*}{MIPS} & EB & \marknotx & \markcmpl & \marknotx & \markcmpl & \markunkn & \markunkn & \marknotx & \marknotx & \marknimp & \marknotx & \marknotx & \marknotx & \marknotx \\%& \multirow{2}{*}{o32, n32, eabi / only hardfloat support} \\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
207 \hhline{*{1}{|~}*{14}{|-}}
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
208 & EL & \marknotx & \markunkn & \marknotx & \markcmpl & \markcmpl & \markunkn & \marknotx & \marknotx & \marknimp & \marknotx & \marknotx & \markcmpl & \marknotx \\%& \\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
209 \hline
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
210 \multirow{2}{*}{MIPS64} & EB & \marknotx & \markunkn & \marknotx & \markcmpl & \markunkn & \markcmpl & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\%& \multirow{2}{*}{n64 / only hardfloat support} \\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
211 \hhline{*{1}{|~}*{14}{|-}}
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
212 & EL & \marknotx & \markcmpl & \marknotx & \markcmpl & \markunkn & \markunkn & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\%& \\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
213 \hline
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
214 SuperH & & \marknotx & \marknimp & \marknotx & \marknotx & \marknimp & \marknimp & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\%& \\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
215 \hline
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
216 PowerPC & & \marknotx & \markcmpl & \markcmpl & \markimpl & \markimpl & \markunkn & \marknotx & \marknotx & \marknimp & \marknotx & \marknotx & \marknotx & \marknotx \\%& apple, sysv\\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
217 \hline
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
218 PowerPC64 & & \marknotx & \markcmpl & \markunkn & \markcmpl & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\%& elf\\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
219 \hline
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
220 m68k & & \marknotx & \marknimp & \marknotx & \marknotx & \marknimp & \marknimp & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\%& \\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
221 \hline
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
222 m88k & & \marknotx & \marknimp & \marknotx & \marknotx & \marknimp & \marknimp & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\%& \\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
223 \hline
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
224 x86 & & \markcmpl & \markcmpl & \markcmpl & \markcmpl & \markcmpl & \markcmpl & \markcmpl & \markcmpl & \markcmpl & \markcmpl & \markcmpl & \marknotx & \marknotx \\%& cdecl, stdcall, fastcall (MS \& GNU), thiscall (MS \& GNU), plan9 \\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
225 \hline
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
226 x64 & & \markcmpl & \markcmpl & \markcmpl & \markcmpl & \markcmpl & \markcmpl & \markcmpl & \markcmpl & \marknimp & \marknotx & \marknotx & \marknotx & \marknotx \\%& ms, sysv\\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
227 \hline
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
228 Itanium & & \marknimp & \marknimp & \marknotx & \marknimp & \marknimp & \marknimp & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\%& \\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
229 \hline
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
230 SPARC & & \marknotx & \markcmpl & \marknotx & \marknotx & \markcmpl & \markcmpl & \marknotx & \markcmpl & \marknimp & \marknotx & \marknotx & \marknotx & \marknotx \\%& v7, v8\\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
231 \hline
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
232 SPARC64 & & \marknotx & \markcmpl & \marknotx & \markcmpl & \markcmpl & \markcmpl & \marknotx & \markimpl & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\%& v9 \\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
233 \hline
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
234 RISC-V & & \marknotx & \marknimp & \marknotx & \marknimp & \marknimp & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\%& \\
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
235
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
236 \end{tabular}
92
5c3fa8897e0e - manual work
cslag
parents: 73
diff changeset
237 \caption{Supported platforms}%
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
238 \end{table}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
239
299
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
240
250
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 225
diff changeset
241 \subsection{Build Requirements}
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 225
diff changeset
242
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 225
diff changeset
243 The library needs at least a c99 compiler with additional support for anonymous
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 225
diff changeset
244 structs/unions (which were introduced officially in c11). Given that those are
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 225
diff changeset
245 generally supported by pretty much all major c99 conforming compilers (as
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 225
diff changeset
246 default extension), it should build fine with a c99 toolchain.
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 225
diff changeset
247