annotate doc/README.Generic @ 357:d982a00c2177

- PPC64 asm syntax fix, specifying explicitly comparison mode for cmpi (newer toolchains complain, older ones took optional field of instruction which happened to be same value)
author Tassilo Philipp
date Tue, 25 Feb 2020 18:16:13 +0100
parents 3e629dc19168
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 Building DynCall with generic makefiles
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
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
5 Description
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
6 -----------
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
7
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
8 Makefile.generic is a simple and _hybrid_ make-based build system setup for dyncall,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
9 designed to work with with GNU and BSD make.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
10
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
11 This build-flavour supports two operating modes: Embedded and Configure.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
12
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
13 Project files are specified in Makefile.generic.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
14
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
15
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
16 History
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
17 -------
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
18 During the integration of dyncall into the R package rdyncall, there
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
19 was a need for a clean simple build system that could be launched from R
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
20 and works with various make's such as GNU, BSD and sun make.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
21
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
22
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
23 Generic Usage
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
24 -------------
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
25
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
26 [g|bsd]make [-f Makefile.generic] [all|clean|install|...] [INSTALL_TOP=<path>]
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 Embedded Mode
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
30 -------------
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
31 Makefile.generic makefiles are taken "as-is" without the need for extra configuration.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
32
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
33 <VAR1>=<VALUE1> ... bsdmake -f Makefile.generic
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
34 <VAR1>=<VALUE1> ... gmake -f Makefile.generic
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
35
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
36 (Note that setting an env var as above (<VAR1>=<VALUE1>) before running a command is
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
37 shell specific. If your shell doesn't support this, set it according to the shell's
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
38 style.)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
39
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
40 Example:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
41 dyncall libraries should compile fine on most platforms:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
42
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
43 BSDmake:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
44 $ bsdmake -f Makefile.generic
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
45
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
46 GNUmake:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
47 $ make -f Makefile.generic
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
48
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
49 The tests sometimes require special attention to additional 'usual' libraries
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
50 such as math and dynamic linker run-time libs.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
51 $ LDLIBS="-lm -ldl" make -f Makefile.generic
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
52
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
53
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
54 Configure Mode
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
55 --------------
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
56
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
57 Usage:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
58
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
59 cd <build-dir> # build-dir can be arbitrary
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
60 ../<path-to-source>/configure [--prefix=<path>]
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
61 make
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
62 make install [DESTDIR=<path>]
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
63
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
64 The configure script 'configure' writes 'Makefile' files that
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
65 include 'Makefile.generic' and setup variables such as
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
66 VPATH, {SRC,BLD}{TOP,DIR}.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
67
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
68 Two build types are supported: In-source and out-of-Source.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
69
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
70 in-source builds:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
71 Makefile's are created in parallel to the Makefile.generic files.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
72
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
73 out-of-source builds:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
74 the configure script is executed from a (possible empty) build directory.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
75 The source directory tree is duplicated into that directory.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
76
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
77
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
78 Useful Variables
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
79 ----------------
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
80
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
81 For libraries:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
82 CC, CFLAGS, CPPFLAGS
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
83 For tests:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
84 CXX, LDLIBS
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
85
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
86 MAKE_CMD - The make tool (including -f flag) to run sub-directories.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
87 SRCTOP - Source top-level directory (defaults to relative top).
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
88 BLDTOP - Build top-level directory (defaults to SRCTOP).
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
89 SRCDIR - Source directory (defaults to '.').
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
90 BLDDIR - Build directory (defaults to SRCDIR).
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
91
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
92 e.g. Makefile.generic in source-tree:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
93
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
94 SRCTOP ?= ../../../ # relative path to source-top
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
95 BLDTOP ?= ${SRCTOP} # defaults for in-source builds
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
96 SRCDIR ?= . # relative path to current directory
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
97 BLDDIR ?= ${BLDDIR} # relative path to current directory
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 Include Directories
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
101 -------------------
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
102 Use -I${SRCTOP}/... to refer to other include directories.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
103
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
104
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
105 Link Directories
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
106 ----------------
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
107 Use -L${BLDTOP}/... to refer to other build directories.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
108
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
109
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
110 Plaform Notes:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
111 --------------
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
112 Linux:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
113 - all: ok.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
114 make -f Makefile.generic all
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
115 - tests: need 'm' and 'dl' libs.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
116 ( cd tests ; LDLIBS="-lm -ldl" make -f Makefile.generic )
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
117 - see batch script: buildsys/scripts/batch-build-linux.sh
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
118
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
119 Minix: No dynload support. No '-fPIC' is allowed.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
120 - dynload: unsupport, no dynamic linker present in Minix 3.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
121 - dyn{call,callback}: ok, without '-fPIC'!
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
122 ( cd dyncall ; CFLAGS= make -f Makefile.generic dyncall dyncallback )
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
123 - tests: ok
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
124 ( cd test ; make -f Makefile.generic all-dyncall all-dyncallback )
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
125 - see batch script: buildsys/scripts/batch-build-minix.sh
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
126
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
127 NetBSD/FreeBSD:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
128 - all: ok.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
129 make -f Makefile.generic all
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
130 - tests: need math lib:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
131 ( cd tests ; LDLIBS="-lm" make -f Makefile.generic )
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
132
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
133 OpenBSD:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
134 - all: ok.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
135 make -f Makefile.generic all
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
136 - tests: *.cpp implicit rule not set, therefore only c tests work:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
137 ( cd tests ; LDLIBS="-lm" make -f Makefile.generic all-c )
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
138 - install: ok.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
139
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
140 Haiku Alpha 2:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
141 - dynload: elf.h header found, install system source for dynload support
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
142 - dyn{call,callback}: ok.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
143 make -f Makefile.generic dyncall dyncallback
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
144 - tests: ok
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
145 ( cd test ; make -f Makefile.generic all-dyncall all-dyncallback )
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
146
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
147
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
148 Build notes related to dyncall:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
149 -------------------------------
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
150
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
151 CFLAGS
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
152 Use '-fPIC' for at least 64-bit systems and when you want the code to be
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
153 included as a shared library or module image.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
154 LDLIBS
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
155 Use '-lm' for test/suite - it uses pow function.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
156 Use '-ldl' for dynload examples such as test/nm and test/resolve_self on Linux.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
157
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
158
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
159 Feature:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
160 --------
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
161 configure --prefix=<prefix> -> Makefile DESTDIR=variable
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
162 make -f Makefile.generic DESTDIR=<prefix>
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
163
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
164
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
165 Todo:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
166 -----
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
167 - sun's make: CXX does not exist.. no rule for *.cpp files but *.cc.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
168