-
Notifications
You must be signed in to change notification settings - Fork 3.4k
Description
On Windows
Description
Version of emscripten/emsdk:
Output of emcc -v
emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 4.0.15 (09f52557f0d48b65b8c724853ed8f4e8bf80e669)
clang version 22.0.0git (https:/github.com/llvm/llvm-project 3388d40684742e950b3c5d1d2dafe5a40695cfc1)
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: C:\Users\user\emsdk\upstream\bin
Failing command line in full:
cmake --build .\out -v
and emmake cmake --build .\out -v
produce the same results
Output
Change Dir: 'D:/emscriptenDebug/out'
Run Build Command(s): C:/Users/user/AppData/Local/Microsoft/WinGet/Links/ninja.exe -v
[1/4] C:\WINDOWS\system32\cmd.exe /C ""C:/Users/user/emsdk/upstream/emscripten/emscan-deps" -format=p1689 -- C:\Users\user\emsdk\upstream\emscripten\em++.bat -std=gnu++23 -x c++ D:/emscriptenDebug/demoApp.cpp -c -o CMakeFiles\demoApp.dir\demoApp.cpp.o -MT CMakeFiles\demoApp.dir\demoApp.cpp.o.ddi -MD -MF CMakeFiles\demoApp.dir\demoApp.cpp.o.ddi.d > CMakeFiles\demoApp.dir\demoApp.cpp.o.ddi.tmp && "C:/Program Files/CMake/bin/cmake.exe" -E rename CMakeFiles\demoApp.dir\demoApp.cpp.o.ddi.tmp CMakeFiles\demoApp.dir\demoApp.cpp.o.ddi"
[2/4] "C:\Program Files\CMake\bin\cmake.exe" -E cmake_ninja_dyndep --tdi=CMakeFiles\demoApp.dir\CXXDependInfo.json --lang=CXX --modmapfmt=clang --dd=CMakeFiles/demoApp.dir/CXX.dd @CMakeFiles/demoApp.dir/CXX.dd.rsp
FAILED: [code=1] CMakeFiles/demoApp.dir/CXX.dd CMakeFiles/demoApp.dir/CXXModules.json CMakeFiles/demoApp.dir/demoApp.cpp.o.modmap
"C:\Program Files\CMake\bin\cmake.exe" -E cmake_ninja_dyndep --tdi=CMakeFiles\demoApp.dir\CXXDependInfo.json --lang=CXX --modmapfmt=clang --dd=CMakeFiles/demoApp.dir/CXX.dd @CMakeFiles/demoApp.dir/CXX.dd.rsp
CMake Error: -E cmake_ninja_dyndep failed to parse CMakeFiles/demoApp.dir/demoApp.cpp.o.ddi* Line 1, Column 3
Syntax error: value, object or array expected.
CMake Error: -E cmake_ninja_dyndep failed to parse ddi file CMakeFiles/demoApp.dir/demoApp.cpp.o.ddi
ninja: build stopped: subcommand failed.
Steps to reproduce
- Run command
emcmake cmake . -B out -G Ninja
:
Output
configure: cmake . -B out -G Ninja '-DCMAKE_TOOLCHAIN_FILE=C:\Users\user\emsdk\upstream\emscripten\cmake\Modules\Platform\Emscripten.cmake' -DCMAKE_CROSSCOMPILING_EMULATOR=C:/Users/user/emsdk/node/22.16.0_64bit/bin/node.exe
-- Configuring done (0.5s)
-- Generating done (0.0s)
-- Build files have been written to: D:/emscriptenDebug/out
- Run build command
cmake --build .\out -v
oremmake cmake --build .\out -v
- Receive above error
Minimal project setup
Root directory D:\emscriptenDebug\
Contents of file .\demoApp.cpp
:
#include <iostream>
int main() {
std::cout << "Hello World!" << std::endl;
}
Contents of file .\CMakeLists.txt
:
cmake_minimum_required (VERSION 4.0)
project(
emscriptenDebug
VERSION 0.1
DESCRIPTION "Minimal example project"
LANGUAGES CXX
)
set(CMAKE_CXX_STANDARD 23)
add_executable(demoApp "demoApp.cpp")
Synopsis
Invalid DDI files are being produced in the output. There is a blank line, in this case's single .ddi
file, followed by a line listing the output directory and a set of parentheses.
Removing this second line, D:\emscriptenDebug\out>()
, and rerunning the build command produces a demoApp.wasm
file and a demoApp.js
file. Subsequent changes to demoApp.cpp
will cause Ninja to rebuild and reproduce the invalid .ddi
, causing the build to fail.
Invalid DDI file:
emscripten build generated file .\out\CMakeFiles\demoApp.dir\demoApp.cpp.o.ddi
:
D:\emscriptenDebug\out>()
{
"revision": 0,
"rules": [
{
"primary-output": "CMakeFiles\\demoApp.dir\\demoApp.cpp.o"
}
],
"version": 1
}
Valid DDI file
Running the configure, step 1 above, without the emcmake
prefix, ie cmake . -B out -G Ninja
followed by step 2 generates a properly formed DDI file. Builds succeed for this configuration.
Contents of CMake only generated file, .\out\CMakeFiles\demoApp.dir\demoApp.cpp.obj.ddi
:
{
"version": 1,
"revision": 0,
"rules": [
{
"primary-output": "CMakeFiles\\demoApp.dir\\demoApp.cpp.obj",
"outputs": [
"CMakeFiles\\demoApp.dir\\demoApp.cpp.obj.ddi"
],
"requires": []
}
]
}
Might also be worth mentioning that the output filenames differ slightly:
.\out\CMakeFiles\demoApp.dir\demoApp.cpp.o.ddi
for the emscripten configured build vs.\out\CMakeFiles\demoApp.dir\demoApp.cpp.obj.ddi
CMake configured build