Mercurial > pub > dyncall > dyncall
diff doc/README.Generic @ 0:3e629dc19168
initial from svn dyncall-1745
author | Daniel Adler |
---|---|
date | Thu, 19 Mar 2015 22:24:28 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/README.Generic Thu Mar 19 22:24:28 2015 +0100 @@ -0,0 +1,168 @@ +Building DynCall with generic makefiles +======================================= + + +Description +----------- + +Makefile.generic is a simple and _hybrid_ make-based build system setup for dyncall, +designed to work with with GNU and BSD make. + +This build-flavour supports two operating modes: Embedded and Configure. + +Project files are specified in Makefile.generic. + + +History +------- +During the integration of dyncall into the R package rdyncall, there +was a need for a clean simple build system that could be launched from R +and works with various make's such as GNU, BSD and sun make. + + +Generic Usage +------------- + +[g|bsd]make [-f Makefile.generic] [all|clean|install|...] [INSTALL_TOP=<path>] + + +Embedded Mode +------------- +Makefile.generic makefiles are taken "as-is" without the need for extra configuration. + +<VAR1>=<VALUE1> ... bsdmake -f Makefile.generic +<VAR1>=<VALUE1> ... gmake -f Makefile.generic + +(Note that setting an env var as above (<VAR1>=<VALUE1>) before running a command is +shell specific. If your shell doesn't support this, set it according to the shell's +style.) + +Example: + dyncall libraries should compile fine on most platforms: + + BSDmake: + $ bsdmake -f Makefile.generic + + GNUmake: + $ make -f Makefile.generic + + The tests sometimes require special attention to additional 'usual' libraries + such as math and dynamic linker run-time libs. + $ LDLIBS="-lm -ldl" make -f Makefile.generic + + +Configure Mode +-------------- + +Usage: + + cd <build-dir> # build-dir can be arbitrary + ../<path-to-source>/configure [--prefix=<path>] + make + make install [DESTDIR=<path>] + +The configure script 'configure' writes 'Makefile' files that +include 'Makefile.generic' and setup variables such as +VPATH, {SRC,BLD}{TOP,DIR}. + +Two build types are supported: In-source and out-of-Source. + +in-source builds: +Makefile's are created in parallel to the Makefile.generic files. + +out-of-source builds: +the configure script is executed from a (possible empty) build directory. +The source directory tree is duplicated into that directory. + + +Useful Variables +---------------- + +For libraries: + CC, CFLAGS, CPPFLAGS +For tests: + CXX, LDLIBS + +MAKE_CMD - The make tool (including -f flag) to run sub-directories. +SRCTOP - Source top-level directory (defaults to relative top). +BLDTOP - Build top-level directory (defaults to SRCTOP). +SRCDIR - Source directory (defaults to '.'). +BLDDIR - Build directory (defaults to SRCDIR). + +e.g. Makefile.generic in source-tree: + +SRCTOP ?= ../../../ # relative path to source-top +BLDTOP ?= ${SRCTOP} # defaults for in-source builds +SRCDIR ?= . # relative path to current directory +BLDDIR ?= ${BLDDIR} # relative path to current directory + + +Include Directories +------------------- +Use -I${SRCTOP}/... to refer to other include directories. + + +Link Directories +---------------- +Use -L${BLDTOP}/... to refer to other build directories. + + +Plaform Notes: +-------------- +Linux: +- all: ok. + make -f Makefile.generic all +- tests: need 'm' and 'dl' libs. + ( cd tests ; LDLIBS="-lm -ldl" make -f Makefile.generic ) +- see batch script: buildsys/scripts/batch-build-linux.sh + +Minix: No dynload support. No '-fPIC' is allowed. +- dynload: unsupport, no dynamic linker present in Minix 3. +- dyn{call,callback}: ok, without '-fPIC'! + ( cd dyncall ; CFLAGS= make -f Makefile.generic dyncall dyncallback ) +- tests: ok + ( cd test ; make -f Makefile.generic all-dyncall all-dyncallback ) +- see batch script: buildsys/scripts/batch-build-minix.sh + +NetBSD/FreeBSD: +- all: ok. + make -f Makefile.generic all +- tests: need math lib: + ( cd tests ; LDLIBS="-lm" make -f Makefile.generic ) + +OpenBSD: +- all: ok. + make -f Makefile.generic all +- tests: *.cpp implicit rule not set, therefore only c tests work: + ( cd tests ; LDLIBS="-lm" make -f Makefile.generic all-c ) +- install: ok. + +Haiku Alpha 2: +- dynload: elf.h header found, install system source for dynload support +- dyn{call,callback}: ok. + make -f Makefile.generic dyncall dyncallback +- tests: ok + ( cd test ; make -f Makefile.generic all-dyncall all-dyncallback ) + + +Build notes related to dyncall: +------------------------------- + +CFLAGS + Use '-fPIC' for at least 64-bit systems and when you want the code to be + included as a shared library or module image. +LDLIBS + Use '-lm' for test/suite - it uses pow function. + Use '-ldl' for dynload examples such as test/nm and test/resolve_self on Linux. + + +Feature: +-------- +configure --prefix=<prefix> -> Makefile DESTDIR=variable +make -f Makefile.generic DESTDIR=<prefix> + + +Todo: +----- +- sun's make: CXX does not exist.. no rule for *.cpp files but *.cc. +