Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/dotnet/runtime.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--eng/native/functions.cmake25
-rw-r--r--eng/native/genmoduleindex.cmd25
-rwxr-xr-xeng/native/genmoduleindex.sh29
-rw-r--r--src/coreclr/src/debug/runtimeinfo/CMakeLists.txt6
-rw-r--r--src/coreclr/src/dlls/mscordac/CMakeLists.txt19
-rw-r--r--src/coreclr/src/dlls/mscordbi/CMakeLists.txt19
-rw-r--r--src/coreclr/src/dlls/mscoree/coreclr/CMakeLists.txt19
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)