BLOG / Webassembly (cs) / Úvod / Nastavení CLion pro WASM

Nastavení CLion a CMake pro WebAssembly

Intro

Skusím Vám nyní posat postup při rozchození webassembly projektu v CLion. Co víc, chtěl bych, aby měl 3 konfigurace, debug, debug-wasm a release-wasm, přepínal mezi nimi selectboxem v panelu nástrojů CLion.

Prerekvizity

  • CLIon získáte zde.
  • CMAKE získáte zde.
  • EMSDK (emsripten).

Nastavení Toolchainu

  1. Jděte na File > Settings > Toolchains. Uvidíe asi něco takového:

    Já mám jako defaultní C++ nastaven clang, protože CLang interně používá emscripten. Vyhnu se tak problémům s kompatibilitou jazyka. Nainstaluji ho jednoduše:

    sudo apt-get update
    sudo apt-get install clang

    Pak ho ještě musím aktivovat

    sudo update-alternatives --config c++

    A vyberu...


  2. Klikněte na "+" a vytvořte toolchain "Emscripten".

  3. Nyní je třeba vědět, kam jste nainstalovali emscripten z prerekvizit. Já třeba do <emsdk> = ˜/dev/emsdk. Cestu zvolte absolutně. Nastavíte cc na <emsdk>/upstream/emscripten/emcc a c++ na <emsdk>/upstream/emscripten/em++. Asi takto:

Nastavení CMake

  1. Jděte na File > Settings > CMake. Uvidíe asi něco takového:

  2. Vytvoříme nastavení pro překlad jako samostatný projekt. Všiměte si, že defaultní nastavení toolchainu jsme nepřemazali, ale vytvořili nové pro WebAssembly. Zvolíme tedy Toolchain Default, nějaké inteligentní jméno a Build Type na Debug. Ostatní řádky nemusíme plnit, až na jeden. V nastavení se inspirujte obrázkem výše. Co je ale důležité, je nastavení řádku CMake options. Vložíme tam konfiguraci, tím od sebe později různé konfigurace rozlišíme. Začnu s -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON, což nám usnadní ladění skriptů pro překlad projketu. není to povinné a klidně to po rozchození projektu můžete umazat... nebo to tam nedávat vůbec. Další větu co tam určitě musíte dát pro všechny debug konfigurace je -DDEBUG=yes. Překladač Vám totiž jinak makro DEBUG nenadefinuje a bude překládat release zdrojové kódy s nastavením překladače na debug. Nyní se dostávám na gró kofigurace ‐ její rozlišení jménem, pření zápisem -DTARGET_BUILD_VARIANT=debug_stand, kde debug_stand je jméno, které později využijeme.

    -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DDEBUG=yes
    -DTARGET_BUILD_VARIANT=debug_stand
  3. Release je jednodušší, nedáme tam -DDEBUG=yes.

    -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DTARGET_BUILD_VARIANT=release_stand
  4. Nyní vytvoříme kofiguraci pro debug-wasm. Tlačítkem "+" Vytvoříte novou konfiguraci, pojmenujete ji a zvolíte nový Toolchain Emscripten. Řádeku CMake options musíme je třeba přidat konfiguraci EMSDK: -DCMAKE_TOOLCHAIN_FILE=<emsdk>/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake.

    -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DDEBUG=yes -DTARGET_BUILD_VARIANT=debug_wasm -DCMAKE_TOOLCHAIN_FILE=
    /home/zdenek/dev/emsdk/
    upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake

    Nakonec nastavíte Environment na EMSCRIPTEN_ROOT=<emsdk>/upstream/emscripten.

    EMSCRIPTEN_ROOT=/home/zdenek/emsdk/upstream/emscripten
  5. Obdobně vytvoříme kofiguraci pro release-wasm. Tlačítkem "+" Vytvoříte novou konfiguraci, pojmenujete ji a vlastně jediné, čím se bude lišit od předchozí je Build Type nasteveno na Release. v řádku CMake options nezapomňte upravit jméno konfugurace na release-wasm.

Hlavní CMakeLists.txt

Před dalším krokem předpokládejme, že máme pro každý targer různou konfiguraci (cmake soubor). Jednoduše ji načtu podle jména uvedeného výše. if (TARGET_BUILD_VARIANT MATCHES debug_wasm)
 include(CMakeWasm.cmake)
elseif(TARGET_BUILD_VARIANT MATCHES release_wasm)
 include(CMakeWasm.cmake)
elseif(TARGET_BUILD_VARIANT MATCHES debug_stand)
 include(CMakeStand.cmake)
elseif(TARGET_BUILD_VARIANT MATCHES release_stand)
 include(CMakeStand.cmake)
endif()

Výsledek

Tools > Cmake > Refresh překompilujete skripty. To už by mělo k výsledku stačit.

Realizuji Vaše sny

Zdeněk Skulínek