From: Hermès Bélusca-Maïto Date: Sat, 9 Feb 2019 23:43:31 +0000 (+0100) Subject: [FREELDR][SDK:CMAKE] Move the `MSVC "linker script" file' functionality out of FreeLd... X-Git-Tag: 0.4.13-dev~435 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=7d0cd6e9372501bf24c7540fd9bd48ea8614fe49 [FREELDR][SDK:CMAKE] Move the `MSVC "linker script" file' functionality out of FreeLdr's cmake file and place it in the dedicated files instead. --- diff --git a/boot/freeldr/freeldr/CMakeLists.txt b/boot/freeldr/freeldr/CMakeLists.txt index 6fb59604c2e..74a9b444c24 100644 --- a/boot/freeldr/freeldr/CMakeLists.txt +++ b/boot/freeldr/freeldr/CMakeLists.txt @@ -5,74 +5,6 @@ if(SEPARATE_DBG) set(CMAKE_LDR_PE_HELPER_STANDARD_LIBRARIES "-lgcc" CACHE STRING "Standard C Libraries") endif() -if(NOT MSVC) -### -### For GCC -### -function(add_linker_script _target _linker_script_file) - get_filename_component(_file_full_path ${_linker_script_file} ABSOLUTE) - add_target_link_flags(${_target} "-Wl,-T,${_file_full_path}") - - # Unfortunately LINK_DEPENDS is ignored in non-Makefile generators (for now...) - # See also http://www.cmake.org/pipermail/cmake/2010-May/037206.html - add_target_property(${_target} LINK_DEPENDS ${_file_full_path}) -endfunction() - -else() -### -### For MSVC -### -function(add_linker_script _target _linker_script_file) - get_filename_component(_file_full_path ${_linker_script_file} ABSOLUTE) - get_filename_component(_file_name ${_linker_script_file} NAME) - set(_generated_file_path_prefix "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${_target}.dir/${_file_name}") - - # Generate the ASM module containing sections specifications and layout. - set(_generated_file "${_generated_file_path_prefix}.S") - add_custom_command( - OUTPUT ${_generated_file} - COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${_file_full_path}" "${_generated_file}" - DEPENDS ${_file_full_path}) - set_source_files_properties(${_generated_file} PROPERTIES LANGUAGE "ASM" GENERATED TRUE) - add_asm_files(${_target}_freeldr_linker_file ${_generated_file}) - - # Generate the C module containing extra sections specifications and layout, - # as well as comment-type linker #pragma directives. - set(_generated_file "${_generated_file_path_prefix}.c") - add_custom_command( - OUTPUT ${_generated_file} - COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${_file_full_path}" "${_generated_file}" - DEPENDS ${_file_full_path}) - set_source_files_properties(${_generated_file} PROPERTIES LANGUAGE "C" GENERATED TRUE) - list(APPEND ${_target}_freeldr_linker_file ${_generated_file}) - - # Add both files to the sources of the target. - target_sources(${_target} PRIVATE "${${_target}_freeldr_linker_file}") - - # Create the additional linker response file. - set(_generated_file "${_generated_file_path_prefix}.rsp") - if(USE_CLANG_CL) - set(_no_std_includes_flag "-nostdinc") - else() - set(_no_std_includes_flag "/X") - endif() - add_custom_command( - #OUTPUT ${_generated_file} - TARGET ${_target} PRE_LINK - COMMAND ${CMAKE_C_COMPILER} /nologo ${_no_std_includes_flag} /D__LINKER__ /EP /c "${_file_full_path}" > "${_generated_file}" - DEPENDS ${_file_full_path} - VERBATIM) - set_source_files_properties(${_generated_file} PROPERTIES GENERATED TRUE) - add_target_link_flags(${_target} "@${_generated_file}") - - # Unfortunately LINK_DEPENDS is ignored in non-Makefile generators (for now...) - # See also http://www.cmake.org/pipermail/cmake/2010-May/037206.html - add_target_property(${_target} LINK_DEPENDS ${_generated_file}) -endfunction() - -endif() - - if(MSVC) # We don't need hotpatching replace_compile_flags("/hotpatch" " ") diff --git a/sdk/cmake/gcc.cmake b/sdk/cmake/gcc.cmake index da203e5aa1a..4c83f508f76 100644 --- a/sdk/cmake/gcc.cmake +++ b/sdk/cmake/gcc.cmake @@ -452,7 +452,6 @@ function(CreateBootSectorTarget _target_name _asm_file _binary_file _base_addres set_source_files_properties(${_object_file} ${_binary_file} PROPERTIES GENERATED TRUE) add_custom_target(${_target_name} ALL DEPENDS ${_binary_file}) - endfunction() function(allow_warnings __module) @@ -463,3 +462,12 @@ endfunction() macro(add_asm_files _target) list(APPEND ${_target} ${ARGN}) endmacro() + +function(add_linker_script _target _linker_script_file) + get_filename_component(_file_full_path ${_linker_script_file} ABSOLUTE) + add_target_link_flags(${_target} "-Wl,-T,${_file_full_path}") + + # Unfortunately LINK_DEPENDS is ignored in non-Makefile generators (for now...) + # See also http://www.cmake.org/pipermail/cmake/2010-May/037206.html + add_target_property(${_target} LINK_DEPENDS ${_file_full_path}) +endfunction() diff --git a/sdk/cmake/msvc.cmake b/sdk/cmake/msvc.cmake index b0c5f18a459..7f0ec9851b9 100644 --- a/sdk/cmake/msvc.cmake +++ b/sdk/cmake/msvc.cmake @@ -540,3 +540,51 @@ macro(add_asm_files _target) list(APPEND ${_target} ${ARGN}) endif() endmacro() + +function(add_linker_script _target _linker_script_file) + get_filename_component(_file_full_path ${_linker_script_file} ABSOLUTE) + get_filename_component(_file_name ${_linker_script_file} NAME) + set(_generated_file_path_prefix "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${_target}.dir/${_file_name}") + + # Generate the ASM module containing sections specifications and layout. + set(_generated_file "${_generated_file_path_prefix}.S") + add_custom_command( + OUTPUT ${_generated_file} + COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${_file_full_path}" "${_generated_file}" + DEPENDS ${_file_full_path}) + set_source_files_properties(${_generated_file} PROPERTIES LANGUAGE "ASM" GENERATED TRUE) + add_asm_files(${_target}_linker_file ${_generated_file}) + + # Generate the C module containing extra sections specifications and layout, + # as well as comment-type linker #pragma directives. + set(_generated_file "${_generated_file_path_prefix}.c") + add_custom_command( + OUTPUT ${_generated_file} + COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${_file_full_path}" "${_generated_file}" + DEPENDS ${_file_full_path}) + set_source_files_properties(${_generated_file} PROPERTIES LANGUAGE "C" GENERATED TRUE) + list(APPEND ${_target}_linker_file ${_generated_file}) + + # Add both files to the sources of the target. + target_sources(${_target} PRIVATE "${${_target}_linker_file}") + + # Create the additional linker response file. + set(_generated_file "${_generated_file_path_prefix}.rsp") + if(USE_CLANG_CL) + set(_no_std_includes_flag "-nostdinc") + else() + set(_no_std_includes_flag "/X") + endif() + add_custom_command( + #OUTPUT ${_generated_file} + TARGET ${_target} PRE_LINK + COMMAND ${CMAKE_C_COMPILER} /nologo ${_no_std_includes_flag} /D__LINKER__ /EP /c "${_file_full_path}" > "${_generated_file}" + DEPENDS ${_file_full_path} + VERBATIM) + set_source_files_properties(${_generated_file} PROPERTIES GENERATED TRUE) + add_target_link_flags(${_target} "@${_generated_file}") + + # Unfortunately LINK_DEPENDS is ignored in non-Makefile generators (for now...) + # See also http://www.cmake.org/pipermail/cmake/2010-May/037206.html + add_target_property(${_target} LINK_DEPENDS ${_generated_file}) +endfunction()