annotate doc/README.Generic @ 0:3e629dc19168

initial from svn dyncall-1745
author Daniel Adler
date Thu, 19 Mar 2015 22:24:28 +0100
parents
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