Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

import C++20 module but clang-scan-deps doen't known the "-s USE_WEBGPU=1" options. #21866

Open
eminor1988 opened this issue Apr 10, 2024 · 7 comments · May be fixed by #21987
Open

import C++20 module but clang-scan-deps doen't known the "-s USE_WEBGPU=1" options. #21866

eminor1988 opened this issue Apr 10, 2024 · 7 comments · May be fixed by #21987

Comments

@eminor1988
Copy link

eminor1988 commented Apr 10, 2024

EMSDK version:

  • 3.1.56-asserts

Compile command:

emcmake cmake ${PWD}/../ -G "Ninja" -DCMAKE_BUILD_TYPE="RelWithDebInfo" -DCMAKE_CXX_COMPILER_CLANG_SCAN_DEPS="/root/emsdk/upstream/bin/clang-scan-deps"

Output / Error message:

CMakeFiles/trd-party-lib-dear-imgui.dir/cpp/3rdParty/imgui-1.90.4-docking/imgui_tables.cpp.o.ddi 
"/root/emsdk/upstream/bin/clang-scan-deps" -format=p1689 -- /root/emsdk/upstream/emscripten/em++ -DIMGUI_DEFINE_MATH_OPERATORS -I/home/ubuntu/git/cpp/3rdParty/imgui-1.90.4-docking -I/home/ubuntu/git/cpp/3rdParty/imgui-1.90.4-docking/backends -I/home/ubuntu/git/cpp/3rdParty/imgui-1.90.4-docking/backends/libs -I/home/ubuntu/git/cpp/3rdParty/imgui-1.90.4-docking/examples/libs -O2 -g -DNDEBUG -std=c++23 -s USE_WEBGPU=1 -x c++ /home/ubuntu/git/cpp/3rdParty/imgui-1.90.4-docking/imgui_tables.cpp -c -o CMakeFiles/trd-party-lib-dear-imgui.dir/cpp/3rdParty/imgui-1.90.4-docking/imgui_tables.cpp.o -MT CMakeFiles/trd-party-lib-dear-imgui.dir/cpp/3rdParty/imgui-1.90.4-docking/imgui_tables.cpp.o.ddi -MD -MF CMakeFiles/trd-party-lib-dear-imgui.dir/cpp/3rdParty/imgui-1.90.4-docking/imgui_tables.cpp.o.ddi.d > CMakeFiles/trd-party-lib-dear-imgui.dir/cpp/3rdParty/imgui-1.90.4-docking/imgui_tables.cpp.o.ddi.tmp && mv CMakeFiles/trd-party-lib-dear-imgui.dir/cpp/3rdParty/imgui-1.90.4-docking/imgui_tables.cpp.o.ddi.tmp CMakeFiles/trd-party-lib-dear-imgui.dir/cpp/3rdParty/imgui-1.90.4-docking/imgui_tables.cpp.o.ddi
error: no such file or directory: 'USE_WEBGPU=1'

Expectation:

  • I think the dependency scanning process should be able to recognize the compiler option "-s USE_WEBGPU=1", right?
@sbc100
Copy link
Collaborator

sbc100 commented Apr 10, 2024

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?

@eminor1988
Copy link
Author

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.

@sbc100
Copy link
Collaborator

sbc100 commented Apr 10, 2024

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.

@sbc100 sbc100 transferred this issue from emscripten-core/emsdk Apr 30, 2024
@Diyou
Copy link

Diyou commented May 3, 2024

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

@Diyou
Copy link

Diyou commented May 7, 2024

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'

@sbc100
Copy link
Collaborator

sbc100 commented May 7, 2024

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.

@connorjclark connorjclark linked a pull request Jul 22, 2024 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants