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

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.




Attachment: signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil

vdr mailing list

Reply via email to