Skip to content

Commit

Permalink
CMake: Add LDC_FULLY_STATIC option
Browse files Browse the repository at this point in the history
  • Loading branch information
kinke committed Jan 20, 2025
1 parent 9adc6b6 commit f89fc19
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 10 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ jobs:
-DLDC_INSTALL_LLVM_RUNTIME_LIBS_ARCH=x86_64
-DTEST_COMPILER_RT_LIBRARIES="profile;lsan;asan;msan;fuzzer"
-DCMAKE_EXE_LINKER_FLAGS=-static-libstdc++
-DD_LINKER_ARGS=-static
-DLDC_FULLY_STATIC=ON
-DD_COMPILER_FLAGS="-O -flto=full"
# FIXME: -defaultlib=phobos2-ldc-lto,druntime-ldc-lto
with_pgo: false
Expand Down
14 changes: 10 additions & 4 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,12 @@ else()
separate_arguments(LLVM_LDFLAGS UNIX_COMMAND "${LLVM_LDFLAGS}")
endif()

option(LDC_FULLY_STATIC "Posix: Link most executables (compiler and tools) as fully-static binaries" OFF)
set(FULLY_STATIC_LDFLAG)
if(UNIX AND LDC_FULLY_STATIC)
set(FULLY_STATIC_LDFLAG "-static")
endif()

# Suppress superfluous randlib warnings about "*.a" having no symbols on MacOSX.
if (APPLE)
set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
Expand Down Expand Up @@ -708,7 +714,7 @@ build_d_executable(
"${LDC_EXE_FULL}"
"${LDC_D_SOURCE_FILES}"
"${DFLAGS_BUILD_TYPE} ${DFLAGS_LDC}"
"${ALTERNATIVE_MALLOC_O};${LDC_LINKERFLAG_LIST}"
"${ALTERNATIVE_MALLOC_O};${LDC_LINKERFLAG_LIST};${FULLY_STATIC_LDFLAG}"
"${FE_RES}"
"${LDC_LIB}"
${COMPILE_D_MODULES_SEPARATELY}
Expand Down Expand Up @@ -743,7 +749,7 @@ build_d_executable(
"${LDMD_EXE_FULL}"
"${LDMD_D_SOURCE_FILES}"
"${DFLAGS_BUILD_TYPE}"
"${LDC_LINKERFLAG_LIST}"
"${LDC_LINKERFLAG_LIST};${FULLY_STATIC_LDFLAG}"
""
"LDMD_CXX_LIB"
${COMPILE_D_MODULES_SEPARATELY}
Expand Down Expand Up @@ -927,7 +933,7 @@ build_d_executable(
"${LDC_UNITTEST_EXE_FULL}"
"${LDC_D_SOURCE_FILES}"
"-g -unittest ${DFLAGS_LDC}"
"${LDC_LINKERFLAG_LIST}"
"${LDC_LINKERFLAG_LIST};${FULLY_STATIC_LDFLAG}"
""
"${LDC_LIB}"
${COMPILE_D_MODULES_SEPARATELY}
Expand Down Expand Up @@ -957,7 +963,7 @@ build_d_executable(
"${LDC_BUILD_RUNTIME_EXE_FULL}"
"${PROJECT_BINARY_DIR}/ldc-build-runtime.d"
"${DFLAGS_BUILD_TYPE}"
""
"" # must not be fully static for std.net.curl support (loading libcurl dynamically)
"${PROJECT_SOURCE_DIR}/runtime/ldc-build-runtime.d.in"
""
${COMPILE_D_MODULES_SEPARATELY}
Expand Down
10 changes: 5 additions & 5 deletions tools/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ build_d_executable(
"${LDCPRUNECACHE_EXE_FULL}"
"${LDCPRUNECACHE_D_SRC}"
"${DFLAGS_BUILD_TYPE}"
""
"${FULLY_STATIC_LDFLAG}"
""
""
${COMPILE_D_MODULES_SEPARATELY}
Expand All @@ -35,7 +35,7 @@ if(LDC_BUNDLE_LLVM_TOOLS)
ldc-profdata PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin
COMPILE_FLAGS "${LLVM_CXXFLAGS} ${LDC_CXXFLAGS}"
LINK_FLAGS "${SANITIZE_LDFLAGS}"
LINK_FLAGS "${SANITIZE_LDFLAGS} ${FULLY_STATIC_LDFLAG}"
)
target_link_libraries(ldc-profdata ${LLVM_LIBRARIES} ${CMAKE_DL_LIBS} ${LLVM_LDFLAGS})
install(TARGETS ldc-profdata DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
Expand All @@ -59,7 +59,7 @@ if(LDC_BUNDLE_LLVM_TOOLS)
${ldc_name} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin
COMPILE_FLAGS "${LLVM_CXXFLAGS} ${LDC_CXXFLAGS}"
LINK_FLAGS "${SANITIZE_LDFLAGS}"
LINK_FLAGS "${SANITIZE_LDFLAGS} ${FULLY_STATIC_LDFLAG}"
)
target_link_libraries(${ldc_name} ${LLVM_LIBRARIES} ${CMAKE_DL_LIBS} ${LLVM_LDFLAGS})
install(TARGETS ${ldc_name} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
Expand Down Expand Up @@ -91,7 +91,7 @@ build_d_executable(
"${TIMETRACE2TXT_EXE_FULL}"
"${TIMETRACE2TXT_D_SRC}"
"${DFLAGS_BUILD_TYPE}"
""
"${FULLY_STATIC_LDFLAG}"
""
""
${COMPILE_D_MODULES_SEPARATELY}
Expand All @@ -111,7 +111,7 @@ if(LDC_ENABLE_PLUGINS)
"${LDC_BUILD_PLUGIN_EXE_FULL}"
"${PROJECT_BINARY_DIR}/ldc-build-plugin.d"
"${DFLAGS_BUILD_TYPE}"
""
"" # must not be fully static for std.net.curl support (loading libcurl dynamically)
"${PROJECT_SOURCE_DIR}/tools/ldc-build-plugin.d.in"
""
${COMPILE_D_MODULES_SEPARATELY}
Expand Down

0 comments on commit f89fc19

Please sign in to comment.