aboutsummaryrefslogtreecommitdiffstats
path: root/cmake/StaticBuild.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/StaticBuild.cmake')
-rw-r--r--cmake/StaticBuild.cmake67
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()