annotate doc/manual/manual_overview.tex @ 663:127b569978cc default tip

- another tweak handling clang trying to be too smart (see last commit)
author Tassilo Philipp
date Sun, 24 Mar 2024 13:52:44 +0100
parents bf78e6542ef9
children
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 %
333
4e9d3cb9870f - minor doc cleanups/cosmetics
Tassilo Philipp
parents: 302
diff changeset
3 % Copyright (c) 2007-2019 Daniel Adler <dadler@uni-goettingen.de>,
0
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
467
b47168dacba6 manual:
Tassilo Philipp
parents: 419
diff changeset
20 \clearpage
0
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
333
4e9d3cb9870f - minor doc cleanups/cosmetics
Tassilo Philipp
parents: 302
diff changeset
120 This is more code than a direct, hardcoded function call, however it's completely dynamic.
4e9d3cb9870f - minor doc cleanups/cosmetics
Tassilo Philipp
parents: 302
diff changeset
121 Also, despite this coming with an overhead of more executed code per single function call,
4e9d3cb9870f - minor doc cleanups/cosmetics
Tassilo Philipp
parents: 302
diff changeset
122 compared to function interface wrapper tools that generate per call glue-code less code is
4e9d3cb9870f - minor doc cleanups/cosmetics
Tassilo Philipp
parents: 302
diff changeset
123 used overall, . % might want to test this claim against swig, etc.
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
124
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
125 The following are examples from script bindings:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
126
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
127 \paragraph{Python example}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
128
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
129 \begin{lstlisting}[language=python,caption=Dyncall Python bindings example]
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
130 import pydc
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
131 def call_as_sqrt(funptr,x):
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
132 return pydc.call(funptr,"d)d", x)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
133 \end{lstlisting}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
134
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
135
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
136 \paragraph{R example}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
137
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
138 \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
139 library(rdyncall)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
140 call.as.sqrt TEX\textlessXET- function(funptr,x)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
141 .dyncall(funptr,"d)d", x)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
142 \end{lstlisting}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
143
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
144
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
145 \pagebreak
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
146
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
147 \subsection{Supported platforms/architectures}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
148
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
149 The feature matrix below gives a brief overview of the currently supported
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
150 platforms. Different colors are used, where a green cell indicates a supported
558
9eb5d92e5c5d doc fix of confusing paragraph
Tassilo Philipp
parents: 533
diff changeset
151 platform, with both, call and callback support, yellow a platform that might
9eb5d92e5c5d doc fix of confusing paragraph
Tassilo Philipp
parents: 533
diff changeset
152 work (but is untested) and red a platform that is currently unsupported. Gray
9eb5d92e5c5d doc fix of confusing paragraph
Tassilo Philipp
parents: 533
diff changeset
153 cells are combinations that don't exist at the time of writing, or that are not
9eb5d92e5c5d doc fix of confusing paragraph
Tassilo Philipp
parents: 533
diff changeset
154 taken into account.\\
533
71c884e610f0 - integration of patches from Raphael Luba, Thekla, Inc.:
Tassilo Philipp
parents: 467
diff changeset
155 Light green cells mark complete feature support, including passing aggregates
558
9eb5d92e5c5d doc fix of confusing paragraph
Tassilo Philipp
parents: 533
diff changeset
156 (struct, union) by value. Dark green means basic support but lacking lesser
9eb5d92e5c5d doc fix of confusing paragraph
Tassilo Philipp
parents: 533
diff changeset
157 used features (e.g. no aggregate-by-value support). Please note that a green
9eb5d92e5c5d doc fix of confusing paragraph
Tassilo Philipp
parents: 533
diff changeset
158 cell (even a light-green one) doesn't imply that all existing calling
533
71c884e610f0 - integration of patches from Raphael Luba, Thekla, Inc.:
Tassilo Philipp
parents: 467
diff changeset
159 conventions/features/build tools are supported for that platform (but the most
71c884e610f0 - integration of patches from Raphael Luba, Thekla, Inc.:
Tassilo Philipp
parents: 467
diff changeset
160 important).
71c884e610f0 - integration of patches from Raphael Luba, Thekla, Inc.:
Tassilo Philipp
parents: 467
diff changeset
161 % @@@ 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
162
333
4e9d3cb9870f - minor doc cleanups/cosmetics
Tassilo Philipp
parents: 302
diff changeset
163
4e9d3cb9870f - minor doc cleanups/cosmetics
Tassilo Philipp
parents: 302
diff changeset
164 % colors used to signalize undefined, not used, supported, etc. states.
4e9d3cb9870f - minor doc cleanups/cosmetics
Tassilo Philipp
parents: 302
diff changeset
165 \newcommand{\marknull}{\cellcolor{white}}
4e9d3cb9870f - minor doc cleanups/cosmetics
Tassilo Philipp
parents: 302
diff changeset
166 \newcommand{\markcmpl}{\cellcolor{lightgreen}}
4e9d3cb9870f - minor doc cleanups/cosmetics
Tassilo Philipp
parents: 302
diff changeset
167 \newcommand{\markimpl}{\cellcolor{darkgreen}}
4e9d3cb9870f - minor doc cleanups/cosmetics
Tassilo Philipp
parents: 302
diff changeset
168 \newcommand{\marknimp}{\cellcolor{red}}
4e9d3cb9870f - minor doc cleanups/cosmetics
Tassilo Philipp
parents: 302
diff changeset
169 \newcommand{\markunkn}{\cellcolor{yellow}}
4e9d3cb9870f - minor doc cleanups/cosmetics
Tassilo Philipp
parents: 302
diff changeset
170 \newcommand{\marknotx}{\cellcolor{gray1}}
299
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
171
533
71c884e610f0 - integration of patches from Raphael Luba, Thekla, Inc.:
Tassilo Philipp
parents: 467
diff changeset
172 \newcommand{\OSwinfam} {\ninety{Windows family} }
71c884e610f0 - integration of patches from Raphael Luba, Thekla, Inc.:
Tassilo Philipp
parents: 467
diff changeset
173 \newcommand{\OSlinux} {\ninety{Linux} }
71c884e610f0 - integration of patches from Raphael Luba, Thekla, Inc.:
Tassilo Philipp
parents: 467
diff changeset
174 \newcommand{\OSdarwin} {\ninety{macOS / iOS / Darwin} }
71c884e610f0 - integration of patches from Raphael Luba, Thekla, Inc.:
Tassilo Philipp
parents: 467
diff changeset
175 \newcommand{\OSfreebsd}{\ninety{FreeBSD} }
71c884e610f0 - integration of patches from Raphael Luba, Thekla, Inc.:
Tassilo Philipp
parents: 467
diff changeset
176 \newcommand{\OSnetbsd} {\ninety{NetBSD} }
71c884e610f0 - integration of patches from Raphael Luba, Thekla, Inc.:
Tassilo Philipp
parents: 467
diff changeset
177 \newcommand{\OSopenbsd}{\ninety{OpenBSD} }
71c884e610f0 - integration of patches from Raphael Luba, Thekla, Inc.:
Tassilo Philipp
parents: 467
diff changeset
178 \newcommand{\OSdflybsd}{\ninety{DragonFlyBSD} }
71c884e610f0 - integration of patches from Raphael Luba, Thekla, Inc.:
Tassilo Philipp
parents: 467
diff changeset
179 \newcommand{\OSsunos} {\ninety{Solaris / SunOS} }
71c884e610f0 - integration of patches from Raphael Luba, Thekla, Inc.:
Tassilo Philipp
parents: 467
diff changeset
180 \newcommand{\OSplanN} {\ninety{Plan 9 / 9front} }
71c884e610f0 - integration of patches from Raphael Luba, Thekla, Inc.:
Tassilo Philipp
parents: 467
diff changeset
181 \newcommand{\OSbeos} {\ninety{Haiku / BeOS} }
71c884e610f0 - integration of patches from Raphael Luba, Thekla, Inc.:
Tassilo Philipp
parents: 467
diff changeset
182 \newcommand{\OSminix} {\ninety{Minix} }
71c884e610f0 - integration of patches from Raphael Luba, Thekla, Inc.:
Tassilo Philipp
parents: 467
diff changeset
183 \newcommand{\OSpsp} {\ninety{Playstation Portable (EABI)}}
71c884e610f0 - integration of patches from Raphael Luba, Thekla, Inc.:
Tassilo Philipp
parents: 467
diff changeset
184 \newcommand{\OSnds} {\ninety{Nintendo DS} }
299
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
185
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
186 % also include hardfloat/softfloat @@@
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
187 \begin{table}[h]
299
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
188 \begin{tabular}{r>{\rule{0pt}{2.5ex}\tiny}l*{12}{c!{\color{gray3}\vrule}}c>{\tiny}l}
656
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
189 & & \OSwinfam & \OSlinux & \OSdarwin & \OSfreebsd & \OSnetbsd & \OSopenbsd & \OSdflybsd & \OSsunos & \OSplanN & \OSbeos & \OSminix & \OSpsp & \OSnds \\%& \\
302
d55f9d508074 - mips softfloat support for o32 callconv (calls and callbacks, little and big endian)
Tassilo Philipp
parents: 300
diff changeset
190 \arrayrulecolor{gray3}%
656
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
191 \multirow{2}{*}{ARM} & EB & \marknotx & \markunkn & \marknotx & \markunkn & \markunkn & \markunkn & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\%& \multirow{2}{*}{atpcs (arm \& thumb), eabi (arm \& thumb), armhf} \\
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
192 \hhline{*{1}{|~}*{14}{|-}}% ^- checked ^- find@@@ ^- checked ^- find@@@ ^- find@@@ ^- find@@@ ^- checked ^- checked ^- checked ^- new@@@ ^- checked ^- checked ^- checked
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
193 & EL & \markunkn & \markimpl & \markimpl & \markimpl & \markimpl & \markimpl & \marknotx & \marknotx & \marknimp & \marknotx & \markunkn & \marknotx & \markimpl \\%& \\
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
194 \hline% ^- dynOS ^- dynOS ^- real/iPho ^- dynOS ^- dynOS ^- real/bbb ^- checked ^- checked ^- checked ^- new@@@ ^- new@@@ ^- checked ^- checked
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
195 \multirow{2}{*}{ARM64} & EB & \marknotx & \markunkn & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\%& \multirow{2}{*}{aapcs64, apple} \\
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
196 \hhline{*{1}{|~}*{14}{|-}}% ^- checked ^- find@@@ ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
197 & EL & \markimpl & \markimpl & \markimpl & \markimpl & \markunkn & \markimpl & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\%& \\
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
198 \hline% ^- checked ^- find@@@ ^- real/iPho ^- checked ^- find@@@ ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
199 \multirow{2}{*}{MIPS} & EB & \marknotx & \markimpl & \marknotx & \markimpl & \markunkn & \marknotx & \marknotx & \marknotx & \marknimp & \marknotx & \marknotx & \marknotx & \marknotx \\%& \multirow{2}{*}{o32 (hf \& sf), eabi (hf only)} \\
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
200 \hhline{*{1}{|~}*{14}{|-}}% ^- checked ^- dynOS ^- checked ^- checked ^- find@@@ ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
201 & EL & \marknotx & \markunkn & \marknotx & \markimpl & \markimpl & \markunkn & \marknotx & \marknotx & \marknimp & \marknotx & \marknotx & \markimpl & \marknotx \\%& \\
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
202 \hline% ^- checked ^- find@@@ ^- checked ^- checked ^- dynOS ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
203 \multirow{2}{*}{MIPS64} & EB & \marknotx & \markunkn & \marknotx & \markimpl & \markunkn & \markimpl & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\%& \multirow{2}{*}{n64 (hf only), n32 (hf only)} \\
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
204 \hhline{*{1}{|~}*{14}{|-}}% ^- checked ^- find@@@ ^- checked ^- checked ^- find@@@ ^- real/ERlt ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
205 & EL & \marknotx & \markimpl & \marknotx & \markimpl & \markunkn & \markunkn & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\%& \\
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
206 \hline% ^- checked ^- dynOS ^- checked ^- checked ^- find@@@ ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
207 \multirow{2}{*}{SuperH} & EB & \marknotx & \marknimp & \marknotx & \marknotx & \marknimp & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\%& \\
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
208 \hhline{*{1}{|~}*{14}{|-}}% ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
209 & EL & \marknotx & \marknimp & \marknotx & \marknotx & \marknimp & \marknimp & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\%& \\
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
210 \hline% ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
211 \multirow{2}{*}{PowerPC} & EB & \marknotx & \markimpl & \markimpl & \markimpl & \markimpl & \markunkn & \marknotx & \marknotx & \marknimp & \marknotx & \marknotx & \marknotx & \marknotx \\%& \multirow{2}{*}{apple, sysv}\\
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
212 \hhline{*{1}{|~}*{14}{|-}}% ^- checked ^- dynOS ^-dynOS ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
213 & EL & \marknotx & \markunkn & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\%& \\
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
214 \hline% ^- checked ^- find@@@ ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
215 \multirow{2}{*}{PowerPC64} & EB & \marknotx & \markimpl & \markunkn & \markimpl & \marknotx & \markunkn & \marknotx & \marknotx & \marknimp & \marknotx & \marknotx & \marknotx & \marknotx \\%& \multirow{2}{*}{elf} \\
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
216 \hhline{*{1}{|~}*{14}{|-}}% ^- checked ^- masanori@ ^- checked ^- dynOS ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
217 & EL & \marknotx & \markimpl & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\%& \\
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
218 \hline% ^- checked ^- masanori@ ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
219 m68k & & \marknotx & \marknimp & \marknotx & \marknotx & \marknimp & \marknimp & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\%& \\
299
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
220 \hline
656
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
221 m88k & & \marknotx & \marknimp & \marknotx & \marknotx & \marknimp & \marknimp & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\%& \\
299
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
222 \hline
656
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
223 x86 & & \markimpl & \markimpl & \markimpl & \markimpl & \markimpl & \markimpl & \markimpl & \markimpl & \markimpl & \markimpl & \markimpl & \marknotx & \marknotx \\%& cdecl, stdcall, fastcall (MS \& GNU), thiscall (MS \& GNU), plan9 \\
299
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
224 \hline
656
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
225 x64 & & \markcmpl & \markcmpl & \markcmpl & \markcmpl & \markcmpl & \markcmpl & \markcmpl & \markcmpl & \marknimp & \markcmpl & \marknotx & \marknotx & \marknotx \\%& ms, sysv\\
574
4cf57a9f8b92 cleanup
Tassilo Philipp
parents: 558
diff changeset
226 \hline
656
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
227 Itanium & & \marknimp & \marknimp & \marknotx & \marknimp & \marknimp & \marknimp & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\%& \\
299
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
228 \hline
656
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
229 SPARC & & \marknotx & \markimpl & \marknotx & \marknotx & \markimpl & \markimpl & \marknotx & \markimpl & \marknimp & \marknotx & \marknotx & \marknotx & \marknotx \\%& v7, v8\\
299
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
230 \hline
656
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
231 SPARC64 & & \marknotx & \markimpl & \marknotx & \markimpl & \markimpl & \markimpl & \marknotx & \markimpl & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\%& v9 \\
299
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
232 \hline
656
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
233 RISC-V & & \marknotx & \marknimp & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\%& \\
419
1d7e8bda8292 - manual overview update
Tassilo Philipp
parents: 392
diff changeset
234 \hline
656
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
235 \multirow{2}{*}{RISC-V 64} & rv64imac & \marknotx & \marknimp & \marknotx & \marknimp & \marknimp & \marknimp & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\%& \\
5ec41b820858 - clarified riscv64 support in manual and changelog
Tassilo Philipp
parents: 653
diff changeset
236 \hhline{*{1}{|~}*{14}{|-}}% ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked ^- checked
657
bf78e6542ef9 - marked haiku/riscv64 (rv64imafdc) as tested, confirmed working via dynOS
Tassilo Philipp
parents: 656
diff changeset
237 & rv64imafdc & \marknotx & \markimpl & \marknotx & \markimpl & \markunkn & \markunkn & \marknotx & \marknotx & \marknotx & \markimpl & \marknotx & \marknotx & \marknotx \\%& \\
bf78e6542ef9 - marked haiku/riscv64 (rv64imafdc) as tested, confirmed working via dynOS
Tassilo Philipp
parents: 656
diff changeset
238 % ^- checked ^- dynOS ^- checked ^- dynOS ^- find@@@ ^- find@@@ ^- checked ^- checked ^- checked ^- dynOS ^- checked ^- checked ^- checked
299
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
239
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
240 \end{tabular}
92
5c3fa8897e0e - manual work
cslag
parents: 73
diff changeset
241 \caption{Supported platforms}%
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
242 \end{table}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
243
299
1fa2427dae49 - changed style of support matrix, marked freebsd/mips complet (hardfloat, only, though)
Tassilo Philipp
parents: 271
diff changeset
244
250
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 225
diff changeset
245 \subsection{Build Requirements}
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 225
diff changeset
246
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 225
diff changeset
247 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
248 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
249 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
250 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
251