Skip to content

Commit 37f2264

Browse files
authored
Merge pull request #313 from wravery/next
Add support for C++20 modules
2 parents e9c7081 + c30fcf1 commit 37f2264

File tree

184 files changed

+4291
-1095
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

184 files changed

+4291
-1095
lines changed

.github/workflows/linux.yml

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@ name: Linux
33
on: [push, pull_request]
44

55
jobs:
6-
gcc14:
6+
Linux:
77
strategy:
88
fail-fast: false
99
matrix:
10-
config: [Debug, Release]
10+
compiler: [gcc-14, clang-18]
11+
config: [debug, release]
1112

1213
runs-on: ubuntu-24.04
1314

@@ -18,38 +19,26 @@ jobs:
1819

1920
- name: Install Dependencies
2021
run: |
21-
sudo apt-get update
22-
sudo apt-get upgrade
2322
sudo add-apt-repository -y universe
2423
sudo apt-get update
25-
sudo apt-get install -yq libgtest-dev libboost-program-options-dev rapidjson-dev ninja-build gcc-14 g++-14
24+
sudo apt-get install -yq libgtest-dev libboost-program-options-dev rapidjson-dev ninja-build
2625
2726
- name: Build GTest
2827
run: |
2928
cmake -E make_directory gtest
3029
cd gtest
31-
cmake -DCMAKE_BUILD_TYPE=${{ matrix.config }} -G Ninja /usr/src/gtest
30+
cmake -DCMAKE_BUILD_TYPE=${{ matrix.config == 'debug' && 'Debug' || 'Release' }} -G Ninja /usr/src/gtest
3231
cmake --build . -j -v
3332
sudo cmake --install .
3433
3534
- name: Create Build Environment
3635
run: cmake -E make_directory build
3736

3837
- name: Configure CMake
39-
shell: pwsh
40-
env:
41-
CC: gcc-14
42-
CXX: g++-14
43-
working-directory: build/
44-
run: |
45-
$cmakeBuildType = '${{ matrix.config }}'
46-
47-
cmake "-DCMAKE_BUILD_TYPE=$cmakeBuildType" -G Ninja ${{ github.workspace }}
38+
run: cmake --preset ${{ matrix.compiler }}-${{ matrix.config }} -DCMAKE_TOOLCHAIN_FILE=
4839

4940
- name: Build
50-
working-directory: build/
51-
run: cmake --build . -j -v
41+
run: cmake --build --preset ${{ matrix.compiler }}-${{ matrix.config }} -j -v
5242

5343
- name: Test
54-
working-directory: build/
55-
run: ctest --output-on-failure
44+
run: ctest --preset ${{ matrix.compiler }}-${{ matrix.config }} --output-on-failure

.github/workflows/macos.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name: macOS
33
on: [push, pull_request]
44

55
jobs:
6-
xcode:
6+
apple-clang:
77
strategy:
88
fail-fast: false
99
matrix:
@@ -53,7 +53,7 @@ jobs:
5353
$env:VCPKG_BINARY_SOURCES = "clear;files,$cachedBinaries,$cacheAccess"
5454
5555
$env:PATH = "${env:PATH}:${{ github.workspace }}/ninja-build"
56-
cmake "-DCMAKE_TOOLCHAIN_FILE=$vcpkgToolchain" "-DCMAKE_BUILD_TYPE=$cmakeBuildType" -G Ninja ${{ github.workspace }}
56+
cmake "-DCMAKE_TOOLCHAIN_FILE=$vcpkgToolchain" "-DCMAKE_BUILD_TYPE=$cmakeBuildType" "-DGRAPHQL_BUILD_MODULES=OFF" -G Ninja ${{ github.workspace }}
5757
5858
- name: Build
5959
working-directory: build/

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ CMakeSettings.json
1717
CMakeCache.txt
1818
CTestCostData.txt
1919
CTestTestfile.cmake
20+
CMakeUserPresets.json
2021
DartConfiguration.tcl
2122
install_manifest.txt
2223
LastTest.log
@@ -40,3 +41,4 @@ settings.json
4041
build/
4142
install/
4243
isenseconfig/
44+
vc140.pdb

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/.git")
3333
endif()
3434
endif()
3535

36+
option(GRAPHQL_BUILD_MODULES "Build the C++20 module interface libraries." ON)
3637
option(GRAPHQL_BUILD_SCHEMAGEN "Build the schemagen tool." ON)
3738
option(GRAPHQL_BUILD_CLIENTGEN "Build the clientgen tool." ON)
3839
option(GRAPHQL_BUILD_TESTS "Build the tests and sample schema library." ON)

CMakePresets.json

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
{
2+
"version": 8,
3+
"configurePresets": [
4+
{
5+
"hidden": true,
6+
"name": "ninja-generator",
7+
"binaryDir": "build/${presetName}",
8+
"toolchainFile": "${sourceDir}/vcpkg/scripts/buildsystems/vcpkg.cmake",
9+
"generator": "Ninja"
10+
},
11+
{
12+
"name": "debug",
13+
"inherits": [ "ninja-generator" ],
14+
"cacheVariables": {
15+
"CMAKE_BUILD_TYPE": "Debug"
16+
}
17+
},
18+
{
19+
"name": "release",
20+
"inherits": [ "ninja-generator" ],
21+
"cacheVariables": {
22+
"CMAKE_BUILD_TYPE": "Release"
23+
}
24+
},
25+
{
26+
"name": "gcc-14-debug",
27+
"inherits": [ "debug" ],
28+
"condition": {
29+
"type": "notEquals",
30+
"lhs": "${hostSystemName}",
31+
"rhs": "Windows"
32+
},
33+
"cacheVariables": {
34+
"CMAKE_C_COMPILER": "/usr/bin/gcc-14",
35+
"CMAKE_CXX_COMPILER": "/usr/bin/g++-14",
36+
"GRAPHQL_BUILD_MODULES": false
37+
}
38+
},
39+
{
40+
"name": "gcc-14-release",
41+
"inherits": [ "gcc-14-debug" ],
42+
"cacheVariables": {
43+
"CMAKE_BUILD_TYPE": "RelWithDebInfo"
44+
}
45+
},
46+
{
47+
"name": "clang-18-debug",
48+
"inherits": [ "debug" ],
49+
"condition": {
50+
"type": "notEquals",
51+
"lhs": "${hostSystemName}",
52+
"rhs": "Windows"
53+
},
54+
"cacheVariables": {
55+
"CMAKE_C_COMPILER": "/usr/bin/clang-18",
56+
"CMAKE_CXX_COMPILER": "/usr/bin/clang++-18",
57+
"CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS": "/usr/bin/clang-scan-deps-18"
58+
}
59+
},
60+
{
61+
"name": "clang-18-release",
62+
"inherits": [ "clang-18-debug" ],
63+
"cacheVariables": {
64+
"CMAKE_BUILD_TYPE": "Release"
65+
}
66+
}
67+
],
68+
"buildPresets": [
69+
{
70+
"name": "debug",
71+
"configurePreset": "debug"
72+
},
73+
{
74+
"name": "release",
75+
"configurePreset": "release"
76+
},
77+
{
78+
"name": "gcc-14-debug",
79+
"configurePreset": "gcc-14-debug"
80+
},
81+
{
82+
"name": "gcc-14-release",
83+
"configurePreset": "gcc-14-release"
84+
},
85+
{
86+
"name": "clang-18-debug",
87+
"configurePreset": "clang-18-debug"
88+
},
89+
{
90+
"name": "clang-18-release",
91+
"configurePreset": "clang-18-release"
92+
}
93+
],
94+
"testPresets": [
95+
{
96+
"name": "debug",
97+
"configurePreset": "debug"
98+
},
99+
{
100+
"name": "release",
101+
"configurePreset": "release"
102+
},
103+
{
104+
"name": "gcc-14-debug",
105+
"configurePreset": "gcc-14-debug"
106+
},
107+
{
108+
"name": "gcc-14-release",
109+
"configurePreset": "gcc-14-release"
110+
},
111+
{
112+
"name": "clang-18-debug",
113+
"configurePreset": "clang-18-debug"
114+
},
115+
{
116+
"name": "clang-18-release",
117+
"configurePreset": "clang-18-release"
118+
}
119+
]
120+
}

cmake/Version.h.in

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,20 @@
66
#ifndef GRAPHQLVERSION_H
77
#define GRAPHQLVERSION_H
88

9+
#include <cstddef>
910
#include <string_view>
1011

1112
namespace graphql::internal {
1213

14+
inline namespace version {
15+
1316
constexpr std::string_view FullVersion { "@PROJECT_VERSION@" };
1417

15-
constexpr size_t MajorVersion = @PROJECT_VERSION_MAJOR@;
16-
constexpr size_t MinorVersion = @PROJECT_VERSION_MINOR@;
17-
constexpr size_t PatchVersion = @PROJECT_VERSION_PATCH@;
18+
constexpr std::size_t MajorVersion = @PROJECT_VERSION_MAJOR@;
19+
constexpr std::size_t MinorVersion = @PROJECT_VERSION_MINOR@;
20+
constexpr std::size_t PatchVersion = @PROJECT_VERSION_PATCH@;
21+
22+
} // namespace version
1823

1924
} // namespace graphql::internal
2025

cmake/cppgraphqlgen-functions.cmake

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,19 @@ function(add_graphql_schema_target SCHEMA_TARGET)
4646
file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/${SCHEMA_TARGET}_schema_files SCHEMA_FILES)
4747
add_library(${SCHEMA_TARGET}_schema STATIC ${SCHEMA_FILES})
4848
add_dependencies(${SCHEMA_TARGET}_schema ${SCHEMA_TARGET}_update_schema)
49+
target_compile_features(${SCHEMA_TARGET}_schema PUBLIC cxx_std_20)
4950
target_include_directories(${SCHEMA_TARGET}_schema PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
5051
target_link_libraries(${SCHEMA_TARGET}_schema PUBLIC cppgraphqlgen::graphqlservice)
52+
file(GLOB SCHEMA_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/*.h)
53+
target_sources(${SCHEMA_TARGET}_schema PUBLIC FILE_SET HEADERS
54+
BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}
55+
FILES ${SCHEMA_HEADERS})
56+
if(GRAPHQL_BUILD_MODULES)
57+
file(GLOB SCHEMA_MODULES ${CMAKE_CURRENT_SOURCE_DIR}/*.ixx)
58+
target_sources(${SCHEMA_TARGET}_schema PUBLIC FILE_SET CXX_MODULES
59+
BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}
60+
FILES ${SCHEMA_MODULES})
61+
endif()
5162
endif()
5263
endfunction()
5364

@@ -88,7 +99,18 @@ function(add_graphql_client_target CLIENT_TARGET)
8899
file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/${CLIENT_TARGET}_client_files CLIENT_FILES)
89100
add_library(${CLIENT_TARGET}_client STATIC ${CLIENT_FILES})
90101
add_dependencies(${CLIENT_TARGET}_client ${CLIENT_TARGET}_update_client)
102+
target_compile_features(${CLIENT_TARGET}_client PUBLIC cxx_std_20)
91103
target_include_directories(${CLIENT_TARGET}_client PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
92104
target_link_libraries(${CLIENT_TARGET}_client PUBLIC cppgraphqlgen::graphqlclient)
105+
file(GLOB CLIENT_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/*.h)
106+
target_sources(${CLIENT_TARGET}_client PUBLIC FILE_SET HEADERS
107+
BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}
108+
FILES ${CLIENT_HEADERS})
109+
if(GRAPHQL_BUILD_MODULES)
110+
file(GLOB CLIENT_MODULES ${CMAKE_CURRENT_SOURCE_DIR}/*.ixx)
111+
target_sources(${CLIENT_TARGET}_client PUBLIC FILE_SET CXX_MODULES
112+
BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}
113+
FILES ${CLIENT_MODULES})
114+
endif()
93115
endif()
94116
endfunction()

cmake/cppgraphqlgen-update-client-files.cmake

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ get_filename_component(REQUEST_GRAPHQL "${CLIENT_SOURCE_DIR}/${REQUEST_GRAPHQL}"
1111
file(MAKE_DIRECTORY ${CLIENT_BINARY_DIR})
1212

1313
# Cleanup all of the stale files in the binary directory
14-
file(GLOB PREVIOUS_FILES ${CLIENT_BINARY_DIR}/*.h ${CLIENT_BINARY_DIR}/*.cpp
14+
file(GLOB PREVIOUS_FILES ${CLIENT_BINARY_DIR}/*.h ${CLIENT_BINARY_DIR}/*.ixx ${CLIENT_BINARY_DIR}/*.cpp
1515
${CLIENT_BINARY_DIR}/${CLIENT_TARGET}_client_files)
1616
foreach(PREVIOUS_FILE ${PREVIOUS_FILES})
1717
file(REMOVE ${PREVIOUS_FILE})
@@ -30,7 +30,7 @@ execute_process(
3030

3131
# Get the up-to-date list of files in the binary directory
3232
set(FILE_NAMES "")
33-
file(GLOB NEW_FILES ${CLIENT_BINARY_DIR}/*.h ${CLIENT_BINARY_DIR}/*.cpp)
33+
file(GLOB NEW_FILES ${CLIENT_BINARY_DIR}/*.h ${CLIENT_BINARY_DIR}/*.ixx ${CLIENT_BINARY_DIR}/*.cpp)
3434
foreach(NEW_FILE ${NEW_FILES})
3535
get_filename_component(NEW_FILE ${NEW_FILE} NAME)
3636
list(APPEND FILE_NAMES "${NEW_FILE}")
@@ -45,11 +45,11 @@ endif()
4545
cmake_policy(SET CMP0057 NEW)
4646

4747
# Remove stale files in the source directory
48-
file(GLOB OLD_FILES ${CLIENT_SOURCE_DIR}/*.h ${CLIENT_SOURCE_DIR}/*.cpp)
48+
file(GLOB OLD_FILES ${CLIENT_SOURCE_DIR}/*.h ${CLIENT_SOURCE_DIR}/*.ixx ${CLIENT_SOURCE_DIR}/*.cpp)
4949
foreach(OLD_FILE ${OLD_FILES})
5050
get_filename_component(OLD_FILE ${OLD_FILE} NAME)
5151
if(NOT OLD_FILE IN_LIST FILE_NAMES)
52-
if(OLD_FILE MATCHES "Client\\.h$" OR OLD_FILE MATCHES "Client\\.cpp$")
52+
if(OLD_FILE MATCHES "Client\\.h$" OR OLD_FILE MATCHES "Client\\.ixx$" OR OLD_FILE MATCHES "Client\\.cpp$")
5353
file(REMOVE "${CLIENT_SOURCE_DIR}/${OLD_FILE}")
5454
else()
5555
message(WARNING "Unexpected file in ${CLIENT_TARGET} client sources: ${OLD_FILE}")

cmake/cppgraphqlgen-update-schema-files.cmake

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ get_filename_component(SCHEMA_GRAPHQL "${SCHEMA_SOURCE_DIR}/${SCHEMA_GRAPHQL}" A
1010
file(MAKE_DIRECTORY ${SCHEMA_BINARY_DIR})
1111

1212
# Cleanup all of the stale files in the binary directory
13-
file(GLOB PREVIOUS_FILES ${SCHEMA_BINARY_DIR}/*.h ${SCHEMA_BINARY_DIR}/*.cpp
13+
file(GLOB PREVIOUS_FILES ${SCHEMA_BINARY_DIR}/*.h ${SCHEMA_BINARY_DIR}/*.ixx ${SCHEMA_BINARY_DIR}/*.cpp
1414
${SCHEMA_BINARY_DIR}/${SCHEMA_TARGET}_schema_files)
1515
foreach(PREVIOUS_FILE ${PREVIOUS_FILES})
1616
file(REMOVE ${PREVIOUS_FILE})
@@ -29,7 +29,7 @@ execute_process(
2929

3030
# Get the up-to-date list of files in the binary directory
3131
set(FILE_NAMES "")
32-
file(GLOB NEW_FILES ${SCHEMA_BINARY_DIR}/*.h ${SCHEMA_BINARY_DIR}/*.cpp)
32+
file(GLOB NEW_FILES ${SCHEMA_BINARY_DIR}/*.h ${SCHEMA_BINARY_DIR}/*.ixx ${SCHEMA_BINARY_DIR}/*.cpp)
3333
foreach(NEW_FILE ${NEW_FILES})
3434
get_filename_component(NEW_FILE ${NEW_FILE} NAME)
3535
list(APPEND FILE_NAMES "${NEW_FILE}")
@@ -44,13 +44,14 @@ endif()
4444
cmake_policy(SET CMP0057 NEW)
4545

4646
# Remove stale files in the source directory
47-
file(GLOB OLD_FILES ${SCHEMA_SOURCE_DIR}/*.h ${SCHEMA_SOURCE_DIR}/*.cpp)
47+
file(GLOB OLD_FILES ${SCHEMA_SOURCE_DIR}/*.h ${SCHEMA_SOURCE_DIR}/*.ixx ${SCHEMA_SOURCE_DIR}/*.cpp)
4848
foreach(OLD_FILE ${OLD_FILES})
4949
get_filename_component(OLD_FILE ${OLD_FILE} NAME)
5050
if(NOT OLD_FILE IN_LIST FILE_NAMES)
51-
if(OLD_FILE MATCHES "Object\\.h$" OR OLD_FILE MATCHES "Object\\.cpp$")
51+
if(OLD_FILE MATCHES "Object\\.h$" OR OLD_FILE MATCHES "Object\\.ixx$" OR OLD_FILE MATCHES "Object\\.cpp$")
5252
file(REMOVE "${SCHEMA_SOURCE_DIR}/${OLD_FILE}")
5353
elseif(NOT OLD_FILE STREQUAL "${SCHEMA_PREFIX}Schema.h" AND
54+
NOT OLD_FILE STREQUAL "${SCHEMA_PREFIX}Schema.ixx" AND
5455
NOT OLD_FILE STREQUAL "${SCHEMA_PREFIX}Schema.cpp")
5556
message(WARNING "Unexpected file in ${SCHEMA_TARGET} GraphQL schema sources: ${OLD_FILE}")
5657
endif()

cmake/test_boost_beast.cpp

Lines changed: 0 additions & 15 deletions
This file was deleted.

0 commit comments

Comments
 (0)