首页 > 其他分享 >emscripten cmake 简单尝试

emscripten cmake 简单尝试

时间:2023-11-25 20:56:58浏览次数:32  
标签:尝试 src emscripten int add wasm cmake

emscripten 提供了比较完整的工具链,包含了对于make 以及cmake 等工具的支持,以下是一个简单的c 代码转换为 wasm的demo
同时基于cmake 进行项目管理

参考项目

  • 项目结构
├── CMakeLists.txt
├── README.md
├── app.js
└── src
    ├── add.c
    ├── add.h
    └── app.c
  • 代码简单说明
    CMakeLists.txt cmake 定义
 
cmake_minimum_required(VERSION 3.20.0)
 
project(emccdemo)
 
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_EXECUTABLE_SUFFIX .js)
 
set(TD_LINKER_FLAGS "-Wl,--gc-sections -Wl,--exclude-libs,ALL") 
# 编译为可执行任务
add_executable(myadd src/add.c)
# 构建参数相关的,方便构建模块
target_link_libraries(myadd "-s MODULARIZE=1 -s EXPORTED_RUNTIME_METHODS=ccall")

src/add.h src/add.c 主要是一个标准的c 代码,同时集成了emscripten 方便暴露c 方法为wasm 方法

src/add.h 
#ifndef ADD_H
 
#define ADD_H
 
int add(int a, int b);
 
int dalongdemoadd(int a, int b);
 
#endif
 
src/add.c
#include <emscripten.h>
#include "add.h"
// 属性,确保编译的时候可以暴露为wasm 方法
EMSCRIPTEN_KEEPALIVE
int add(int a,int b) {
    return a+b;
}
// 属性,确保编译的时候可以暴露为wasm 方法
EMSCRIPTEN_KEEPALIVE
int dalongdemoadd(int a, int b) {
    return a+b;
}

构建

为了方便构建使用了docker

  • 启动docker
docker run -it -v $PWD:/src  emscripten/emsdk:3.1.47 sh
  • 构建
mkdir build
cd build emcmake cmake ..
make
  • 效果

nodejs 代码访问wasm 模块

  • app.js

基于以上的配置参数以及构建myadd 会是一个标准的node commonjs 模块,可以nodejs 使用
如下


代码

 
const app = require("./build/myadd")
app().then((instance) => {
  console.log(instance._dalongdemoadd(1,3)); // direct calling works
})
  • 效果

说明

以上是一个简单的试用,实际上emscripten 提供了不少强大的功能,对于c/c++ 周边的应用到wasm 是一个首选方案,社区已经有不少项目就是基于
emscripten 编译为wasm(opencv,fffmpeg。。。)

参考资料

https://emscripten.org/
https://github.com/rongfengliang/emscripten_basic_learning
https://emscripten.org/docs/porting/connecting_cpp_and_javascript/Interacting-with-code.html

标签:尝试,src,emscripten,int,add,wasm,cmake
From: https://www.cnblogs.com/rongfengliang/p/17856067.html

相关文章

  • 快速入门CMake
    一、CMake简介​ 使用简单方便,可以跨平台,构建项目编译环境。尤其比直接写Makefile简单(在构建大型工程编译时,需要写大量的文件依赖关系),可以通过简单的CMake生成负责的Makefile文件。二、CMake安装​ ubuntu上直接执行sudoaptinstallcmake安装完成,可以通过cmake-version查......
  • 您可以尝试添加 --skip-broken 选项来解决该问题 ** 发现 2 个已存在的 RPM 数据库问
    ##提示如下**Found2pre-existingrpmdbproblem(s),‘yumcheck’outputfollows:2:postfix-2.10.1-7.el7.x86_64hasmissingrequiresoflibmysqlclient.so.18()(64bit)2:postfix-2.10.1-7.el7.x86_64hasmissingrequiresoflibmysqlclient.so.18(libmysqlclient_18)......
  • nanomq clion 远程debug尝试
    很简单因为nanomq是基于cmake开发的对于clion来说基于debug就比较方便了,同时因为nanomq相关依赖都是通过模块的,还是比较方便的,以下是一个简单的debug测试环境准备基于clion的remotesshclone代码 gitclonehttps://github.com/emqx/nanomq.gitcdna......
  • FTP客户端提示「响应: 530 Valid hostname is expected.」可尝试的解决方案
    响应:  530Validhostnameisexpected.该响应的意思是“需要有效的主机名”,通常在FTP登录时出现。这个响应表示FTP服务器要求客户端提供一个有效的主机名,以便服务器能够识别它。如果出现该响应,可能是因为输入的主机名错误或服务器无法识别它。解决方案用户名前加「......
  • 【尝试逆向】零基础尝试寻找某个C++游戏的文件读取方法
    前言本游戏在国内知名度非常一般,而且在游戏领域也算是非常少见的厂商完全不考虑国际化的游戏系列,距今已有近30年的历史。这次为了尝试对此游戏的贴图进行提取,我尝试下载了本游戏系列的大概所有版本,并尝试通过脱壳等手段找到贴图的提取函数,并想办法写出来提取用的脚本。不过目前......
  • 使用cmake-js 构建node addon
    cmake-js是nodejs包装的cmake,可以用来方便的进行nodejsnative项目的构建,以下是一个试用简单项目项目结构├──CMakeLists.txt├──hello_world.cc├──index.d.ts├──lib│├──binding.d.ts│└──binding.js├──pack......
  • linux中cmake的用法
    cmake的基本用法一、message()函数message:为用户显示一条消息message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR]"messagetodisplay"...)#(无)=重要消息;#STATUS=非重要消息;#WARNING=CMake警告,会继续执行;#AUTHOR_WARNING=CMake警......
  • Qt项目中CMakeLists.txt文件
    cmake_minimum_required(VERSION3.5)project(testNameLANGUAGESCXX)set(CMAKE_AUTOUICON)set(CMAKE_AUTOMOCON)set(CMAKE_AUTORCCON)set(CMAKE_CXX_STANDARD17)set(CMAKE_CXX_STANDARD_REQUIREDON)find_package(Qt5COMPONENTSREQUIREDWidgetsSqlCharts......
  • Qt 基本CMakeLists.txt 文件
    cmake_minimum_required(VERSION3.5)project(untitledVERSION0.1LANGUAGESCXX)set(CMAKE_AUTOUICON)set(CMAKE_AUTOMOCON)set(CMAKE_AUTORCCON)set(CMAKE_CXX_STANDARD17)set(CMAKE_CXX_STANDARD_REQUIREDON)find_package(QTNAMESQt6Qt5REQUIREDCOM......
  • Windows10+VisualStudio2022+CMake+Qt开发环境搭建
    一、概述之前一直使用QtCreator当做QT的开发工具,也没觉得有啥问题。最近使用了VisualStudio+Cmake写了一些SDL2和FFmpeg的东西感觉这个VisualStudio这个工具挺好用的。就萌生了要使用VisualStudio开发Qt的想法。有了这个想法之后就想着需要搭建一个开发环境。百度搜索了......