Skip to content

Commit

Permalink
fix: refactor find_linker into individual functions
Browse files Browse the repository at this point in the history
  • Loading branch information
aminya committed Aug 8, 2023
1 parent 262e3a7 commit e4d8af0
Showing 1 changed file with 55 additions and 19 deletions.
74 changes: 55 additions & 19 deletions src/Linker.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -50,50 +50,86 @@ Output variables:

]]
function(find_linker LINKER)
set(SUPPORTS_SOLD OFF)
find_sold(_PROGRAM_sold)
if(_PROGRAM_sold)
set(${LINKER} ${_PROGRAM_sold} PARENT_SCOPE)
return()
endif()

find_mold(_PROGRAM_mold)
if(_PROGRAM_mold)
set(${LINKER} ${_PROGRAM_mold} PARENT_SCOPE)
return()
endif()

find_lld(_PROGRAM_lld)
if(_PROGRAM_lld)
set(${LINKER} ${_PROGRAM_lld} PARENT_SCOPE)
return()
endif()

find_gold(_PROGRAM_gold)
if(_PROGRAM_gold)
set(${LINKER} ${_PROGRAM_gold} PARENT_SCOPE)
return()
endif()

# else, use the default linker
set(${LINKER} "" PARENT_SCOPE)
endfunction()

function(find_sold PROGRAM_sold)
if(UNIX AND NOT WIN32)
find_program(PROGRAM_sold NAMES "sold")
if(EXISTS ${PROGRAM_sold})
find_program(_PROGRAM_sold NAMES "sold")
if(EXISTS ${_PROGRAM_sold})
test_linker_option(SUPPORTS_SOLD "sold")
if(SUPPORTS_SOLD)
set(${LINKER} "sold" PARENT_SCOPE)
set(${PROGRAM_sold} ${_PROGRAM_sold} PARENT_SCOPE)
return()
endif()
endif()
endif()
set(SUPPORTS_MOLD OFF)
set(${PROGRAM_sold} OFF PARENT_SCOPE)
endfunction()

function(find_mold PROGRAM_mold)
if(UNIX AND NOT WIN32)
find_program(PROGRAM_MOLD NAMES "mold")
if(EXISTS ${PROGRAM_MOLD})
find_program(_PROGRAM_MOLD NAMES "mold")
if(EXISTS ${_PROGRAM_MOLD})
test_linker_option(SUPPORTS_MOLD "mold")
if(SUPPORTS_MOLD)
set(${LINKER} "mold" PARENT_SCOPE)
set(${PROGRAM_mold} ${_PROGRAM_MOLD} PARENT_SCOPE)
return()
endif()
endif()
endif()
set(SUPPORTS_LLD OFF)
if((CMAKE_CXX_COMPILER_ID MATCHES ".*Clang.*") AND NOT WIN32)
find_program(PROGRAM_LLD NAMES "lld")
if(EXISTS ${PROGRAM_LLD})
set(${PROGRAM_mold} OFF PARENT_SCOPE)
endfunction()

function(find_lld PROGRAM_lld)
if((CMAKE_CXX_COMPILER_ID MATCHES ".*Clang.*"))
find_program(_PROGRAM_LLD NAMES "lld")
if(EXISTS ${_PROGRAM_LLD})
test_linker_option(SUPPORTS_LLD "lld")
if(SUPPORTS_LLD)
set(${LINKER} "lld" PARENT_SCOPE)
set(${PROGRAM_lld} ${_PROGRAM_LLD} PARENT_SCOPE)
return()
endif()
endif()
endif()
set(SUPPORTS_GOLD OFF)
set(${PROGRAM_lld} OFF PARENT_SCOPE)
endfunction()

function(find_gold PROGRAM_gold)
if((CMAKE_CXX_COMPILER_ID MATCHES ".*GNU.*") AND NOT WIN32)
find_program(PROGRAM_GOLD NAMES "gold")
if(EXISTS ${PROGRAM_GOLD})
find_program(_PROGRAM_GOLD NAMES "gold")
if(EXISTS ${_PROGRAM_GOLD})
test_linker_option(SUPPORTS_GOLD "gold")
if(SUPPORTS_GOLD)
set(${LINKER} "gold" PARENT_SCOPE)
set(${PROGRAM_gold} ${_PROGRAM_GOLD} PARENT_SCOPE)
return()
endif()
endif()
endif()

# else, use the default linker
set(${PROGRAM_gold} OFF PARENT_SCOPE)
endfunction()

0 comments on commit e4d8af0

Please sign in to comment.