0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Windows11 の VSCode+Emscripten で wasm によるハローワールド (12)

Last updated at Posted at 2025-10-11

すべての記事

Ninja Multi-Config の利用

これまでは -gsourc-map など、主にデバッグ向けのビルド・オプションを行ってきた。
ここでは、ジェネレータを Ninja から Ninja Multi-Config に変更しデバッグとリリースで異なるオプションによるビルドができるようにしてみる。

以下は 前回 の記事で使用した CMakePresets.json CMakeLists.txt を Ninja Multi-Config 向けに変更したファイルと、その変更点。

CMakePresets.json

  • 構成オプションが inherits により親(wasm-config) と子(wasm-config-debug, wasm-config-release) に分割された
  • 親は hidden:true として画面上は非表示にする
  • CMAKE_BUILD_TYPE:Debug が CMAKE_CONFIGURATION_TYPES となり、選択肢のリストになった
  • 上記の代わりにビルド・オプションの configurationDebugRelease を指定する
{
  "version": 5,
  "cmakeMinimumRequired": {
    "major": 3,
    "minor": 20,
    "patch": 0
  },
  "configurePresets": [
    {
      "name": "wasm-config",
      "hidden": true,
      "generator": "Ninja Multi-Config",
      "binaryDir": "${sourceDir}/build",
      "cacheVariables": {
        "CMAKE_CXX_STANDARD": "17",
        "CMAKE_CXX_STANDARD_REQUIRED": "ON",
        "CMAKE_CXX_EXTENSIONS": "OFF",
        "CMAKE_TOOLCHAIN_FILE": "$env{EMSDK}/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake",
        "CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
        "CMAKE_CONFIGURATION_TYPES": "Debug;Release"
      }
    },
    {
      "name": "wasm-config-debug",
      "inherits": "wasm-config",
      "cacheVariables": {
      }
    },
    {
      "name": "wasm-config-release",
      "inherits": "wasm-config",
      "cacheVariables": {
      }
    }
  ],
  "buildPresets": [
    {
      "name": "wasm-build-debug",
      "configurePreset": "wasm-config-debug",
      "verbose": true,
      "configuration": "Debug"
    },
    {
      "name": "wasm-build-release",
      "configurePreset": "wasm-config-release",
      "verbose": true,
      "configuration": "Release"
    }
  ]
}

CMakeLists.txt

  • デバッグ時にのみ有効となるオプションは、ジェネレータ式(CONFIG:Debug) により指定している
  • EXPORT_NAME が不要となるため、どちらも同じオプションになっている
cmake_minimum_required(VERSION 3.20)
project(09_modularize_es6 LANGUAGES CXX)

add_executable(09_modularize_es6 main.cpp)
target_link_options(09_modularize_es6 PRIVATE
    $<$<CONFIG:Debug>:-gsource-map -sASSERTIONS=1 -sSAFE_HEAP=1>
    "-sEXPORT_ES6=1"
)

add_executable(09_modularize_es6_alias main.cpp)
target_link_options(09_modularize_es6_alias PRIVATE
    $<$<CONFIG:Debug>:-gsource-map -sASSERTIONS=1 -sSAFE_HEAP=1>
    "-sEXPORT_ES6=1"
)

新しい構成によりリビルド

ファイルへの変更を反映すると構成オプションの選択肢が増えていることが確認できる。

image.png

再構成してリビルドする。

image.png

この変更を行うとグルーコードなどが生成されるディレクトリが変更となる。
以前は build に作成されていたものが、build\Debugbuild\Release になるので、index.html も変更が必要。

index.html
import from のパスを build/ から build/Debug/ に変更

<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8"/>
        <script type="module">
            import DefaultModule from './build/Debug/09_modularize_es6.js';
            import AliasModule from './build/Debug/09_modularize_es6_alias.js';

            document.addEventListener('DOMContentLoaded', function()
            {
                let v = 0;

                DefaultModule({arguments: ['Default']}).then(mod =>
                {
                    v = mod._increment(v);
                    console.log(`return=${v}`);
                });

                AliasModule({arguments: ['Alias']}).then(mod =>
                {
                    v = mod._increment(v);
                    console.log(`return=${v}`);
                });
            });
        </script>
    </head>
    <body>
    </body>
</html>

構成をリリース(wasm-config-release) に変更しビルドすると、build\Release には *.wasm.map が 出力されないことで、ジェネレータ式が有効に作用していることが確認できる。

build\Debug

C:\wasm\project\09-modularize-es6>dir build\Debug\
 ドライブ C のボリューム ラベルは OS です
 ボリューム シリアル番号は E886-5372 です

 C:\wasm\project\09-modularize-es6\build\Debug のディレクトリ

2025/10/11  11:13    <DIR>          .
2025/10/11  11:15    <DIR>          ..
2025/10/11  11:13            58,523 09_modularize_es6.js
2025/10/11  11:13           116,238 09_modularize_es6.wasm
2025/10/11  11:13            13,323 09_modularize_es6.wasm.map
2025/10/11  11:13            58,535 09_modularize_es6_alias.js
2025/10/11  11:13           116,250 09_modularize_es6_alias.wasm
2025/10/11  11:13            13,323 09_modularize_es6_alias.wasm.map
               6 個のファイル             376,192 バイト
               2 個のディレクトリ  624,805,769,216 バイトの空き領域

build\Release

C:\wasm\project\09-modularize-es6>dir build\Release\
 ドライブ C のボリューム ラベルは OS です
 ボリューム シリアル番号は E886-5372 です

 C:\wasm\project\09-modularize-es6\build\Release のディレクトリ

2025/10/11  11:15    <DIR>          .
2025/10/11  11:15    <DIR>          ..
2025/10/11  11:15            10,437 09_modularize_es6.js
2025/10/11  11:15             6,812 09_modularize_es6.wasm
2025/10/11  11:15            10,449 09_modularize_es6_alias.js
2025/10/11  11:15             6,812 09_modularize_es6_alias.wasm
               4 個のファイル              34,510 バイト
               2 個のディレクトリ  624,803,889,152 バイトの空き領域

次回 はグルーコードの内部で行われているコンパイルとインスタンス化を分離して考えてみる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?