首页 > 编程知识 正文

emcc段,华为把emcc优化ufs

时间:2023-05-05 21:20:49 阅读:143127 作者:3594

加密兼容性前端(emcc )位于翻译:云荒杯倾

本文是Emscripten-WebAssembly专栏系列的文章之一,更多文章请参见专栏。

也可以去作者的博客读文章。

欢迎加入Wasm和emscripten技术交流组。 群聊号码: 939206522。

emcc是用于从命令行调用Emscripten的编译器,实际上是标准编译器gcc或clang的替换。

语法emcc [ options ]文件.该输入文件可以是clang可以编译的C/C语言,也可以是二进制格式的llvm bitcode或人类可读格式的llvm assembly文件。

参数中的大多数clang或gcc选项都起作用。 例如,以下内容:

#显示信息emcc --help#显示编译器版本信息emcc --version如果要查看当前Emscripten中clang版本支持的所有选项的列表,可以直接使用命令。

clang --help

emcc已更改或新的emcc选项包括:

首先是一些编译优化标志。 它们是-O0,-O1,-O2,-Os,-Oz,-O3。

-O0 :

不进行编译优化(这是默认设置)。 axdxh包含许多断言,因此在刚开始移植项目时,它得到了推荐。

-O1 :

简单地优化。 在想要在缩短编译时间的同时进行编译优化时推荐。 毕竟编译比-O2级优化快得多。 优化asm.js和llvm中的-O1,对其进行重新定位,删除运行时断言和c异常捕获,并使-s ALIASING_FUNCTION_POINTERS=1。

C要重用异常捕获,请设置:-s DISABLE_EXCEPTION_CATCHING=0。 -O2 :

与-O1类似,但增加了JavaScript级别优化和一些llvm -O3优化项。 如果axdxh想发布项目,建议优化此级别。

-O3 :

与-O2类似,但JavaScript优化比-O2多,编译时间明显长于-O2。 发布版本时,也建议使用此选项。

-Os:

与-O3类似,但性能稍低于-O3,但添加了优化以减小生成的代码的大小。 -操作系统优化会影响llvm bitcode和JavaScript文件的生成。

-Oz:

与-Os类似,但进一步减小了代码大小。

-s OPTION=VALUE

传递给编译器的JavaScript代码生成中涉及的所有选项。 有关选项的列表,请参见settings.js。

除了可以直接在emcc命令行上设置选项值外,还可以将选项值写入json文件中。 例如,将DEAD_FUNCTIONS选项的值放入path/to/file文件中,然后在emcc中传递此文件的路径。

- sdead _ functions=@/path/to/file note :1,文件内容为['_func1',' _func2']; 2、文件路径必须是绝对的,不能相对。 -g :

这是保存调试信息的标志。

如果只是编译成bitcode,就和clang和gcc的-g一样。 如果要编译成JavaScript,-g与-g3相同。 -glevel

控制打印的调试信息的数量。 每个level都是根据上一个level编译的。

-g0:不保留调试信息。 -g1:保留空间,不压缩。 -g2:保留函数名称。 -g3:保存变量名称,与-g相同。 变量名一般不是必须编译并保存的,但如果保存的话,就可以推测变量的目的了吧。 -g4:保存llvm调试信息。 这是可以调试的最高级别。 note :优化级别越高,编译时间越长--profiling:

- -性能分析- funcs :

-卡车:

启用Emscripten的跟踪应用程序。

--emit-symbol-map :

--js-optslevel:

有以下两个值可以启用JavaScript优化:

JavaScript优化程序不允许;

使用JavaScript优化程序。

通常我们不能设定这个项目。 因为在设置-O后面的level时,这个项目可以顺便取合适的值。

note:emterpretify、DEAD_FUNCTIONS、OUTLINING_LIMIT、SAFE_HEAP、SPLIT_MEMORY为js-opts=1,因此写入此标志的值

启用llvm优化。 的值如下

不使用llvm优化1:llvm -O1优化2:llvm -O2优化3:llvm -O3优化- -与--js-optslevel类似,通常无法设置此选项。 因为要设定-O之后的等级

时候,这个项就能顺便取到一个合适的值。

--llvm-lto<level>:
启用llvm 连接时 优化。可以取值0,1,2,3。

--closure <on>:
运行压缩编译器(Closure Compiler),可能的取值有,0,1,2:

0:是不启用压缩编译器。1:启用。2:启用。

--pre-js <file>
生成代码前,指定一个要把内容添加进来的文件。

--post-js <file>
生成代码后,指定一个要把内容添加进来的文件。

--embed-file <file>
指定一个带路径的文件嵌入到编译生成的js代码里。路径是相对于编译时的当前路径。如果传的是一个目录,则目录下所有文件的内容都会被嵌入到将来生成的js代码中。

--preload-file <name>
异步运行编译代码前,指定一个预加载的文件。路径是相对于编译时的当前路径。如果传的是一个目录,则目录下所有文件的内容都会被预加载到一个.data文件中。

--exclude-file <name>
从 –embed-file and –preload-file后面的目录中排除一些文件,支持使用通配符*。

--use-preload-plugins
告诉文件打包器当文件加载时,运行预加载插件。它用来执行诸如使用浏览器解码器解码图片和音频等。

--shell-file <path>
指定要生成HTML的模板文件。

--source-map-base <base-url>

--minify 0
等于-g1。

--js-transform <cmd>
优化之前,生成代码之后,设定这一条命令。这条命令可以让你修改JavaScript代码。之后,编译器会将修改的和未修改的一起进行编译优化。

--bind
启用bingdings编译源代码。bingings是Emscripten中连接C++和JavaScript代码的一类API。

--ignore-dynamic-linking
告诉编译器忽视动态链接,之后用户就得手动链接到共享库。

--js-library <lib>
定义除了核心库(src/library_*)以外的js库。

-v
打开详细输出。
这个设置为把-v传给clang,并且启用EMCC_DEBUG生成编译阶段的中间文件。它也会运行Emscripten关于工具链的内部的完整性检查。

tip:emcc -v是诊断错误的有用工具,不管你是否附加其他参数。

--cache

--clear-cache

--clear-ports

--show-ports

--save-bc PATH

--memory-init-file <on>
规定是否单独生成一个内存初始化文件。取值包括0和1.

0:不单独生成.mem文件。1:单独生成.mem文件。

-Wwarn-absolute-paths
启用在-I和-L命令行指令中使用绝对路径的警告。这是用来警告无意中使用了绝对路径的。在引用非可移植的本地系统头文件时,使用绝对路径有时是很危险的。

--proxy-to-worker

--emrun
使生成的代码能够感知emrun命令行工具。当运行emran生成的应用程序时,这样设置就允许stdout、stderr和exit(returncode)被捕获。

--cpuprofiler
在生成的页面上嵌入一个简单的CPU分析器。使用这个来执行粗略的交互式性能分析。

--memoryprofiler
在生成的页面上嵌入内存分配跟踪器,使用它来分析应用程序Emscripten堆的使用情况。

--threadprofiler
在生成的页面上嵌入一个线程活动分析器。当进行多线程编译时,使用它来分析多线程应用程序。
--em-config

--default-obj-ext .ext

--valid-abspath path
设置一个绝对路径的白名单,以防止关于绝对路径的警告。

-o <target>
编译输出的文件格式。target可以取值为:

name.js:JavaScript文件;name.html:HTML+js文件。把js单独生成是为了减小页面加载时间。name.bc:llvm bitcode。这是默认值。name.o:和上面一样。 note:如果你用了--memory-init-file,则还会从js文件中再单独分出一部分代码为.mem文件。

-c
生成llvm bitcode代码,而不是JavaScript。

--separate-asm
把asm.js文件单独生成到一个文件中。这样可以减少启动时的内存加载。

--output_eol windows|linux
规定生成的文本文件的行尾,如果是–output_eol windows,就是windows rn行尾,如果是–output_eol linux,则生成Linux行尾的文本文件。

--cflags

环境变量

emcc会受到几个环境变量的影响,如下:

EMMAKEN_JUST_CONFIGUREEMMAKEN_JUST_CONFIGURE_RECURSEEMCONFIGURE_JSEMCONFIGURE_CCEMMAKEN_CXXEMMAKEN_COMPILEREMMAKEN_CFLAGSEMCC_DEBUG

这几个里面比较有意思的是EMCC_DEBUG。比如,如果你在编译之前设置set EMCC_DEBUG=1,那么编译的时候会把编译过程的调试信息和编译各个阶段的中间文件输出到一个临时目录,这算是给开发者提供一些编译期间的帮助或者说调试信息吧。

Emscripten主题系列文章是emscripten中文站点的一部分内容。
第一个主题介绍代码可移植性与限制
第二个主题介绍Emscripten的运行时环境
第三个主题第一篇文章介绍连接C++和JavaScript
第三个主题第二篇文章介绍embind
第四个主题介绍文件和文件系统
第六个主题介绍Emscripten如何调试代码

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。