Dear VDR users,
in `Make.config.template` [1] which if renamed to `Make.config` gets included in all Makefiles there is
ifdef PLUGIN CFLAGS += -fPIC CXXFLAGS += -fPIC DEFINES += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE endif
which just gets included if `PLUGIN` is defined, which is normally done in the Makefile of a plugin as for example in `Makefile` [3] belonging to the plugin hello [2].
Additionally in each Makefile of a plugin `C[XX]FLAGS` is set to
CXXFLAGS ?= -fPIC -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
if it has not been defined yet for example in the environment.
As far as I understand plugins have to be compiled with the `-fPIC` flag, so that the VDR can be linked against them [4]. Otherwise it would give an error message as the following example.
ld: hello.o: relocation R_ARM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC hello.o: could not read symbols: Bad value
The problem now is, that if `Make.config` does not contain the snippet from the top and `C[XX]FLAGS` are defined before without `-fPIC` building the plugins fails. This scenario is typical in cross compilation [5].
I do not know if the `DEFINES` from above are required, so I just concentrate on the `-fPIC` issue because this flag is needed for a successful build.
I thought of two solutions. Maybe you see something better.
1. Each `Makefile` of a plugin gets rewritten to always append `-fPIC` to `C[XX]FLAGS`. Here is an example for the plugin hello.
diff --git a/PLUGINS/src/hello/Makefile b/PLUGINS/src/hello/Makefile index ea5b806..a02d6c2 100644 --- a/PLUGINS/src/hello/Makefile +++ b/PLUGINS/src/hello/Makefile @@ -18,7 +18,8 @@ VERSION = $(shell grep 'static const char *VERSION *=' $(PLUGIN).c | awk '{ pri ### The C++ compiler and options:
CXX ?= g++ -CXXFLAGS ?= -fPIC -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses +CXXFLAGS ?= -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses +CXXFLAGS += -fPIC
### The directory environment:
2. If `DEFINES` from the beginning is also needed, that we should factor the snippet out into a file `Make.plugins` and every plugin has to include it in its Makefile.
What do you think? What alternative is preferable? When this is decided I would create a patch to change that in VDR.
Thanks,
Paul
[1] http://git.gekrumbel.de/vdr.git?p=vdr.git;a=blob;f=Make.config.template [2] http://git.gekrumbel.de/vdr.git?p=vdr.git;a=tree;f=PLUGINS/src/hello [3] http://git.gekrumbel.de/vdr.git?p=vdr.git;a=blob;f=PLUGINS/src/hello/Makefil... [4] http://www.gentoo.org/proj/en/base/amd64/howtos/index.xml?part=1&chap=3 [5] http://lists.linuxtogo.org/pipermail/openembedded-devel/2010-January/016213....