Mono工具之genmdesc
genmdesc
Mono下的工具,根据该工具生成对应cpu架构的指令,在前面 Mono学习路线 ,说过mono支持多种cpu架构,具体可以去看,我在这两种架构cpu上编译过mono,一是我们常用pc(x86)和树莓派3(arm64).在最初编译mono失败时,遇到过就是无法找到对应的cpu指令的源文件.由于是好早之前的,当时没有截图保存.
但在vs的解决方案中,没有找到在哪里调用genmdesc,生成对应cpu指令的源文件.暂时不确定在编译mono是否还需要依赖genmdesc.
先说genmdesc,只依赖一个库,那就是eglib.可以看下图,了解genmdesc项目的整体结构.

使用genmdesc如何对应cpu指令源文件呢?
在mono根目录下,打开msvc目录.找到runmdesc.bat
@echo off
rem This runs genmdesc on the x86 files when called on Visual Studio
echo Running genmdesc
cd ..\mono\mini
set PATH=%PATH%;%MONO_DEPENDENCIES_PREFIX%\bin
if "%2" == "Win32" goto x86
if "%2" == "x64" goto x64
goto error
:x86
echo Platform detected is x86...
%1 cpu-x86.h x86_desc cpu-x86.md
goto end
:x64
echo Platform detected is x64...
%1 cpu-amd64.h amd64_desc cpu-amd64.md
goto end
:error
echo Error: unsupported platform
exit /b 100
:end
echo done
在bat批处理文件中.echo只是用来显示输出,分别可以在:x86和:x64标签下,找到%1 所在行.
%1 这里指的就是genmdesc程序. 后面就是该程序所需要的参数.
以x86为例: cpu-x86.h 指定要生成的文件名. x86-desc 对应cpu架构 cpu-x86.md 输入文件,加载该文件,按每行读取,添加到哈希表.最终生成对应cpu头文件.
在mono/mini目录中,可以根据CPU架构找到cpu-*.md .
秋风
2018-05-27