首页 > 其他分享 >emscripten基于llvm的webassembly 编译器

emscripten基于llvm的webassembly 编译器

时间:2023-10-30 14:44:06浏览次数:48  
标签:webassembly llvm emscripten js opencv 编译器 wasm build &&

emscripten是一个基于llvm的webassembly 编译器

包含的特性

  • 可移植
    支持编译现有的c,c++ 以及其他语言项目,使用lvvm 编译为支持nodejs,浏览器,以及wasm运行时运行的服务
  • 提供apis
    支持将openGL 转换为WebGL,pthreads 转换为web api。。。
  • 快速
    集成了不少工具(llvm,emscripten,binaryen),运行速度接近原生

说明

opencv-wasm 就基于了此工具进行opencv 编译为webassembly
参考构建命令

 
git clone --branch 4.3.0 --depth 1 https://github.com/opencv/opencv.git
 
# Build
(
    cd opencv &&
    git checkout 4.3.0 &&
 
    # Add non async flag before compiling in the python build_js.py script
    docker run --rm --workdir /code -v "$PWD":/code "trzeci/emscripten:sdk-tag-1.39.4-64bit" python ./platforms/js/build_js.py build_wasm --build_wasm --build_test --build_flags "-s WASM=1 -s WASM_ASYNC_COMPILATION=0 -s SINGLE_FILE=0 "
)
 
# Copy compilation result
cp -a ./opencv/build_wasm/ ./build_wasm
 
# Transpile opencv.js files
node opencvJsMod.js
 
# Beautify JS
(
    cd ./build_wasm/bin &&
    npx js-beautify opencv.js -r &&
    npx js-beautify opencv-deno.js -r
)
 
# Copy bins to root
(
    cp ./build_wasm/bin/opencv.wasm ../opencv.wasm &&
    cp ./build_wasm/bin/opencv-bin.js ../opencv-bin.js &&
    cp ./build_wasm/bin/opencv.js ../opencv.js &&
    cp ./build_wasm/bin/opencv-deno.js ../opencv-deno.js &&
    cp -r ./build_wasm/ ../build_wasm_test
)

同时目前官方也提供了支持基于docker 构建的镜像,可以方便wasm 的生成

参考资料

https://github.com/emscripten-core/emscripten
https://github.com/emscripten-core/emsdk
https://emscripten.org/
https://github.com/echamudi/opencv-wasm
https://github.com/WebAssembly/binaryen

标签:webassembly,llvm,emscripten,js,opencv,编译器,wasm,build,&&
From: https://www.cnblogs.com/rongfengliang/p/17797819.html

相关文章

  • makefile学习之编译器报错问题
    1、当使用makefile自动推导的功能时编译器报错ccJS7JEh.s:Assemblermessages:ccJS7JEh.s:5:Error:invalidinstructionsuffixfor`push'ccJS7JEh.s:7:Error:invalidinstructionsuffixfor`push'\ccJS7JEh.s:14:Error:operandtypemismatchfor`call'ccJ......
  • 常见编译优化及LLVM Pass源码分析(填坑ing)
    一、常量传播二、常量折叠三、复写传播四、公共子表达式消除五、死代码消除(ADCE,Aggressivedeadcodeelimination)llvm/lib/Transforms/Scalar/ADCE.cpp六、函数内联......
  • Keil5编译器报错:ARMLMD_LICENSE_FILE unset~解决
    keilMDK版本更新到最新版本是V5.38。由于V5.38不支持编译器5,并且将默认编译器设置为编译器6,所以我安装了编译器5(Arm编译器版本5,V5.06更新7),带有独立补丁。然后将编译器5添加到keil,设置编译器5为默认编译器,但是keil无法构建项目,构建输出部分打印如下,:ARMLMD_LICENSE_FILE:unset......
  • nginx unit WebAssembly 试用
    nginxunit已经支持WebAssembly,刚好体验下环境准备基于docker运行unit,对于wasm的开发基于rust,实际上测试直接试用了官方的示例代码docker-composeversion:"3"services:app:image:unit:1.31.1-wasmports:-8080:8080......
  • wasm-pack 基于rust 的 WebAssembly 开发工具
    目前基于WebAssembly的应用是越来越多了,同时周边工具以及生成也越来越强大了,wasm-pack是rust周边一个很强大的工具,以下是一个简单的试用参考使用安装 curlhttps://rustwasm.github.io/wasm-pack/installer/init.sh-sSf|sh创建简单项目......
  • Windows下VC++编译器32位memcpy、memmove函数汇编代码详解
    整理者:赤勇玄心行天道QQ号:280604597微信号:qq280604597QQ群:511046632博客:www.cnblogs.com/gaoyaguo  blog.csdn.net/cyz7758520?type=blog大家有什么不明白的地方,或者想要详细了解的地方可以联系我,我会认真回复的!你可以随意转载,无需注明出处!写文档实属不易,我希望大家能支......
  • LLVM IR代码生成codegen分析
    LLVMIR代码生成codegen分析常用指令1.从源码生成.llclangmain.c-emit-llvm-S-c-omain.ll2.运行.llllimain.ll3.编译汇编llcmain.ll4.生成dot,得到可视化的DAGllc-view-dag-combine1-dagsmain.ll5.将源文件分别编译为LLVM二进制代码clang-emit-llvm-cmai......
  • X64编译器
     NASM编译器下载(windows版本):链接:https://pan.baidu.com/s/1jJfylB3-PVLh6DqDf3HJzA提取码:6666  也可从下面地址下载所有平台上的NASM版本:https://www.nasm.us/pub/nasm/releasebuilds/2.07/win32/ 安装:双击安装即可             ......
  • vc---cl编译器的选项
    VC(VisualC++)编译器是MicrosoftVisualStudio集成开发环境中的C++编译器,用于编译和构建C++应用程序。VC编译器有许多编译选项,用于控制编译过程和生成的可执行文件。以下是一些常见的VC编译器选项:编译选项:/c:只进行编译,不进行链接。/O1,/O2,/Ox:启用不同级别的优化。/Gm:生成函......
  • Anaconda虚拟环境配置Python库与Spyder编译器
      本文介绍在Anaconda中,为Python的虚拟环境安装第三方库与Spyder等配套软件的方法。  在文章创建Anaconda虚拟Python环境的方法中,我们介绍了在Anaconda环境下,创建、使用与删除Python虚拟环境的方法;而创建虚拟环境后,就需要在对应的环境内配置各类库与软件,本文就对这些操作加以......