view doc/README.embedded @ 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
line wrap: on
line source

Makefile.embedded - hybrid DynCall makefiles for GNU, BSD and SUN make
======================================================================


Brief overview
--------------
This is one of the latest build systems designed for DynCall.
It was designed for being embeddable in bigger 'make' based systems.
It uses a very simple structure and it does not require any 'configure' phase.
Instead the user can specify the CFLAGS and LDFLAGS by himself.
For a couple of platforms, the make system supports phony targets of popular
operating-systems such as 'bsd'.

Building the library:
---------------------
$ make -f Makefile.embedded <variant>

Building the tests:
-------------------
$ cd test ; make -f Makefile.embedded <variant>

Installation:
-------------
$ make -f Makefile.embedded PREFIX=/usr/local install

Installation with support for DESTDIR:
--------------------------------------
$ make -f Makefile.embedded DESTDIR=/tmp/staging PREFIX=/usr/local install


Available variants:
-------------------
bsd                   Free/Net/Open/DragonFly/Mir BSD     
linux                 Linux
osx                   Mac OS X
osx-universal         Mac OS X universal binaries (i386,x86_64 and ppc)
sun                   SunOS and Sun Pro compiler
sun-64bit             SunOS and Sun Pro compiler for sparc64(? amd64) 
sun-gcc               SunOS and GCC compiler
sun-gcc-64bit         SunOS and GCC compiler for sparc64 (? amd64)
ios61                 iOS SDK 6.1 armv7  (untested!)
ios61-nothumb         iOS SDK 6.1 armv7 -mno-thumb (untested!)

Tweaking the build:
-------------------
$ VAR1=<VALUE1> VAR2=<VALUE2> .. make -f Makefile.embedded <variant>

Adding a variant
-----------------
Currently we deal with two files to specify a custom target.

The top-level Makefile.embedded controls for building the libraries.
Useful variables are AR, CC, CFLAGS and ASFLAGS.

The test/Makefile.embedded file controls for building the tests.
The tests currently involve sometimes C++ and some platforms need
to link with the math library. Others need the dynamic linker.
Useful variables are CXX, CC, CCC (Sun), CFLAGS, CCFLAGS (Sun), 
CXXFLAGS andLDFLAGS.

Background
----------
During the preparation for the public release of the R package 'rdyncall' I was 
looking for a way to get DynCall integrated into an existing Make system such 
as offered by R for build R packages. 

It was inspired by the make files of Lua which are damn simple and
don't need a configure but a user that knows the target platform name.

The source package can be configured automatically during compilation and
does not require explicit configuration anymore using "*.S" files that
are Assembly files which are preprocessed by the C Preprocessor.

This feature is available by GCC and SunPro compilers.

Limitations
-----------

Mac OS X universal static libraries require to use 

'libtool -static -o libname.a obj1.o obj2.o ...' instead of 'ar cru libname.a obj1.o obj2.o'.
We use predefined variables AR and ARFLAGS. 
The variant osx-universal uses AR=libtool.