diff options
-rw-r--r-- | CMakeLists.txt | 38 | ||||
-rwxr-xr-x | unix/build-xorg | 18 |
2 files changed, 42 insertions, 14 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index ef347056..e67feb4f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -107,6 +107,44 @@ else() message(STATUS "32-bit build") endif() +# This ensures that we don't depend on libstdc++ or libgcc +if(CMAKE_COMPILER_IS_GNUCXX AND NOT APPLE AND NOT CYGWIN) + option(BUILD_STATIC + "Link statically against libgcc and libstdc++, if possible" OFF) + if(BUILD_STATIC) + # For some reason, simply passing ${CMAKE_CXX_FLAGS} to the compiler in + # execute_process() doesn't work. Grrr... + if(64BIT) + execute_process(COMMAND ${CMAKE_CXX_COMPILER} -m64 + --print-file-name=libstdc++.a OUTPUT_VARIABLE LIBSTDCPLUSPLUS + RESULT_VARIABLE RESULT) + else() + execute_process(COMMAND ${CMAKE_CXX_COMPILER} -m32 + --print-file-name=libstdc++.a OUTPUT_VARIABLE LIBSTDCPLUSPLUS + RESULT_VARIABLE RESULT) + endif() + string(REGEX REPLACE "\n" "" LIBSTDCPLUSPLUS ${LIBSTDCPLUSPLUS}) + if(RESULT MATCHES 0 AND LIBSTDCPLUSPLUS) + message(STATUS "Linking with static libstdc++:\n ${LIBSTDCPLUSPLUS}") + file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/staticlib) + execute_process(COMMAND ${CMAKE_COMMAND} -E remove + ${CMAKE_BINARY_DIR}/staticlib/libstdc++.a) + execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink + ${LIBSTDCPLUSPLUS} ${CMAKE_BINARY_DIR}/staticlib/libstdc++.a) + set(CMAKE_EXE_LINKER_FLAGS + "${CMAKE_EXE_LINKER_FLAGS} -L${CMAKE_BINARY_DIR}/staticlib") + set(CMAKE_SHARED_LINKER_FLAGS + "${CMAKE_SHARED_LINKER_FLAGS} -L${CMAKE_BINARY_DIR}/staticlib") + else() + message(WARNING Cannot find static libstdc++. VirtualGL will depend on dynamic libstdc++.) + endif() + add_definitions(-static-libgcc) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc") + set(CMAKE_SHARED_LINKER_FLAGS + "${CMAKE_SHARED_LINKER_FLAGS} -static-libgcc") + endif() +endif() + # CMake doesn't properly support resource compilation with MinGW. Boo! if(MINGW) if(NOT DEFINED RC) diff --git a/unix/build-xorg b/unix/build-xorg index ffa04e27..e71f6dd4 100755 --- a/unix/build-xorg +++ b/unix/build-xorg @@ -116,7 +116,7 @@ build () # Build VNC echo "*** Building VNC ***" - cmake -G"Unix Makefiles" ${1+"$@"} -DUSE_INCLUDED_ZLIB=1 $SRCDIR + cmake -G"Unix Makefiles" ${1+"$@"} -DUSE_INCLUDED_ZLIB=1 -DUSE_INCLUDED_FLTK=1 -DBUILD_STATIC=1 $SRCDIR $MAKE # Build Xorg @@ -291,9 +291,9 @@ if [ "$MODE" = "build" ]; then if [ "$CXXFLAGS" = "" ]; then CXXFLAGS=-O3 fi - CFLAGS="$CFLAGS -static-libgcc -fPIC" - CXXFLAGS="$CXXFLAGS -static-libgcc -fPIC" - LDFLAGS="$LDFLAGS -static-libgcc -L`pwd`/xorg.build/syslib" + CFLAGS="$CFLAGS -fPIC" + CXXFLAGS="$CXXFLAGS -fPIC" + LDFLAGS="$LDFLAGS -L`pwd`/xorg.build/syslib" echo CC = $CC echo CXX = $CXX echo CFLAGS = $CFLAGS @@ -302,16 +302,6 @@ if [ "$MODE" = "build" ]; then if [[ $CFLAGS = *-m32* ]]; then CFGHOST="--host i686-pc-linux-gnu" fi - if [ -f ./xorg.build/syslib/libstdc++.a ]; then - rm -f ./xorg.build/syslib/libstdc++.a - fi - LIBSTDCPLUSPLUS=`$CC $CFLAGS -print-file-name=libstdc++.a` - if [ ! -f $LIBSTDCPLUSPLUS ]; then - echo Cannot find suitable libstdc++.a. Aborting ... - exit 1 - else - ln -fs $LIBSTDCPLUSPLUS ./xorg.build/syslib - fi STATICLIBS='libcrypto.a libz.a' for lib in $STATICLIBS; do if [ -f ./xorg.build/syslib/$lib ]; then |