diff options
-rw-r--r-- | eng/native/functions.cmake | 25 | ||||
-rw-r--r-- | eng/native/genmoduleindex.cmd | 25 | ||||
-rwxr-xr-x | eng/native/genmoduleindex.sh | 29 | ||||
-rw-r--r-- | src/coreclr/src/debug/runtimeinfo/CMakeLists.txt | 6 | ||||
-rw-r--r-- | src/coreclr/src/dlls/mscordac/CMakeLists.txt | 19 | ||||
-rw-r--r-- | src/coreclr/src/dlls/mscordbi/CMakeLists.txt | 19 | ||||
-rw-r--r-- | src/coreclr/src/dlls/mscoree/coreclr/CMakeLists.txt | 19 |
7 files changed, 85 insertions, 57 deletions
diff --git a/eng/native/functions.cmake b/eng/native/functions.cmake index b7f8f463804..b422fc7c7c8 100644 --- a/eng/native/functions.cmake +++ b/eng/native/functions.cmake @@ -415,3 +415,28 @@ endfunction() function(add_executable_clr) _add_executable(${ARGV}) endfunction() + +function(generate_module_index Target ModuleIndexFile) + if(CLR_CMAKE_HOST_WIN32) + set(scriptExt ".cmd") + else() + set(scriptExt ".sh") + endif() + + add_custom_command( + OUTPUT ${ModuleIndexFile} + COMMAND ${CLR_ENG_NATIVE_DIR}/genmoduleindex${scriptExt} $<TARGET_FILE:${Target}> ${ModuleIndexFile} + DEPENDS ${Target} + COMMENT "Generating ${Target} module index file -> ${ModuleIndexFile}" + ) + + set_source_files_properties( + ${ModuleIndexFile} + PROPERTIES GENERATED TRUE + ) + + add_custom_target( + ${Target}_module_index_header + DEPENDS ${ModuleIndexFile} + ) +endfunction(generate_module_index) diff --git a/eng/native/genmoduleindex.cmd b/eng/native/genmoduleindex.cmd new file mode 100644 index 00000000000..a6be851461a --- /dev/null +++ b/eng/native/genmoduleindex.cmd @@ -0,0 +1,25 @@ +@echo off +REM Generate module index header + +if [%1]==[] goto :Usage +if [%2]==[] goto :Usage + +setlocal +for /f "tokens=1" %%i in ('dumpbin /HEADERS %1 ^| findstr /c:"size of image"') do set imagesize=%%i +REM Pad the extracted size to 8 hex digits +set imagesize=00000000%imagesize% +set imagesize=%imagesize:~-8% + +for /f "tokens=1" %%i in ('dumpbin /HEADERS %1 ^| findstr /c:"time date"') do set timestamp=%%i +REM Pad the extracted time stamp to 8 hex digits +set timestamp=00000000%timestamp% +set timestamp=%timestamp:~-8% + +echo 0x08, 0x%timestamp:~6,2%, 0x%timestamp:~4,2%, 0x%timestamp:~2,2%, 0x%timestamp:~0,2%, 0x%imagesize:~6,2%, 0x%imagesize:~4,2%, 0x%imagesize:~2,2%, 0x%imagesize:~0,2%, > %2 + +endlocal +exit /b 0 + +:Usage +echo Usage: genmoduleindex.cmd ModuleBinaryFile IndexHeaderFile +exit /b 1 diff --git a/eng/native/genmoduleindex.sh b/eng/native/genmoduleindex.sh new file mode 100755 index 00000000000..77ead1cc8bd --- /dev/null +++ b/eng/native/genmoduleindex.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash +# +# Generate module index header +# +set -euo pipefail + +if [[ "$#" -lt 2 ]]; then + echo "Usage: genmoduleindex.sh ModuleBinaryFile IndexHeaderFile" + exit 1 +fi + +OSName=$(uname -s) + +case "$OSName" in +Darwin) + # Extract the build id and prefix it with its length in bytes + dwarfdump -u $1 | + awk '/UUID:/ { gsub(/\-/,"", $2); printf("%02x", length($2)/2); print $2}' | + # Convert each byte of the id to 0x prefixed constant followed by comma + sed -E s/\(\.\.\)/0x\\1,\ /g > $2 + ;; +*) + # Extract the build id and prefix it with its length in bytes + readelf -n $1 | + awk '/Build ID:/ { printf("%02x", length($3)/2); print $3 }' | + # Convert each byte of the id to 0x prefixed constant followed by comma + sed -E s/\(\.\.\)/0x\\1,\ /g > $2 + ;; +esac diff --git a/src/coreclr/src/debug/runtimeinfo/CMakeLists.txt b/src/coreclr/src/debug/runtimeinfo/CMakeLists.txt index 96a3d464b13..99b8f5edd08 100644 --- a/src/coreclr/src/debug/runtimeinfo/CMakeLists.txt +++ b/src/coreclr/src/debug/runtimeinfo/CMakeLists.txt @@ -6,6 +6,6 @@ set(RUNTIMEINFO_SOURCES add_library_clr(runtimeinfo STATIC ${RUNTIMEINFO_SOURCES}) -add_dependencies(runtimeinfo runtime_module_index_header) -add_dependencies(runtimeinfo dac_module_index_header) -add_dependencies(runtimeinfo dbi_module_index_header) +add_dependencies(runtimeinfo coreclr_module_index_header) +add_dependencies(runtimeinfo mscordaccore_module_index_header) +add_dependencies(runtimeinfo mscordbi_module_index_header) diff --git a/src/coreclr/src/dlls/mscordac/CMakeLists.txt b/src/coreclr/src/dlls/mscordac/CMakeLists.txt index e8e9ef16729..3e2a6bdb242 100644 --- a/src/coreclr/src/dlls/mscordac/CMakeLists.txt +++ b/src/coreclr/src/dlls/mscordac/CMakeLists.txt @@ -190,24 +190,7 @@ target_link_libraries(mscordaccore PRIVATE ${COREDAC_LIBRARIES}) # Create the DAC module index header file containing the DAC build id # for xplat and the timestamp/size on Windows. if(FEATURE_SINGLE_FILE_DIAGNOSTICS) - set( - DAC_MODULE_INDEX_FILE - ${GENERATED_INCLUDE_DIR}/dacmoduleindex.h - ) - add_custom_command( - OUTPUT ${DAC_MODULE_INDEX_FILE} - COMMAND ${CLR_DOTNET_COMMAND} ${CMAKE_INSTALL_PREFIX}/GetModuleIndex/GetModuleIndex.dll $<TARGET_FILE:mscordaccore> ${DAC_MODULE_INDEX_FILE} - DEPENDS mscordaccore - COMMENT "Generating DAC module index file -> ${DAC_MODULE_INDEX_FILE}" - ) - set_source_files_properties( - ${DAC_MODULE_INDEX_FILE} - PROPERTIES GENERATED TRUE - ) - add_custom_target( - dac_module_index_header - DEPENDS ${DAC_MODULE_INDEX_FILE} - ) + generate_module_index(mscordaccore ${GENERATED_INCLUDE_DIR}/dacmoduleindex.h) endif(FEATURE_SINGLE_FILE_DIAGNOSTICS) # add the install targets diff --git a/src/coreclr/src/dlls/mscordbi/CMakeLists.txt b/src/coreclr/src/dlls/mscordbi/CMakeLists.txt index 6d189272c75..d3a695cee4a 100644 --- a/src/coreclr/src/dlls/mscordbi/CMakeLists.txt +++ b/src/coreclr/src/dlls/mscordbi/CMakeLists.txt @@ -124,24 +124,7 @@ endif(CLR_CMAKE_HOST_WIN32) # Create the DBI module index header file containing the DBI build id # for xplat and the timestamp/size on Windows. if(FEATURE_SINGLE_FILE_DIAGNOSTICS) - set( - DBI_MODULE_INDEX_FILE - ${GENERATED_INCLUDE_DIR}/dbimoduleindex.h - ) - add_custom_command( - OUTPUT ${DBI_MODULE_INDEX_FILE} - COMMAND ${CLR_DOTNET_COMMAND} ${CMAKE_INSTALL_PREFIX}/GetModuleIndex/GetModuleIndex.dll $<TARGET_FILE:mscordbi> ${DBI_MODULE_INDEX_FILE} - DEPENDS mscordbi - COMMENT "Generating DBI module index file -> ${DBI_MODULE_INDEX_FILE}" - ) - set_source_files_properties( - ${DBI_MODULE_INDEX_FILE} - PROPERTIES GENERATED TRUE - ) - add_custom_target( - dbi_module_index_header - DEPENDS ${DBI_MODULE_INDEX_FILE} - ) + generate_module_index(mscordbi ${GENERATED_INCLUDE_DIR}/dbimoduleindex.h) endif(FEATURE_SINGLE_FILE_DIAGNOSTICS) # add the install targets diff --git a/src/coreclr/src/dlls/mscoree/coreclr/CMakeLists.txt b/src/coreclr/src/dlls/mscoree/coreclr/CMakeLists.txt index 777a2869e4f..52ec65fa73b 100644 --- a/src/coreclr/src/dlls/mscoree/coreclr/CMakeLists.txt +++ b/src/coreclr/src/dlls/mscoree/coreclr/CMakeLists.txt @@ -167,24 +167,7 @@ target_link_libraries(coreclr ${CORECLR_LIBRARIES}) # Create the runtime module index header file containing the coreclr build id # for xplat and the timestamp/size on Windows. if(FEATURE_SINGLE_FILE_DIAGNOSTICS) - set( - RUNTIME_MODULE_INDEX_FILE - ${GENERATED_INCLUDE_DIR}/runtimemoduleindex.h - ) - add_custom_command( - OUTPUT ${RUNTIME_MODULE_INDEX_FILE} - COMMAND ${CLR_DOTNET_COMMAND} ${CMAKE_INSTALL_PREFIX}/GetModuleIndex/GetModuleIndex.dll $<TARGET_FILE:coreclr> ${RUNTIME_MODULE_INDEX_FILE} - DEPENDS coreclr - COMMENT "Generating runtime module index file -> ${RUNTIME_MODULE_INDEX_FILE}" - ) - set_source_files_properties( - ${RUNTIME_MODULE_INDEX_FILE} - PROPERTIES GENERATED TRUE - ) - add_custom_target( - runtime_module_index_header - DEPENDS ${RUNTIME_MODULE_INDEX_FILE} - ) + generate_module_index(coreclr ${GENERATED_INCLUDE_DIR}/runtimemoduleindex.h) endif(FEATURE_SINGLE_FILE_DIAGNOSTICS) if(CLR_CMAKE_TARGET_WIN32) |