Don't link ldc-build-runtime and ldc-prune-cache against LLVM libs

This commit is contained in:
Martin Kinkelin 2019-09-26 22:12:22 +02:00
parent 1c79b5bf65
commit dd04ea5191
2 changed files with 20 additions and 25 deletions

View file

@ -626,24 +626,12 @@ if(UNIX AND (CMAKE_COMPILER_IS_GNUCXX OR (${CMAKE_CXX_COMPILER_ID} MATCHES "Clan
message(STATUS "Host D compiler linker program: ${D_LINKER_COMMAND}")
message(STATUS "Host D compiler linker flags: ${D_LINKER_ARGS}")
endif()
list(APPEND LDC_LINKERFLAG_LIST ${D_LINKER_ARGS})
if(NOT "${CMAKE_EXE_LINKER_FLAGS}" STREQUAL "")
separate_arguments(flags UNIX_COMMAND "${CMAKE_EXE_LINKER_FLAGS}")
list(APPEND LDC_LINKERFLAG_LIST ${flags})
endif()
else()
# Use D compiler for linking, trying to translate a few common linker flags.
set(LDC_TRANSLATED_LINKER_FLAGS "")
foreach(f ${LDC_LINKERFLAG_LIST})
string(REPLACE "-LIBPATH:" "/LIBPATH:" f ${f})
list(APPEND LDC_TRANSLATED_LINKER_FLAGS "-L${f}")
endforeach()
endif()
# CONFIG generator expressions need to be repeated due to https://cmake.org/Bug/view.php?id=14353
if(MSVC_IDE)
separate_arguments(LDC_FLAG_LIST WINDOWS_COMMAND "${LDC_TRANSLATED_LINKER_FLAGS} ${D_COMPILER_FLAGS} ${DDMD_DFLAGS} ${DDMD_LFLAGS}")
translate_linker_args(linker_args translated_linker_args)
separate_arguments(LDC_FLAG_LIST WINDOWS_COMMAND "${D_COMPILER_FLAGS} ${DDMD_DFLAGS} ${DDMD_LFLAGS} ${translated_linker_args}")
add_custom_command(
OUTPUT ${LDC_EXE_FULL}
COMMAND ${D_COMPILER} -L$<TARGET_LINKER_FILE:${LDC_LIB}> ${LDC_FLAG_LIST} -of${LDC_EXE_FULL} ${LDC_D_SOURCE_FILES} $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:-g> $<$<NOT:$<CONFIG:Debug>>:-O> $<$<NOT:$<CONFIG:Debug>>:-inline> $<$<NOT:$<CONFIG:Debug>>:-release>
@ -656,7 +644,7 @@ else()
"${LDC_EXE_FULL}"
"${LDC_D_SOURCE_FILES}"
""
"$<TARGET_LINKER_FILE:${LDC_LIB}>"
"$<TARGET_LINKER_FILE:${LDC_LIB}>;${LDC_LINKERFLAG_LIST}"
"${FE_RES}"
"${LDC_LIB}"
${COMPILE_D_MODULES_SEPARATELY}
@ -699,7 +687,7 @@ build_d_executable(
"${LDMD_EXE_FULL}"
"${LDMD_D_SOURCE_FILES}"
""
"$<TARGET_LINKER_FILE:LDMD_CXX_LIB>"
"$<TARGET_LINKER_FILE:LDMD_CXX_LIB>;${LDC_LINKERFLAG_LIST}"
""
"LDMD_CXX_LIB"
${COMPILE_D_MODULES_SEPARATELY}
@ -858,7 +846,7 @@ build_d_executable(
"${LDC_UNITTEST_EXE_FULL}"
"${LDC_D_SOURCE_FILES}"
"-unittest"
"$<TARGET_LINKER_FILE:${LDC_LIB}>"
"$<TARGET_LINKER_FILE:${LDC_LIB}>;${LDC_LINKERFLAG_LIST}"
""
"${LDC_LIB}"
ON # always build separately (faster with parallelization)

View file

@ -1,11 +1,21 @@
# Translates linker args for usage in DMD-compatible command-line (prepend -L).
macro(translate_linker_args in_var out_var)
set(${out_var} "")
foreach(f IN LISTS "${in_var}")
if(NOT "${f}" STREQUAL "")
string(REPLACE "-LIBPATH:" "/LIBPATH:" f ${f})
list(APPEND ${out_var} "-L${f}")
endif()
endforeach()
endmacro()
# Depends on these global variables:
# - D_COMPILER
# - D_COMPILER_FLAGS
# - DDMD_DFLAGS
# - DDMD_LFLAGS
# - LDC_LINK_MANUALLY
# - LDC_LINKERFLAG_LIST
# - LDC_TRANSLATED_LINKER_FLAGS
# - D_LINKER_ARGS
function(build_d_executable target_name output_exe d_src_files compiler_args linker_args extra_compile_deps link_deps compile_separately)
set(dflags "${D_COMPILER_FLAGS} ${DDMD_DFLAGS}")
if(UNIX)
@ -51,7 +61,7 @@ function(build_d_executable target_name output_exe d_src_files compiler_args lin
RUNTIME_OUTPUT_DIRECTORY ${output_dir}
LINKER_LANGUAGE CXX
)
target_link_libraries(${target_name} ${linker_args} ${LDC_LINKERFLAG_LIST})
target_link_libraries(${target_name} ${linker_args} ${D_LINKER_ARGS})
else()
# Use a response file on Windows when compiling separately, in order not to
# exceed the max command-line length.
@ -62,13 +72,10 @@ function(build_d_executable target_name output_exe d_src_files compiler_args lin
set(objects_args "@${output_exe}.rsp")
endif()
set(translated_linker_args "")
foreach(f ${linker_args})
list(APPEND translated_linker_args "-L${f}")
endforeach()
translate_linker_args(linker_args translated_linker_args)
add_custom_command(
OUTPUT ${output_exe}
COMMAND ${D_COMPILER} ${dflags} ${DDMD_LFLAGS} -of${output_exe} ${objects_args} ${translated_linker_args} ${LDC_TRANSLATED_LINKER_FLAGS}
COMMAND ${D_COMPILER} ${dflags} ${DDMD_LFLAGS} -of${output_exe} ${objects_args} ${translated_linker_args}
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
DEPENDS ${object_files} ${link_deps}
)