@@ -467,7 +467,38 @@ if (CMAKE_VERSION VERSION_LESS "3.16")
467467 endfunction ()
468468endif ()
469469
470- function (add_executable_clr)
470+ # add_linker_flag(Flag [Config1 Config2 ...])
471+ function (add_linker_flag Flag)
472+ if (ARGN STREQUAL "" )
473+ set ("CMAKE_EXE_LINKER_FLAGS" "${CMAKE_EXE_LINKER_FLAGS} ${Flag} " PARENT_SCOPE)
474+ set ("CMAKE_SHARED_LINKER_FLAGS" "${CMAKE_SHARED_LINKER_FLAGS} ${Flag} " PARENT_SCOPE)
475+ else ()
476+ foreach (Config ${ARGN} )
477+ set ("CMAKE_EXE_LINKER_FLAGS_${Config} " "${CMAKE_EXE_LINKER_FLAGS_${Config} } ${Flag} " PARENT_SCOPE)
478+ set ("CMAKE_SHARED_LINKER_FLAGS_${Config} " "${CMAKE_SHARED_LINKER_FLAGS_${Config} } ${Flag} " PARENT_SCOPE)
479+ endforeach ()
480+ endif ()
481+ endfunction ()
482+
483+ function (link_natvis_sources_for_target targetName linkKind)
484+ if (NOT CLR_CMAKE_HOST_WIN32)
485+ return ()
486+ endif ()
487+ foreach (source ${ARGN} )
488+ if (NOT IS_ABSOLUTE "${source} " )
489+ convert_to_absolute_path(source ${source} )
490+ endif ()
491+ get_filename_component (extension "${source} " EXT )
492+ if ("${extension} " STREQUAL ".natvis" )
493+ message ("Embedding natvis ${source} " )
494+ # Since natvis embedding is only supported on Windows
495+ # we can use target_link_options since our minimum version is high enough
496+ target_link_options (${targetName} "${linkKind} " "-NATVIS:${source} " )
497+ endif ()
498+ endforeach ()
499+ endfunction ()
500+
501+ function (add_executable_clr targetName)
471502 if (NOT WIN32 )
472503 add_executable (${ARGV} ${VERSION_FILE_PATH} )
473504 disable_pax_mprotect(${ARGV} )
@@ -479,26 +510,13 @@ function(add_executable_clr)
479510 endif ()
480511endfunction ()
481512
482- function (add_library_clr)
483- if (NOT WIN32 AND "${ARGV1 } " STREQUAL "SHARED" )
513+ function (add_library_clr targetName kind )
514+ if (NOT WIN32 AND "${kind } " STREQUAL "SHARED" )
484515 add_library (${ARGV} ${VERSION_FILE_PATH} )
485516 else ()
486517 add_library (${ARGV} )
487- endif (NOT WIN32 AND " ${ARGV1} " STREQUAL "SHARED" )
488- if ("${ARGV1 } " STREQUAL "SHARED" AND NOT CLR_CMAKE_KEEP_NATIVE_SYMBOLS)
518+ endif ()
519+ if ("${kind } " STREQUAL "SHARED" AND NOT CLR_CMAKE_KEEP_NATIVE_SYMBOLS)
489520 strip_symbols(${ARGV0} symbolFile)
490521 endif ()
491522endfunction ()
492-
493- # add_linker_flag(Flag [Config1 Config2 ...])
494- function (add_linker_flag Flag)
495- if (ARGN STREQUAL "" )
496- set ("CMAKE_EXE_LINKER_FLAGS" "${CMAKE_EXE_LINKER_FLAGS} ${Flag} " PARENT_SCOPE)
497- set ("CMAKE_SHARED_LINKER_FLAGS" "${CMAKE_SHARED_LINKER_FLAGS} ${Flag} " PARENT_SCOPE)
498- else ()
499- foreach (Config ${ARGN} )
500- set ("CMAKE_EXE_LINKER_FLAGS_${Config} " "${CMAKE_EXE_LINKER_FLAGS_${Config} } ${Flag} " PARENT_SCOPE)
501- set ("CMAKE_SHARED_LINKER_FLAGS_${Config} " "${CMAKE_SHARED_LINKER_FLAGS_${Config} } ${Flag} " PARENT_SCOPE)
502- endforeach ()
503- endif ()
504- endfunction ()
0 commit comments