annotate README @ 27:523c45dfa8fb

- refactored arm calling conventions' callvm code, so that the code that keeps the caller from overwriting the return value on some platforms also works on OpenBSD (before we casted the function pointer to have long long as return type, to hint the caller that there is one, but that triggers an intentional SIGABRT on OpenBSD for security reasons; now the decl reflects this, directly)
author cslag
date Tue, 15 Sep 2015 12:48:52 +0200
parents 7ca57dbefed4
children c81374ac9fba
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 dyncall - A Generic Dynamic FFI package
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
2 =======================================
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
3
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
4 dyncall is a low-level toolkit providing a portable abstraction for
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
5 handling native code dynamically at run time.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
6 It comprises three independent components, available as C libraries, namely:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
7
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
8 - 'dyncall' for making function calls,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
9 - 'dyncallback' or writing generic callback handlers, and
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
10 - 'dynload' for loading code.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
11
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
12 The package provides abstractions to the Application Binary Interface
7
7ca57dbefed4 - ppc64 update from Masanori
cslag
parents: 0
diff changeset
13 of various hardware platforms such as x86, AMD64, ARM32/64, PowerPC32/64,
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
14 MIPS32/64 and SPARC32/64.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
15
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
16 Our releases are thoroughly tested across all supported platforms using a
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
17 flexible test suite.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
18
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
19 A typical application for the use of dyncall is the back-end of a FFI
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
20 (foreign function interface) for scripting languages to connect with
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
21 the C/C++ world.
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 binary footprint of the package is approx. 10-20 kb, depending on
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
24 the platform.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
25 Besides the test suite already mentioned, comprehensive documentation is
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
26 available.
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 Building the libraries
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
30 ----------------------
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
31
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
32 Prequisites:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
33 - C compiler such as gcc, clang, sunpro or msvc.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
34 - Assembler such as gas (gnu/apple), fbe or masm.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
35 - Build system such as 'shell/make', cmake, nmake (windows) or mk (plan9).
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
36
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
37
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
38 Supported Architectures and ABIs:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
39 ---------------------------------
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
40
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
41 - x86 32/64-bit (cdecl, fastcall, stdcall, C++ this calls, syscalls, plan9)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
42 - ARM AArch32/64 (32: ARM/Thumb mode, v4t-v7, oabi/eabi, soft/hardfloat ABIs; 64: AAPCS64)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
43 - MIPS 32/64-bit (o32, n64, eabi)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
44 - PowerPC 32/64-bit (32: Mac OS X, System V; 64: System V little and big endian ELF ABI)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
45 - Sparc 32/64-bit (v7/8 and v9)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
46
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
47 NOTE: Callback support is currently available on
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
48 x86-32/64, arm32 softfloat ABIs, arm64, PPC64 and PPC32 Linux/OS X.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
49
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
50 Supported Operating Systems:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
51 ----------------------------
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
52
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
53 - Android
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
54 - *BSD
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
55 - Haiku
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
56 - iOS
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
57 - Linux
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
58 - Mac OS X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
59 - Microsoft Windows
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
60 - Minix
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
61 - Nintendo DS Homebrew
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
62 - Plan9 / 9front
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
63 - Playstation Portable Homebrew
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
64 - ReactOS
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
65 - Solaris
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
66
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
67
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
68 Building the libraries
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
69 ----------------------
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
70
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
71 Using configure shell script and GNU/BSD/Sun make system.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
72
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
73 $ ./configure
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
74 $ make
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
75 $ make install
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
76
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
77 Testing:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
78
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
79 $ make tests
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
80 $ make run-tests
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
81
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
82
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
83 Build 'out-of-source'
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
84 ---------------------
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
85
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
86 $ cd <build_dir>
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
87 $ <src_dir>/configure --prefix=<install_dir>
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
88 $ make
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
89 $ sudo make install
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
90
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
91
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
92 Building using CMake
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
93 --------------------
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
94
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
95 $ cmake
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
96 $ make
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
97 $ sudo make install
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
98
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
99
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
100 Building on Windows
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
101 -------------------
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
102
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
103 See doc/README.Windows
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
104
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
105
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
106 Platform-specific build details
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
107 -------------------------------
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
108
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
109 See doc/README.*
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
110
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
111
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
112 Building the manual
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
113 -------------------
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
114
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
115 Make sure pdflatex is installed and run
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
116
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
117 $ make docs
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
118
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
119
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
120 Please refer to http://www.dyncall.org, dyncall(3), dyncallback(3), the dyncall
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
121 manual and platform-specific READMEs under doc/ for more information.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
122