Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

Simc WebAssembly

未关闭
#4,341 15 条评论 2 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
5/5
预计耗时
一周以上
新手友好度
15/100
Issue 类型
功能
描述清晰度
需要澄清
活跃度
停滞
技术栈
cmake, cpp, wasm
领域
build-system

调研方向

Start by reading the CMake scripts and the discussion about which branch to target; the issue proposes broad build-system changes rather than a defined task. It mentions concurrency.hpp, sc_profileset.cpp, and a proposed mock_concurrency.cpp as examples to investigate. Done would require agreeing on scope and branch, then delivering a working WebAssembly build, but the issue does not define acceptance criteria.

由索引模型根据 Issue 内容生成。

描述

enhancement

I am currently experimenting with creating a web assembly module from the simulationcraft codebase by compiling it with emscripten. In the long run I want something that can be used to start a side like raidbots.com but without the need to have some costly server to run the simulations on. I also do not want the users to have some client to install and connect it to a side. Running simulationcraft as part of the side is the best of both worlds. What I basically want to create is an easy way to compile simulationcraft to an wasm file that can be included into a website and called into from javascript like this:

var simc = Simc()
simc.simulate("profile")

I managed to come up with some proof of concept where I have a simc running inside the browser and doing successful simulations. There is still a lot of work to do. I am interested in mainstreaming it.

Would that be something you are interested in merging even though that would mean to merge some larger patches that touch multiple and restructure the build system?

The largest part that need to change the build system that needs to be more flexible and needs to allow for enabling and disabling features. This is necessary because not all parts of simc are useful for the wasm target and we need a way to easily switch them on and off. Right now I removed all dependencies on phtreads because the threading support in the browser is highly unstable and only possible with Firefox Nightly.

I think the easiest thing would be to apply the needed changes only to the cmake system and make it to a first class citizen.
Therefore I would start with merging some patches where I add some missing functionality to the cmake scripts and and add some more #defines that are switchable through cmake options. For example:

  • SC_MULTITHREADING: Threading support is not mature in browsers. Should be disabled for the wasm target until browsers get better.

Other things can be removed too for wasm because we need fewer things and want to shrink the size of the binary since it must be transferred via network on page load.

I also would also remove the file globbing from the cmake script and replace it with explicitly defined *.cpp files to compile. In the process I might change the directory structure a bit. The reason is that I need to select different files based on selected options and wether I compile for wasm or for your computer. For example I implemented a mock_concurrency.cpp that does basically nothing and removed the sc_profileset.cpp files from the build since they use std::thread directly without the wrapper from concurrency.hpp.

There are some other issues that make this hard. For example I am not sure from which branch I should start my wasm branch. There is the default legion-dev branch and the bfa-dev feature branch. Problem is that non-bfa code changes (like improvements to cmake scripts) are merged to the feature branch instead of to the main branch.

Will bfa-devand legion-dev be merged into a new master on bfa release and should I wait for that before I start a pull request? And for right now should I branch off bfa-dev to have fewer merge conflicts later on?

主要语言
C++
星标
1.6k
派生
789
平均合并
8 小时 18 分钟
30 天内合并 PR
63

环境准备

  • 提供 Dockerfile 或 Docker Compose 文件
  • 没有 Pull Request 模板
  • 阅读贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

simulationcraft/simc 的其他 Issue

查看 simulationcraft/simc 的全部 Issue

相似的 Issue

更多 C++ Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。