mirror of
https://github.com/Kitware/CMake.git
synced 2026-02-25 10:18:34 -06:00
Merge topic 'gnu-as'
9728839b9eASM: Fix executable link lines with GNU 'as' tool as CMAKE_ASM_COMPILER5932f0be4fASM: Fix depfile flags for GNU 'as' tool0d0aa98c84ASM: Record vendor-specific output matched to identify assembleree3ec27465CMakeDetermineCompilerId: Set locale to C for vendor output match Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !4460
This commit is contained in:
@@ -10,6 +10,7 @@ set(CMAKE_ASM@ASM_DIALECT@_COMPILER_LOADED 1)
|
||||
set(CMAKE_ASM@ASM_DIALECT@_COMPILER_ID "@_CMAKE_ASM_COMPILER_ID@")
|
||||
set(CMAKE_ASM@ASM_DIALECT@_COMPILER_VERSION "@_CMAKE_ASM_COMPILER_VERSION@")
|
||||
set(CMAKE_ASM@ASM_DIALECT@_COMPILER_ENV_VAR "@_CMAKE_ASM_COMPILER_ENV_VAR@")
|
||||
@_SET_CMAKE_ASM_COMPILER_ID_VENDOR_MATCH@
|
||||
@_SET_CMAKE_ASM_COMPILER_ARCHITECTURE_ID@
|
||||
|
||||
set(CMAKE_ASM@ASM_DIALECT@_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC)
|
||||
|
||||
@@ -211,6 +211,13 @@ foreach(_var
|
||||
set(_CMAKE_ASM_${_var} "${CMAKE_ASM${ASM_DIALECT}_${_var}}")
|
||||
endforeach()
|
||||
|
||||
if(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_MATCH)
|
||||
set(_SET_CMAKE_ASM_COMPILER_ID_VENDOR_MATCH
|
||||
"set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_MATCH [==[${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_MATCH}]==])")
|
||||
else()
|
||||
set(_SET_CMAKE_ASM_COMPILER_ID_VENDOR_MATCH "")
|
||||
endif()
|
||||
|
||||
if(CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID)
|
||||
set(_SET_CMAKE_ASM_COMPILER_ARCHITECTURE_ID
|
||||
"set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID ${CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID})")
|
||||
|
||||
@@ -868,6 +868,14 @@ function(CMAKE_DETERMINE_COMPILER_ID_VENDOR lang userflags)
|
||||
file(MAKE_DIRECTORY ${CMAKE_${lang}_COMPILER_ID_DIR})
|
||||
endif()
|
||||
|
||||
# Save the current LC_ALL, LC_MESSAGES, and LANG environment variables
|
||||
# and set them to "C" so we get the expected output to match.
|
||||
set(_orig_lc_all $ENV{LC_ALL})
|
||||
set(_orig_lc_messages $ENV{LC_MESSAGES})
|
||||
set(_orig_lang $ENV{LANG})
|
||||
set(ENV{LC_ALL} C)
|
||||
set(ENV{LC_MESSAGES} C)
|
||||
set(ENV{LANG} C)
|
||||
|
||||
foreach(vendor ${CMAKE_${lang}_COMPILER_ID_VENDORS})
|
||||
set(flags ${CMAKE_${lang}_COMPILER_ID_VENDOR_FLAGS_${vendor}})
|
||||
@@ -889,6 +897,7 @@ function(CMAKE_DETERMINE_COMPILER_ID_VENDOR lang userflags)
|
||||
"matched \"${regex}\":\n${output}")
|
||||
set(CMAKE_${lang}_COMPILER_ID "${vendor}" PARENT_SCOPE)
|
||||
set(CMAKE_${lang}_COMPILER_ID_OUTPUT "${output}" PARENT_SCOPE)
|
||||
set(CMAKE_${lang}_COMPILER_ID_VENDOR_MATCH "${CMAKE_MATCH_1}" PARENT_SCOPE)
|
||||
break()
|
||||
else()
|
||||
if("${result}" MATCHES "timeout")
|
||||
@@ -902,6 +911,11 @@ function(CMAKE_DETERMINE_COMPILER_ID_VENDOR lang userflags)
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
# Restore original LC_ALL, LC_MESSAGES, and LANG
|
||||
set(ENV{LC_ALL} ${_orig_lc_all})
|
||||
set(ENV{LC_MESSAGES} ${_orig_lc_messages})
|
||||
set(ENV{LANG} ${_orig_lang})
|
||||
endfunction()
|
||||
|
||||
function(CMAKE_DETERMINE_MSVC_SHOWINCLUDES_PREFIX lang userflags)
|
||||
|
||||
@@ -4,3 +4,9 @@ include(Compiler/GNU)
|
||||
set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s;S;asm)
|
||||
|
||||
__compiler_gnu(ASM)
|
||||
|
||||
if(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_MATCH STREQUAL "GNU assembler")
|
||||
set(CMAKE_DEPFILE_FLAGS_ASM${ASM_DIALECT} "--MD <DEPFILE>")
|
||||
set(CMAKE_ASM${ASM_DIALECT}_LINK_EXECUTABLE
|
||||
"<CMAKE_LINKER> <FLAGS> <CMAKE_ASM${ASM_DIALECT}_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
|
||||
endif()
|
||||
|
||||
4
Tests/RunCMake/BuildDepends/GNU-AS-stdout.txt
Normal file
4
Tests/RunCMake/BuildDepends/GNU-AS-stdout.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
-- The ASM compiler identification is GNU
|
||||
-- Found assembler: [^
|
||||
]*/as(\.exe)?
|
||||
-- CMAKE_ASM_COMPILER_ID_VENDOR_MATCH='GNU assembler'
|
||||
13
Tests/RunCMake/BuildDepends/GNU-AS.cmake
Normal file
13
Tests/RunCMake/BuildDepends/GNU-AS.cmake
Normal file
@@ -0,0 +1,13 @@
|
||||
enable_language(ASM)
|
||||
|
||||
# Validate undocumented implementation detail.
|
||||
message(STATUS "CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_MATCH='${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_MATCH}'")
|
||||
|
||||
add_library(gnu_as STATIC gnu_as.s)
|
||||
target_include_directories(gnu_as PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
|
||||
|
||||
file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/check-$<LOWER_CASE:$<CONFIG>>.cmake CONTENT "
|
||||
set(check_pairs
|
||||
\"$<TARGET_FILE:gnu_as>|${CMAKE_CURRENT_BINARY_DIR}/gnu_as.inc\"
|
||||
)
|
||||
")
|
||||
1
Tests/RunCMake/BuildDepends/GNU-AS.step1.cmake
Normal file
1
Tests/RunCMake/BuildDepends/GNU-AS.step1.cmake
Normal file
@@ -0,0 +1 @@
|
||||
file(WRITE "${RunCMake_TEST_BINARY_DIR}/gnu_as.inc" "")
|
||||
1
Tests/RunCMake/BuildDepends/GNU-AS.step2.cmake
Normal file
1
Tests/RunCMake/BuildDepends/GNU-AS.step2.cmake
Normal file
@@ -0,0 +1 @@
|
||||
file(WRITE "${RunCMake_TEST_BINARY_DIR}/gnu_as.inc" "")
|
||||
@@ -103,3 +103,8 @@ endfunction()
|
||||
if(RunCMake_GENERATOR STREQUAL "Xcode")
|
||||
run_ReGeneration(regenerate-project)
|
||||
endif()
|
||||
|
||||
if(CMake_TEST_BuildDepends_GNU_AS)
|
||||
set(ENV{ASM} "${CMake_TEST_BuildDepends_GNU_AS}")
|
||||
run_BuildDepends(GNU-AS)
|
||||
endif()
|
||||
|
||||
1
Tests/RunCMake/BuildDepends/gnu_as.s
Normal file
1
Tests/RunCMake/BuildDepends/gnu_as.s
Normal file
@@ -0,0 +1 @@
|
||||
.include "gnu_as.inc"
|
||||
@@ -169,7 +169,20 @@ if(CMake_TEST_Qt5 AND Qt5Widgets_FOUND)
|
||||
set(autogen_with_qt5 TRUE)
|
||||
endif ()
|
||||
add_RunCMake_test(Autogen -Dwith_qt5=${autogen_with_qt5})
|
||||
add_RunCMake_test(BuildDepends)
|
||||
if(NOT DEFINED CMake_TEST_BuildDepends_GNU_AS
|
||||
AND CMAKE_C_COMPILER_ID STREQUAL "GNU"
|
||||
AND CMAKE_GENERATOR MATCHES "^Ninja"
|
||||
)
|
||||
execute_process(COMMAND "${CMAKE_C_COMPILER}" -print-prog-name=as
|
||||
RESULT_VARIABLE _gnu_res
|
||||
OUTPUT_VARIABLE _gnu_as OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET)
|
||||
if(_gnu_res EQUAL 0 AND _gnu_as)
|
||||
set(CMake_TEST_BuildDepends_GNU_AS "${_gnu_as}")
|
||||
endif()
|
||||
endif()
|
||||
add_RunCMake_test(BuildDepends
|
||||
-DCMake_TEST_BuildDepends_GNU_AS=${CMake_TEST_BuildDepends_GNU_AS}
|
||||
)
|
||||
if(UNIX AND "${CMAKE_GENERATOR}" MATCHES "Unix Makefiles|Ninja")
|
||||
add_RunCMake_test(Byproducts)
|
||||
endif()
|
||||
|
||||
Reference in New Issue
Block a user