Open eminor1988 opened 2 months ago
Does cmake always assume it can pass all cflags to clang-scan-deps
?
If so I guess we need an emcc-scan-deps
that wraps clang-scan-deps
and removes the flags.
In any case I don't think passing -DCMAKE_CXX_COMPILER_CLANG_SCAN_DEPS="/root/emsdk/upstream/bin/clang-scan-deps"
is the right thing to do.. if you don't specify CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS
at all, what does cmake default to?
Sorry for bad English skill...
I am trying to use C++20 module in my project.
I thought emsdk/upstream/bin/clang-scan-deps had already addressed this issue, so I reported it.
Since the code itself relies on <webgpu/webgpu.h> from emscripten, I think it's still necessary to include "-s USE_WEBGPU=1" for clang-scan-deps, but I am not sure.
The problem is that -sUSE_WEBGPU
is an emscripten-specific flag so clang won't understand that.
I guess we need to add some kind of emcc-scan-deps
wrapper.
USE_WEBGPU is only a link flag. Did you set it explicitly as a compile flag?
I can build simple modules when not setting any emscripten compile flags but clang-scan-deps fails then to find any header in /upstream/emscripten/cache/sysroot/include
like emscripten.h
or webgpu/webgpu.h
For some reason /upstream/emscripten/cache/sysroot/include
does not get passed to clang-scan-deps
by cmake even after include_directories()
or target_include_directories()
.
I tried to pass <emscripten.h>
as a precompiled header which results in an error:
[build] "/mnt/e/Workspace/Diyou.Engine/.cache/emsdk/upstream/bin/clang-scan-deps" -format=p1689 -- /mnt/e/Workspace/Diyou.Engine/.cache/emsdk/upstream/emscripten/em++ -I/mnt/e/Workspace/Diyou.Engine/build/Debug.WASM/.cache/SDL3/include -I/mnt/e/Workspace/Diyou.Engine/.cache/SDL3/include -I/mnt/e/Workspace/Diyou.Engine/.cache/SDL3/include/SDL3 -g -std=c++23 -flto=thin -fPIC -idirafter/mnt/e/Workspace/Diyou.Engine/.cache/SDL3/src/video/khronos -Winvalid-pch -Xclang -include-pch -Xclang /mnt/e/Workspace/Diyou.Engine/build/Debug.WASM/CMakeFiles/Diyou.dir/cmake_pch.hxx.pch -Xclang -include -Xclang /mnt/e/Workspace/Diyou.Engine/build/Debug.WASM/CMakeFiles/Diyou.dir/cmake_pch.hxx -x c++ /mnt/e/Workspace/Diyou.Engine/Source/Runtime.c++ -c -o CMakeFiles/Diyou.dir/Source/Runtime.c++.o -MT CMakeFiles/Diyou.dir/Source/Runtime.c++.o.ddi -MD -MF CMakeFiles/Diyou.dir/Source/Runtime.c++.o.ddi.d > CMakeFiles/Diyou.dir/Source/Runtime.c++.o.ddi.tmp && mv CMakeFiles/Diyou.dir/Source/Runtime.c++.o.ddi.tmp CMakeFiles/Diyou.dir/Source/Runtime.c++.o.ddi
[build] Error while scanning dependencies for /mnt/e/Workspace/Diyou.Engine/Source/Runtime.c++:
[build] error: ignore exceptions was enabled in PCH file but is currently disabled
[build] error: PCH file was compiled for the target 'wasm32-unknown-emscripten' but the current translation unit is being compiled for target 'x86_64-unknown-linux-gnu'
I don't think its going to be easy to make clang-scan-deps
works out of the box. There are a bunch of flags you would need to pass to it, most importantly --sysroot=..
and --target=..
. You might be able do this yourselve by hacking but in the long run we are doing to want and emscripten-specific wrapper around clang-scan-deps
I belive.
EMSDK version:
Compile command:
Output / Error message:
Expectation: