diff options
Diffstat (limited to 'cmake/StaticBuild.cmake')
-rw-r--r-- | cmake/StaticBuild.cmake | 67 |
1 files changed, 17 insertions, 50 deletions
diff --git a/cmake/StaticBuild.cmake b/cmake/StaticBuild.cmake index d518bc4a..f46e2154 100644 --- a/cmake/StaticBuild.cmake +++ b/cmake/StaticBuild.cmake @@ -23,34 +23,20 @@ if(BUILD_STATIC) set(PIXMAN_LIBRARIES "-Wl,-Bstatic -lpixman-1 -Wl,-Bdynamic") # gettext is included in libc on many unix systems + check_function_exists(dgettext LIBC_HAS_DGETTEXT) if(NOT LIBC_HAS_DGETTEXT) - FIND_LIBRARY(UNISTRING_LIBRARY NAMES unistring libunistring - HINTS ${PC_GETTEXT_LIBDIR} ${PC_GETTEXT_LIBRARY_DIRS}) - FIND_LIBRARY(INTL_LIBRARY NAMES intl libintl - HINTS ${PC_GETTEXT_LIBDIR} ${PC_GETTEXT_LIBRARY_DIRS}) - FIND_LIBRARY(ICONV_LIBRARY NAMES iconv libiconv - HINTS ${PC_GETTEXT_LIBDIR} ${PC_GETTEXT_LIBRARY_DIRS}) + FIND_LIBRARY(UNISTRING_LIBRARY NAMES unistring libunistring) - set(GETTEXT_LIBRARIES "-Wl,-Bstatic") + set(Intl_LIBRARIES "-Wl,-Bstatic -lintl -liconv") - if(INTL_LIBRARY) - set(GETTEXT_LIBRARIES "${GETTEXT_LIBRARIES} -lintl") - endif() - - if(ICONV_LIBRARY) - set(GETTEXT_LIBRARIES "${GETTEXT_LIBRARIES} -liconv") - endif() - - set(GETTEXT_LIBRARIES "${GETTEXT_LIBRARIES} -Wl,-Bdynamic") - - # FIXME: MSYS2 doesn't include a static version of this library, so - # we'll have to link it dynamically for now if(UNISTRING_LIBRARY) - set(GETTEXT_LIBRARIES "${GETTEXT_LIBRARIES} -lunistring") + set(Intl_LIBRARIES "${Intl_LIBRARIES} -lunistring") endif() + set(Intl_LIBRARIES "${Intl_LIBRARIES} -Wl,-Bdynamic") + if(APPLE) - set(GETTEXT_LIBRARIES "${GETTEXT_LIBRARIES} -framework Carbon") + set(Intl_LIBRARIES "${Intl_LIBRARIES} -framework Carbon") endif() endif() @@ -107,7 +93,7 @@ if(BUILD_STATIC) # GnuTLS uses gettext and zlib, so make sure those are always # included and in the proper order set(GNUTLS_LIBRARIES "${GNUTLS_LIBRARIES} ${ZLIB_LIBRARIES}") - set(GNUTLS_LIBRARIES "${GNUTLS_LIBRARIES} ${GETTEXT_LIBRARIES}") + set(GNUTLS_LIBRARIES "${GNUTLS_LIBRARIES} ${Intl_LIBRARIES}") # The last variables might introduce whitespace, which CMake # throws a hissy fit about @@ -116,8 +102,7 @@ if(BUILD_STATIC) if(NETTLE_FOUND) set(NETTLE_LIBRARIES "-Wl,-Bstatic -lnettle -Wl,-Bdynamic") - set(HOGWEED_LIBRARIES "-Wl,-Bstatic -lhogweed -Wl,-Bdynamic") - set(GMP_LIBRARIES "-Wl,-Bstatic -lgmp -Wl,-Bdynamic") + set(HOGWEED_LIBRARIES "-Wl,-Bstatic -lhogweed -lnettle -lgmp -Wl,-Bdynamic") endif() if(DEFINED FLTK_LIBRARIES) @@ -163,32 +148,14 @@ if(BUILD_STATIC) endif() if(BUILD_STATIC_GCC) - set(STATIC_BASE_LIBRARIES "") - if(ENABLE_ASAN AND NOT WIN32 AND NOT APPLE) - set(STATIC_BASE_LIBRARIES "${STATIC_BASE_LIBRARIES} -Wl,-Bstatic -lasan -Wl,-Bdynamic -ldl -lpthread") - endif() - if(ENABLE_TSAN AND NOT WIN32 AND NOT APPLE AND CMAKE_SIZEOF_VOID_P MATCHES 8) - # libtsan redefines some C++ symbols which then conflict with a - # statically linked libstdc++. Work around this by allowing multiple - # definitions. The linker will pick the first one (i.e. the one - # from libtsan). - set(STATIC_BASE_LIBRARIES "${STATIC_BASE_LIBRARIES} -Wl,-z -Wl,muldefs -Wl,-Bstatic -ltsan -Wl,-Bdynamic -ldl -lm") + set(CMAKE_C_LINK_EXECUTABLE "${CMAKE_C_LINK_EXECUTABLE} -static-libgcc") + set(CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_LINK_EXECUTABLE} -static-libstdc++ -static-libgcc") + if(ENABLE_ASAN) + set(CMAKE_C_LINK_EXECUTABLE "${CMAKE_C_LINK_EXECUTABLE} -static-libasan") + set(CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_LINK_EXECUTABLE} -static-libasan") endif() - if(WIN32) - set(STATIC_BASE_LIBRARIES "${STATIC_BASE_LIBRARIES} -lmingw32 -lgcc_eh -lgcc -lmoldname -lmingwex -lmsvcrt") - find_package(Threads) - if(CMAKE_USE_PTHREADS_INIT) - # pthread has to be statically linked after libraries above and before kernel32 - set(STATIC_BASE_LIBRARIES "${STATIC_BASE_LIBRARIES} -Wl,-Bstatic -lpthread -Wl,-Bdynamic") - endif() - set(STATIC_BASE_LIBRARIES "${STATIC_BASE_LIBRARIES} -luser32 -lkernel32 -ladvapi32 -lshell32") - # mingw has some fun circular dependencies that requires us to link - # these things again - set(STATIC_BASE_LIBRARIES "${STATIC_BASE_LIBRARIES} -lmingw32 -lgcc_eh -lgcc -lmoldname -lmingwex -lmsvcrt") - else() - set(STATIC_BASE_LIBRARIES "${STATIC_BASE_LIBRARIES} -lm -lgcc -lgcc_eh -lc") + if(ENABLE_TSAN) + set(CMAKE_C_LINK_EXECUTABLE "${CMAKE_C_LINK_EXECUTABLE} -static-libtsan") + set(CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_LINK_EXECUTABLE} -static-libtsan") endif() - # -nodefaultlibs ensures that we don't depend on libstdc++ or libgcc_s - set(CMAKE_C_LINK_EXECUTABLE "${CMAKE_C_LINK_EXECUTABLE} -nodefaultlibs ${STATIC_BASE_LIBRARIES}") - set(CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_LINK_EXECUTABLE} -nodefaultlibs -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic ${STATIC_BASE_LIBRARIES}") endif() |