arch: BINFMT_FLAT_SHARED is not really shared for buildroot purposes
authorSonic Zhang <sonic.zhang@analog.com>
Fri, 27 Mar 2015 21:10:23 +0000 (22:10 +0100)
committerThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Mon, 30 Mar 2015 21:07:48 +0000 (23:07 +0200)
Although BINFMT_FLAT_SHARED is indeed a shared library format, it does
not support dynamic library loading with dlopen(). So for buildroot
purposes, BR2_STATIC_LIBS shouldn't be selected.

As it happens, the compiler options that are added for
BINFMT_FLAT_SHARED also make the compiler ignore the -static option, so
we can simply force BR2_STATIC_LIBS and things work out perfectly.

Therefore, remove the select of BR2_BINFMT_SUPPORTS_SHARED from
BINFMT_FLAT_SHARED, which in turn makes sure that BR2_STATIC_LIBS is
selected.

[Arnout: rewrite commit message, add explanatory comment]

Signed-off-by: Sonic Zhang <sonic.zhang@analog.com>
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
arch/Config.in

index 16ad8be56b6cea3d653c9cd1b833920b5193ca2d..59bf84a918205598550e78c6b0d473c041ac6211 100644 (file)
@@ -295,7 +295,12 @@ config BR2_BINFMT_FLAT_SEP_DATA
 
 config BR2_BINFMT_FLAT_SHARED
        bool "Shared binary"
-       select BR2_BINFMT_SUPPORTS_SHARED
+       # Even though this really generates shared binaries, there is no libdl
+       # and dlopen() cannot be used. So packages that require shared
+       # libraries cannot be built. Therefore, we don't select
+       # BR2_BINFMT_SUPPORTS_SHARED and therefore force BR2_STATIC_LIBS.
+       # Although this adds -static to the compilation, that's not a problem
+       # because the -mid-shared-library option overrides it.
        help
          Allow to load and link indiviual FLAT binaries at run time.