Skip to content

Commit 49d4ced

Browse files
committed
Extract clientgen cmake functions as well
1 parent b16f482 commit 49d4ced

27 files changed

+201
-134
lines changed

cmake/cppgraphqlgen-config.cmake

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ The following functions are defined to help with code generation and build targe
2424
update_graphql_schema_files
2525
add_graphql_schema_target
2626
add_graphql_schema_no_introspection_target
27+
update_graphql_client_files
28+
add_graphql_client_target
2729
#]=======================================================================]
2830

2931
include(CMakeFindDependencyMacro)

cmake/cppgraphqlgen-functions.cmake

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ get_filename_component(GRAPHQL_UPDATE_SCHEMA_FILES_SCRIPT
55
"${CMAKE_CURRENT_LIST_DIR}/cppgraphqlgen-update-schema-files.cmake"
66
ABSOLUTE)
77

8+
get_filename_component(GRAPHQL_UPDATE_CLIENT_FILES_SCRIPT
9+
"${CMAKE_CURRENT_LIST_DIR}/cppgraphqlgen-update-client-files.cmake"
10+
ABSOLUTE)
11+
812
function(update_graphql_schema_files SCHEMA_TARGET SCHEMA_GRAPHQL SCHEMA_PREFIX SCHEMA_NAMESPACE)
913
set_property(DIRECTORY APPEND
1014
PROPERTY CMAKE_CONFIGURE_DEPENDS ${SCHEMA_TARGET}_schema_files)
@@ -55,3 +59,43 @@ function(add_graphql_schema_no_introspection_target SCHEMA_NO_INTROSPECTION_TARG
5559
target_include_directories(${SCHEMA_NO_INTROSPECTION_TARGET}_schema PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
5660
target_link_libraries(${SCHEMA_NO_INTROSPECTION_TARGET}_schema PUBLIC cppgraphqlgen::graphqlservice)
5761
endfunction()
62+
63+
function(update_graphql_client_files CLIENT_TARGET SCHEMA_GRAPHQL REQUEST_GRAPHQL CLIENT_PREFIX CLIENT_NAMESPACE)
64+
set_property(DIRECTORY APPEND
65+
PROPERTY CMAKE_CONFIGURE_DEPENDS ${CLIENT_TARGET}_client_files)
66+
67+
# Collect optional arguments
68+
set(ADDITIONAL_CLIENTGEN_ARGS "")
69+
if(ARGC GREATER 5)
70+
math(EXPR LAST_ARG "${ARGC} - 1")
71+
foreach(ARGN RANGE 5 ${LAST_ARG})
72+
set(NEXT_ARG "${ARGV${ARGN}}")
73+
list(APPEND ADDITIONAL_CLIENTGEN_ARGS "${NEXT_ARG}")
74+
endforeach()
75+
endif()
76+
77+
add_custom_command(
78+
OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/${CLIENT_TARGET}_client_files
79+
COMMAND
80+
${CMAKE_COMMAND} "-DCLIENT_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}"
81+
"-DCLIENT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}"
82+
"-DCLIENTGEN_PROGRAM=$<TARGET_FILE:cppgraphqlgen::clientgen>" "-DCLIENT_TARGET=${CLIENT_TARGET}"
83+
"-DSCHEMA_GRAPHQL=${SCHEMA_GRAPHQL}" "-DREQUEST_GRAPHQL=${REQUEST_GRAPHQL}"
84+
"-DCLIENT_PREFIX=${CLIENT_PREFIX}" "-DCLIENT_NAMESPACE=${CLIENT_NAMESPACE}"
85+
"-DADDITIONAL_CLIENTGEN_ARGS=${ADDITIONAL_CLIENTGEN_ARGS}"
86+
-P ${GRAPHQL_UPDATE_CLIENT_FILES_SCRIPT}
87+
DEPENDS ${SCHEMA_GRAPHQL} ${REQUEST_GRAPHQL} ${GRAPHQL_UPDATE_CLIENT_FILES_SCRIPT}
88+
COMMENT "Generating ${CLIENT_TARGET} client"
89+
VERBATIM)
90+
endfunction()
91+
92+
function(add_graphql_client_target CLIENT_TARGET)
93+
add_custom_target(${CLIENT_TARGET}_update_client ALL
94+
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${CLIENT_TARGET}_client_files)
95+
96+
file(STRINGS ${CLIENT_TARGET}_client_files CLIENT_FILES)
97+
add_library(${CLIENT_TARGET}_client STATIC ${CLIENT_FILES})
98+
add_dependencies(${CLIENT_TARGET}_client ${CLIENT_TARGET}_update_client)
99+
target_include_directories(${CLIENT_TARGET}_client PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
100+
target_link_libraries(${CLIENT_TARGET}_client PUBLIC cppgraphqlgen::graphqlclient)
101+
endfunction()
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# Copyright (c) Microsoft Corporation. All rights reserved.
2+
# Licensed under the MIT License.
3+
4+
# Normalize the filesystem paths
5+
get_filename_component(CLIENT_SOURCE_DIR ${CLIENT_SOURCE_DIR} ABSOLUTE)
6+
get_filename_component(CLIENT_BINARY_DIR ${CLIENT_BINARY_DIR} ABSOLUTE)
7+
get_filename_component(CLIENTGEN_PROGRAM ${CLIENTGEN_PROGRAM} ABSOLUTE)
8+
get_filename_component(SCHEMA_GRAPHQL "${CLIENT_SOURCE_DIR}/${SCHEMA_GRAPHQL}" ABSOLUTE)
9+
get_filename_component(REQUEST_GRAPHQL "${CLIENT_SOURCE_DIR}/${REQUEST_GRAPHQL}" ABSOLUTE)
10+
11+
file(MAKE_DIRECTORY ${CLIENT_BINARY_DIR})
12+
13+
# Cleanup all of the stale files in the binary directory
14+
file(GLOB PREVIOUS_FILES ${CLIENT_BINARY_DIR}/*.h ${CLIENT_BINARY_DIR}/*.cpp
15+
${CLIENT_BINARY_DIR}/${CLIENT_TARGET}_client_files)
16+
foreach(PREVIOUS_FILE ${PREVIOUS_FILES})
17+
file(REMOVE ${PREVIOUS_FILE})
18+
endforeach()
19+
20+
set(CLIENTGEN_ARGS "--schema=${SCHEMA_GRAPHQL}" "--request=${REQUEST_GRAPHQL}" "--prefix=${CLIENT_PREFIX}" "--namespace=${CLIENT_NAMESPACE}")
21+
foreach(CLIENTGEN_ARG ${ADDITIONAL_CLIENTGEN_ARGS})
22+
list(APPEND CLIENTGEN_ARGS ${CLIENTGEN_ARG})
23+
endforeach()
24+
25+
# Regenerate the sources in the binary directory
26+
execute_process(
27+
COMMAND ${CLIENTGEN_PROGRAM} ${CLIENTGEN_ARGS}
28+
OUTPUT_FILE ${CLIENT_TARGET}_client_files
29+
WORKING_DIRECTORY ${CLIENT_BINARY_DIR})
30+
31+
# Get the up-to-date list of files in the binary directory
32+
set(FILE_NAMES "")
33+
file(GLOB NEW_FILES ${CLIENT_BINARY_DIR}/*.h ${CLIENT_BINARY_DIR}/*.cpp)
34+
foreach(NEW_FILE ${NEW_FILES})
35+
get_filename_component(NEW_FILE ${NEW_FILE} NAME)
36+
list(APPEND FILE_NAMES "${NEW_FILE}")
37+
endforeach()
38+
39+
# Don't update the files in the source directory if no files were generated in the binary directory.
40+
if(NOT FILE_NAMES)
41+
message(FATAL_ERROR "Schema generation failed!")
42+
endif()
43+
44+
# Remove stale files in the source directory
45+
cmake_policy(SET CMP0057 NEW)
46+
file(GLOB OLD_FILES ${CLIENT_SOURCE_DIR}/*.h ${CLIENT_SOURCE_DIR}/*.cpp)
47+
foreach(OLD_FILE ${OLD_FILES})
48+
get_filename_component(OLD_FILE ${OLD_FILE} NAME)
49+
if(NOT OLD_FILE IN_LIST FILE_NAMES)
50+
file(REMOVE "${CLIENT_SOURCE_DIR}/${OLD_FILE}")
51+
endif()
52+
endforeach()
53+
54+
# Copy new and modified files from the binary directory to the source directory
55+
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different
56+
${CLIENT_BINARY_DIR}/${CLIENT_TARGET}_client_files
57+
${NEW_FILES}
58+
${CLIENT_SOURCE_DIR})

samples/CMakeLists.txt

Lines changed: 1 addition & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -3,110 +3,7 @@
33

44
cmake_minimum_required(VERSION 3.8.2)
55

6-
if(GRAPHQL_UPDATE_SAMPLES AND GRAPHQL_BUILD_CLIENTGEN)
7-
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/client)
8-
9-
# query.today.graphql
10-
add_custom_command(
11-
OUTPUT
12-
${CMAKE_CURRENT_BINARY_DIR}/client/QueryClient.cpp
13-
${CMAKE_CURRENT_BINARY_DIR}/client/QueryClient.h
14-
COMMAND clientgen --schema="${CMAKE_CURRENT_SOURCE_DIR}/today/schema.today.graphql" --request="${CMAKE_CURRENT_SOURCE_DIR}/query.today.graphql" --prefix="Query" --namespace="query"
15-
COMMAND ${CMAKE_COMMAND} -E copy_if_different
16-
QueryClient.cpp
17-
QueryClient.h
18-
${CMAKE_CURRENT_SOURCE_DIR}/client
19-
DEPENDS clientgen today/schema.today.graphql query.today.graphql
20-
WORKING_DIRECTORY client
21-
COMMENT "Generating QueryClient samples")
22-
23-
# mutate.today.graphql
24-
add_custom_command(
25-
OUTPUT
26-
${CMAKE_CURRENT_BINARY_DIR}/client/MutateClient.cpp
27-
${CMAKE_CURRENT_BINARY_DIR}/client/MutateClient.h
28-
COMMAND clientgen --schema="${CMAKE_CURRENT_SOURCE_DIR}/today/schema.today.graphql" --request="${CMAKE_CURRENT_SOURCE_DIR}/mutate.today.graphql" --prefix="Mutate" --namespace="mutate"
29-
COMMAND ${CMAKE_COMMAND} -E copy_if_different
30-
MutateClient.cpp
31-
MutateClient.h
32-
${CMAKE_CURRENT_SOURCE_DIR}/client
33-
DEPENDS clientgen today/schema.today.graphql mutate.today.graphql
34-
WORKING_DIRECTORY client
35-
COMMENT "Generating MutateClient samples")
36-
37-
# subscribe.today.graphql
38-
add_custom_command(
39-
OUTPUT
40-
${CMAKE_CURRENT_BINARY_DIR}/client/SubscribeClient.cpp
41-
${CMAKE_CURRENT_BINARY_DIR}/client/SubscribeClient.h
42-
COMMAND clientgen --schema="${CMAKE_CURRENT_SOURCE_DIR}/today/schema.today.graphql" --request="${CMAKE_CURRENT_SOURCE_DIR}/subscribe.today.graphql" --prefix="Subscribe" --namespace="subscribe"
43-
COMMAND ${CMAKE_COMMAND} -E copy_if_different
44-
SubscribeClient.cpp
45-
SubscribeClient.h
46-
${CMAKE_CURRENT_SOURCE_DIR}/client
47-
DEPENDS clientgen today/schema.today.graphql subscribe.today.graphql
48-
WORKING_DIRECTORY client
49-
COMMENT "Generating SubscribeClient samples")
50-
51-
# client.benchmark.today.graphql
52-
add_custom_command(
53-
OUTPUT
54-
${CMAKE_CURRENT_BINARY_DIR}/client/BenchmarkClient.cpp
55-
${CMAKE_CURRENT_BINARY_DIR}/client/BenchmarkClient.h
56-
COMMAND clientgen --schema="${CMAKE_CURRENT_SOURCE_DIR}/today/schema.today.graphql" --request="${CMAKE_CURRENT_SOURCE_DIR}/client.benchmark.today.graphql" --prefix="Benchmark" --namespace="benchmark"
57-
COMMAND ${CMAKE_COMMAND} -E copy_if_different
58-
BenchmarkClient.cpp
59-
BenchmarkClient.h
60-
${CMAKE_CURRENT_SOURCE_DIR}/client
61-
DEPENDS clientgen today/schema.today.graphql client.benchmark.today.graphql
62-
WORKING_DIRECTORY client
63-
COMMENT "Generating BenchmarkClient samples")
64-
65-
add_custom_target(update_client_samples ALL
66-
DEPENDS
67-
${CMAKE_CURRENT_BINARY_DIR}/client/QueryClient.cpp
68-
${CMAKE_CURRENT_BINARY_DIR}/client/QueryClient.h
69-
${CMAKE_CURRENT_BINARY_DIR}/client/MutateClient.cpp
70-
${CMAKE_CURRENT_BINARY_DIR}/client/MutateClient.h
71-
${CMAKE_CURRENT_BINARY_DIR}/client/SubscribeClient.cpp
72-
${CMAKE_CURRENT_BINARY_DIR}/client/SubscribeClient.h
73-
${CMAKE_CURRENT_BINARY_DIR}/client/BenchmarkClient.cpp
74-
${CMAKE_CURRENT_BINARY_DIR}/client/BenchmarkClient.h)
75-
endif()
76-
6+
add_subdirectory(client)
777
add_subdirectory(learn)
788
add_subdirectory(today)
799
add_subdirectory(validation)
80-
81-
# todayclient
82-
add_library(todayclient STATIC
83-
${CMAKE_CURRENT_SOURCE_DIR}/client/QueryClient.cpp
84-
${CMAKE_CURRENT_SOURCE_DIR}/client/MutateClient.cpp
85-
${CMAKE_CURRENT_SOURCE_DIR}/client/SubscribeClient.cpp)
86-
target_link_libraries(todayclient PUBLIC graphqlclient)
87-
target_include_directories(todayclient PUBLIC
88-
${CMAKE_CURRENT_SOURCE_DIR}/../include
89-
${CMAKE_CURRENT_SOURCE_DIR}/../PEGTL/include
90-
${CMAKE_CURRENT_SOURCE_DIR}/client)
91-
92-
if(GRAPHQL_UPDATE_SAMPLES AND GRAPHQL_BUILD_CLIENTGEN)
93-
# wait for the sample update to complete
94-
add_dependencies(todayclient update_client_samples)
95-
endif()
96-
97-
# client_benchmark
98-
add_executable(client_benchmark
99-
${CMAKE_CURRENT_SOURCE_DIR}/client/BenchmarkClient.cpp
100-
client/benchmark.cpp)
101-
target_link_libraries(client_benchmark PRIVATE
102-
separategraphql
103-
todayclient
104-
graphqlclient)
105-
target_include_directories(client_benchmark PRIVATE
106-
${CMAKE_CURRENT_SOURCE_DIR}/../include
107-
${CMAKE_CURRENT_SOURCE_DIR}/../PEGTL/include
108-
${CMAKE_CURRENT_SOURCE_DIR}/client)
109-
110-
if(WIN32 AND BUILD_SHARED_LIBS)
111-
add_dependencies(client_benchmark copy_sample_dlls)
112-
endif()

samples/client/CMakeLists.txt

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# Copyright (c) Microsoft Corporation. All rights reserved.
2+
# Licensed under the MIT License.
3+
4+
cmake_minimum_required(VERSION 3.8.2)
5+
6+
add_subdirectory(query)
7+
add_subdirectory(mutate)
8+
add_subdirectory(subscribe)
9+
10+
add_subdirectory(benchmark)
11+
12+
# client_benchmark
13+
add_executable(client_benchmark benchmark.cpp)
14+
target_link_libraries(client_benchmark PRIVATE
15+
separategraphql
16+
benchmark_client)
17+
18+
if(WIN32 AND BUILD_SHARED_LIBS)
19+
add_custom_command(OUTPUT copied_sample_dlls
20+
COMMAND ${CMAKE_COMMAND} -E copy_if_different
21+
$<TARGET_FILE:graphqlservice>
22+
$<TARGET_FILE:graphqlintrospection>
23+
$<TARGET_FILE:graphqljson>
24+
$<TARGET_FILE:graphqlpeg>
25+
$<TARGET_FILE:graphqlresponse>
26+
$<TARGET_FILE:graphqlclient>
27+
${CMAKE_CURRENT_BINARY_DIR}
28+
COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/copied_sample_dlls
29+
DEPENDS
30+
graphqlservice
31+
graphqlintrospection
32+
graphqljson
33+
graphqlpeg
34+
graphqlresponse
35+
graphqlclient
36+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../src)
37+
38+
add_custom_target(copy_sample_dlls DEPENDS copied_sample_dlls)
39+
40+
add_dependencies(client_benchmark copy_sample_dlls)
41+
endif()
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Copyright (c) Microsoft Corporation. All rights reserved.
2+
# Licensed under the MIT License.
3+
4+
cmake_minimum_required(VERSION 3.8.2)
5+
6+
include(${CMAKE_CURRENT_SOURCE_DIR}/../../../cmake/cppgraphqlgen-functions.cmake)
7+
8+
if(GRAPHQL_UPDATE_SAMPLES AND GRAPHQL_BUILD_CLIENTGEN)
9+
update_graphql_client_files(benchmark ../../today/schema.today.graphql client.benchmark.today.graphql Benchmark benchmark)
10+
endif()
11+
12+
add_graphql_client_target(benchmark)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
BenchmarkClient.cpp

0 commit comments

Comments
 (0)