From 92b4f9de986c5a9b72af8af61b8d3afcab1581d5 Mon Sep 17 00:00:00 2001 From: Pierre Ossman Date: Mon, 22 Aug 2011 11:38:35 +0000 Subject: [PATCH] CMake doesn't handle convenience libraries as nicely as autotools does. We need to be explicit with -fPIC here as we use these in libvnc.so. git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4645 3789f03b-4d11-0410-bbf8-ca57d06f2519 --- common/Xregion/CMakeLists.txt | 8 ++++++++ common/network/CMakeLists.txt | 8 ++++++++ common/os/CMakeLists.txt | 8 ++++++++ common/rdr/CMakeLists.txt | 8 ++++++++ common/rfb/CMakeLists.txt | 8 ++++++++ common/zlib/CMakeLists.txt | 8 ++++++++ 6 files changed, 48 insertions(+) diff --git a/common/Xregion/CMakeLists.txt b/common/Xregion/CMakeLists.txt index 40ca97e4..a7788ebd 100644 --- a/common/Xregion/CMakeLists.txt +++ b/common/Xregion/CMakeLists.txt @@ -1,6 +1,14 @@ add_library(Xregion STATIC Region.c) +# This code goes into libvnc.so, so it needs to be PIC on x86_64. +# (It should be on archs as well, but we prefer performance over memory +# efficiency. Win64 is excluded because PIC is always on there and it +# complains when you give it the explicit flag.) +if(CMAKE_COMPILER_IS_GNUCXX AND (CMAKE_SIZEOF_VOID_P MATCHES 8) AND NOT WIN32) + set_target_properties(Xregion PROPERTIES COMPILE_FLAGS -fPIC) +endif() + if(UNIX) libtool_create_control_file(Xregion) endif() diff --git a/common/network/CMakeLists.txt b/common/network/CMakeLists.txt index ddde5745..681d2912 100644 --- a/common/network/CMakeLists.txt +++ b/common/network/CMakeLists.txt @@ -3,6 +3,14 @@ include_directories(${CMAKE_SOURCE_DIR}/common) add_library(network STATIC TcpSocket.cxx) +# This code goes into libvnc.so, so it needs to be PIC on x86_64. +# (It should be on archs as well, but we prefer performance over memory +# efficiency. Win64 is excluded because PIC is always on there and it +# complains when you give it the explicit flag.) +if(CMAKE_COMPILER_IS_GNUCXX AND (CMAKE_SIZEOF_VOID_P MATCHES 8) AND NOT WIN32) + set_target_properties(network PROPERTIES COMPILE_FLAGS -fPIC) +endif() + if(UNIX) libtool_create_control_file(network) endif() diff --git a/common/os/CMakeLists.txt b/common/os/CMakeLists.txt index 82f11659..623a32f8 100644 --- a/common/os/CMakeLists.txt +++ b/common/os/CMakeLists.txt @@ -5,3 +5,11 @@ add_library(os STATIC net.c os.cxx tls.cxx) + +# This code goes into libvnc.so, so it needs to be PIC on x86_64. +# (It should be on archs as well, but we prefer performance over memory +# efficiency. Win64 is excluded because PIC is always on there and it +# complains when you give it the explicit flag.) +if(CMAKE_COMPILER_IS_GNUCXX AND (CMAKE_SIZEOF_VOID_P MATCHES 8) AND NOT WIN32) + set_target_properties(os PROPERTIES COMPILE_FLAGS -fPIC) +endif() diff --git a/common/rdr/CMakeLists.txt b/common/rdr/CMakeLists.txt index ee71a9bb..6d3ec1d6 100644 --- a/common/rdr/CMakeLists.txt +++ b/common/rdr/CMakeLists.txt @@ -24,6 +24,14 @@ endif() target_link_libraries(rdr ${RDR_LIBRARIES}) +# This code goes into libvnc.so, so it needs to be PIC on x86_64. +# (It should be on archs as well, but we prefer performance over memory +# efficiency. Win64 is excluded because PIC is always on there and it +# complains when you give it the explicit flag.) +if(CMAKE_COMPILER_IS_GNUCXX AND (CMAKE_SIZEOF_VOID_P MATCHES 8) AND NOT WIN32) + set_target_properties(rdr PROPERTIES COMPILE_FLAGS -fPIC) +endif() + if(UNIX) libtool_create_control_file(rdr) endif() diff --git a/common/rfb/CMakeLists.txt b/common/rfb/CMakeLists.txt index be03c646..f8c1a432 100644 --- a/common/rfb/CMakeLists.txt +++ b/common/rfb/CMakeLists.txt @@ -95,6 +95,14 @@ add_library(rfb STATIC ${RFB_SOURCES}) target_link_libraries(rfb ${RFB_LIBRARIES}) +# This code goes into libvnc.so, so it needs to be PIC on x86_64. +# (It should be on archs as well, but we prefer performance over memory +# efficiency. Win64 is excluded because PIC is always on there and it +# complains when you give it the explicit flag.) +if(CMAKE_COMPILER_IS_GNUCXX AND (CMAKE_SIZEOF_VOID_P MATCHES 8) AND NOT WIN32) + set_target_properties(rfb PROPERTIES COMPILE_FLAGS -fPIC) +endif() + if(UNIX) libtool_create_control_file(rfb) endif() diff --git a/common/zlib/CMakeLists.txt b/common/zlib/CMakeLists.txt index 69f1c9f9..ecee0eb9 100644 --- a/common/zlib/CMakeLists.txt +++ b/common/zlib/CMakeLists.txt @@ -20,3 +20,11 @@ add_library(zlib STATIC trees.c uncompr.c zutil.c) + +# This code goes into libvnc.so, so it needs to be PIC on x86_64. +# (It should be on other archs as well, but we prefer performance over memory +# efficiency. Win64 is excluded because PIC is always on there and it +# complains when you give it the explicit flag.) +if(CMAKE_COMPILER_IS_GNUCXX AND (CMAKE_SIZEOF_VOID_P MATCHES 8) AND NOT WIN32) + set_target_properties(zlib PROPERTIES COMPILE_FLAGS -fPIC) +endif() -- 2.39.5