Skip to content

Add c++ modules ts build rules#569

Merged
waruqi merged 11 commits intodevfrom
cppmodules
Sep 12, 2019
Merged

Add c++ modules ts build rules#569
waruqi merged 11 commits intodevfrom
cppmodules

Conversation

@waruqi
Copy link
Copy Markdown
Member

@waruqi waruqi commented Sep 6, 2019

@waruqi waruqi changed the title Add c++ modules build rules Add c++ modules ts build rules Sep 6, 2019
@waruqi
Copy link
Copy Markdown
Member Author

waruqi commented Sep 6, 2019

Example (hello)

projectdir
  - src
    - hello.mpp
    - main.cpp
  - xmake.lua

xmake.lua

target("hello")
    set_kind("binary")
    add_files("src/*.cpp", "src/*.mpp") 

hello.mpp

// module;
#include <cstdio>
export module hello;
using namespace std;

export namespace hello {
    void say(const char* str) {
        printf("%s\n", str);
    }
}

main.cpp

import hello;

int main() {
    hello::say("hello module!");
    return 0;
}

Build and output

ruki:hello ruki$ xmake 
[  0%]: ccache compiling.release src/hello.mpp
[ 50%]: ccache compiling.release src/main.cpp
[100%]: linking.release hello
build ok!👌
ruki:hello ruki$ xmake -r -v
[  0%]: ccache compiling.release src/hello.mpp
/usr/local/bin/ccache /usr/bin/xcrun -sdk macosx clang -c -fmodules-ts --precompile -x c++-module -Qunused-arguments -arch x86_64 -fpascal-strings -fmessage-length=0 -mmacosx-version-min=10.14 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -o build/.objs/hello/macosx/x86_64/release/src/hello.mpp.o.pcm src/hello.mpp
/usr/local/bin/ccache /usr/bin/xcrun -sdk macosx clang -c -fmodules-ts -Qunused-arguments -arch x86_64 -fpascal-strings -fmessage-length=0 -mmacosx-version-min=10.14 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -o build/.objs/hello/macosx/x86_64/release/src/hello.mpp.o build/.objs/hello/macosx/x86_64/release/src/hello.mpp.o.pcm
[ 50%]: ccache compiling.release src/main.cpp
/usr/local/bin/ccache /usr/bin/xcrun -sdk macosx clang -c -fmodules-ts -fmodule-file=build/.objs/hello/macosx/x86_64/release/src/hello.mpp.o.pcm -Qunused-arguments -arch x86_64 -fpascal-strings -fmessage-length=0 -mmacosx-version-min=10.14 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -o build/.objs/hello/macosx/x86_64/release/src/main.cpp.o src/main.cpp
[100%]: linking.release hello
"/usr/bin/xcrun -sdk macosx clang++" -o build/macosx/x86_64/release/hello build/.objs/hello/macosx/x86_64/release/src/hello.mpp.o build/.objs/hello/macosx/x86_64/release/src/main.cpp.o -arch x86_64 -mmacosx-version-min=10.14 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -stdlib=libc++ -lz
build ok!👌

@waruqi
Copy link
Copy Markdown
Member Author

waruqi commented Sep 12, 2019

There is currently no environment to compile gcc toolchains with c++modules. (in svn://gcc.gnu.org/svn/gcc/branches/c++-modules)

And gcc's c++ modules implementation is not perfect, for the time being I don't support it.

目前我这没环境单独做一份支持c++modules的gcc toolchains来测试c++modules,并且目前gcc对c++modules支持也还不是很完善,等之后集成到gcc正式版的时候,我再对gcc做支持好了,目前不折腾了。。

@waruqi waruqi marked this pull request as ready for review September 12, 2019 04:32
@waruqi waruqi merged commit 961b833 into dev Sep 12, 2019
@waruqi waruqi mentioned this pull request Sep 12, 2019
@waruqi waruqi deleted the cppmodules branch September 12, 2019 14:34
@sunxfancy
Copy link
Copy Markdown
Contributor

关于GCC相关的C++ 20的支持有计划更新吗?C++20的module的header如果要import,需要先编译,不知道有没有什么思路可以讨论一下的?

@waruqi
Copy link
Copy Markdown
Member Author

waruqi commented Jul 18, 2022

gcc 不是老早支持了么。。

@sunxfancy
Copy link
Copy Markdown
Contributor

GCC 在import 等system heaaders需要提前编译,例如:

g++ -std=c++20 -fmodules-ts -c -x c++-system-header iostream

但我好像没有找到相关支持的接口,这样GCC就没办法import这些header从而无法发挥其相关的编译优势。

@waruqi
Copy link
Copy Markdown
Member Author

waruqi commented Jul 18, 2022

xmake 支持 gcc11 c++ modules 编译,但 std modules 目前不归 xmake 管,gcc11 没提供编译好的,暂时不支持,xmake 不会额外给你编译依赖的 std modules,这应该是 gcc 自身该提供的支持,而不是让构建工具支持。

像 msvc 都是自带编译好的 std modules 可用。

。。你可以直接用 #include <iostream>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants