[waffle] [PATCH 10/33] cmake: build with fPIC when possible
Chad Versace
chad.versace at linux.intel.com
Wed Jul 16 21:22:50 PDT 2014
On 07/15/2014 07:44 AM, Jose Fonseca wrote:
> On 07/07/14 18:28, Emil Velikov wrote:
>> Some of our third_party libraries may be build without it thus we'll
>> fail at
>> link tim.
>>
>> Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
>> ---
>> cmake/Modules/WaffleDefineCompilerFlags.cmake | 2 ++
>> 1 file changed, 2 insertions(+)
>>
>> diff --git a/cmake/Modules/WaffleDefineCompilerFlags.cmake
>> b/cmake/Modules/WaffleDefineCompilerFlags.cmake
>> index 4d149c8..96a7a10 100644
>> --- a/cmake/Modules/WaffleDefineCompilerFlags.cmake
>> +++ b/cmake/Modules/WaffleDefineCompilerFlags.cmake
>> @@ -50,6 +50,8 @@ if(waffle_on_linux)
>> waffle_add_c_flag("-Werror=missing-prototypes"
>> WERROR_MISSING_PROTOTYPES)
>> endif()
>>
>> +waffle_add_c_flag("-fPIC" WITH_FPIC)
>> +
>> waffle_check_thread_local_storage()
>>
>> if(waffle_has_tls)
>>
>
> Another way of fixing this is doing like in Apitrace:
>
> -
> https://github.com/apitrace/apitrace/blob/master/cmak/ConvenienceLibrary.cmake
>
>
> -
> https://github.com/apitrace/apitrace/commit/c56b9acc6abcae465b916f6ebafa3a282d1f36fc
>
>
> This gives more control. For example, unlike a blanket -FPIC flag,
> executables won't be needlessly compiled with FPIC.
Jose, your add_convenience_library() function may be unneeded. See the
manpage quote below.
Emil, did you intend to compile *everything*, including executables,
with PIC?
On master, Waffle is already building shared libraries with PIC. I
verified it with:
$ ninja clean
$ ninja -v libwaffle-1.so | grep -e '-o libwaffle'
... cc -fPIC ... -o lib/libwaffle-1.so.0.3.90 ...
CMake's default behavior is to build shared libraries with PIC. From
man://cmake(1) :
> set_target_properties
> ...
> POSITION_INDEPENDENT_CODE
> Whether to create a position-independent target
>
> The POSITION_INDEPENDENT_CODE property determines whether posi‐
> tion independent executables or shared libraries will be cre‐
> ated. This property is true by default for SHARED and MODULE
> library targets and false otherwise. This property is initial‐
> ized by the value of the variable CMAKE_POSITION_INDEPEN‐
> DENT_CODE if it is set when a target is created.
More information about the waffle
mailing list