Skip to content

Commit f9cff13

Browse files
committed
Move All the Gyb Support for Syntax out of Swift
Make libSyntax depend on swift-syntax: the new home for all of this infrastructure. This greatly simplifies the addition and amending of syntax nodes as only the swift-syntax paired with a swift checkout will need to be changed. This is in contrast to the existing build flow where a paired PR to both repos must be made to change anything here. Note that a paired PR may still be required if the legacy parser needs to be adjusted in response to syntax nodes changing, but I anticipate this to be a much more infrequent event now that the C++ end of libSyntax is deprecated.
1 parent 860cc27 commit f9cff13

24 files changed

+32
-4447
lines changed

CMakeLists.txt

+5
Original file line numberDiff line numberDiff line change
@@ -623,6 +623,11 @@ if(CMAKE_C_COMPILER_ID MATCHES Clang)
623623
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-Werror=c++98-compat-extra-semi>)
624624
endif()
625625

626+
# Make sure we know where swift-syntax is because we need it to build the parser.
627+
if(NOT EXISTS "${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}")
628+
message(SEND_ERROR "swift-syntax is required to build the Swift compiler. Please run update-checkout or specify SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE")
629+
endif()
630+
626631
# Use dispatch as the system scheduler by default.
627632
# For convenience, we set this to false when concurrency is disabled.
628633
set(SWIFT_CONCURRENCY_USES_DISPATCH FALSE)

cmake/modules/AddSwift.cmake

+3-2
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@ include(SwiftAndroidSupport)
66
include(SwiftCXXUtils)
77

88
function(_swift_gyb_target_sources target scope)
9+
set(SWIFT_SYNTAX_GYB_SUPPORT_DIR "${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder")
910
file(GLOB GYB_UNICODE_DATA ${SWIFT_SOURCE_DIR}/utils/UnicodeData/*)
1011
file(GLOB GYB_STDLIB_SUPPORT ${SWIFT_SOURCE_DIR}/utils/gyb_stdlib_support.py)
11-
file(GLOB GYB_SYNTAX_SUPPORT ${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/*.py)
12+
file(GLOB GYB_SYNTAX_SUPPORT ${SWIFT_SYNTAX_GYB_SUPPORT_DIR}/gyb_syntax_support/*.py)
1213
file(GLOB GYB_SOURCEKIT_SUPPORT ${SWIFT_SOURCE_DIR}/utils/gyb_sourcekit_support/*.py)
1314
set(GYB_SOURCES
1415
${SWIFT_SOURCE_DIR}/utils/gyb
@@ -26,7 +27,7 @@ function(_swift_gyb_target_sources target scope)
2627

2728
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${generated}
2829
COMMAND
29-
$<TARGET_FILE:Python3::Interpreter> ${SWIFT_SOURCE_DIR}/utils/gyb -D CMAKE_SIZEOF_VOID_P=${CMAKE_SIZEOF_VOID_P} ${SWIFT_GYB_FLAGS} -o ${CMAKE_CURRENT_BINARY_DIR}/${generated}.tmp ${absolute}
30+
${CMAKE_COMMAND} -E env PYTHONPATH=${SWIFT_SYNTAX_GYB_SUPPORT_DIR} $<TARGET_FILE:Python3::Interpreter> ${SWIFT_SOURCE_DIR}/utils/gyb -D CMAKE_SIZEOF_VOID_P=${CMAKE_SIZEOF_VOID_P} ${SWIFT_GYB_FLAGS} -o ${CMAKE_CURRENT_BINARY_DIR}/${generated}.tmp ${absolute}
3031
COMMAND
3132
${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_BINARY_DIR}/${generated}.tmp ${CMAKE_CURRENT_BINARY_DIR}/${generated}
3233
COMMAND

cmake/modules/SwiftHandleGybSources.cmake

+21-19
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,14 @@ function(handle_gyb_source_single dependency_out_var_name)
5353
endforeach()
5454
list(REMOVE_DUPLICATES gyb_expand_deps)
5555

56+
set(SWIFT_SYNTAX_GYB_SUPPORT_DIR "${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder")
57+
5658
add_custom_command_target(
5759
dependency_target
5860
COMMAND
5961
"${CMAKE_COMMAND}" -E make_directory "${dir}"
6062
COMMAND
61-
"$<TARGET_FILE:Python3::Interpreter>" "${gyb_tool}" ${SWIFT_GYB_FLAGS} ${GYB_SINGLE_FLAGS} -o "${GYB_SINGLE_OUTPUT}.tmp" "${GYB_SINGLE_SOURCE}"
63+
"${CMAKE_COMMAND}" -E env PYTHONPATH=${SWIFT_SYNTAX_GYB_SUPPORT_DIR} "$<TARGET_FILE:Python3::Interpreter>" "${gyb_tool}" ${SWIFT_GYB_FLAGS} ${GYB_SINGLE_FLAGS} -o "${GYB_SINGLE_OUTPUT}.tmp" "${GYB_SINGLE_SOURCE}"
6264
COMMAND
6365
"${CMAKE_COMMAND}" -E copy_if_different "${GYB_SINGLE_OUTPUT}.tmp" "${GYB_SINGLE_OUTPUT}"
6466
COMMAND
@@ -123,24 +125,24 @@ function(handle_gyb_sources dependency_out_var_name sources_var_name)
123125
"${SWIFT_SOURCE_DIR}/utils/UnicodeData/GraphemeBreakProperty.txt"
124126
"${SWIFT_SOURCE_DIR}/utils/UnicodeData/GraphemeBreakTest.txt"
125127
"${SWIFT_SOURCE_DIR}/utils/gyb_stdlib_support.py"
126-
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/__init__.py"
127-
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/Child.py"
128-
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/Classification.py"
129-
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/kinds.py"
130-
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/Node.py"
131-
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/AttributeNodes.py"
132-
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/AvailabilityNodes.py"
133-
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/CommonNodes.py"
134-
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/DeclNodes.py"
135-
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/ExprNodes.py"
136-
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/GenericNodes.py"
137-
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/NodeSerializationCodes.py"
138-
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/PatternNodes.py"
139-
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/StmtNodes.py"
140-
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/TypeNodes.py"
141-
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/Token.py"
142-
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/Trivia.py"
143-
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/Traits.py"
128+
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/__init__.py"
129+
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/Child.py"
130+
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/Classification.py"
131+
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/kinds.py"
132+
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/Node.py"
133+
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/AttributeNodes.py"
134+
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/AvailabilityNodes.py"
135+
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/CommonNodes.py"
136+
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/DeclNodes.py"
137+
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/ExprNodes.py"
138+
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/GenericNodes.py"
139+
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/NodeSerializationCodes.py"
140+
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/PatternNodes.py"
141+
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/StmtNodes.py"
142+
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/TypeNodes.py"
143+
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/Token.py"
144+
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/Trivia.py"
145+
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/Traits.py"
144146
"${SWIFT_SOURCE_DIR}/utils/gyb_sourcekit_support/__init__.py"
145147
"${SWIFT_SOURCE_DIR}/utils/gyb_sourcekit_support/UIDs.py")
146148

lib/Syntax/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -481,7 +481,7 @@ A couple of interesting points and reminders:
481481
## API Generation
482482

483483
The libSyntax APIs are generated automatically from a set of description files
484-
written in Python. These files are located in `utils/gyb_syntax_support/`, and
484+
written in Python. These files are located in the [swift-syntax repository](https://github.com/apple/swift-syntax/blob/main/utils/gyb_syntax_support), and
485485
all follow the same schema.
486486

487487
### Class Schema

utils/build-script-impl

+2
Original file line numberDiff line numberDiff line change
@@ -1234,6 +1234,7 @@ LIBICU_SOURCE_DIR="${WORKSPACE}/icu"
12341234
LIBCXX_SOURCE_DIR="${WORKSPACE}/llvm-project/runtimes"
12351235
EXPERIMENTAL_STRING_PROCESSING_SOURCE_DIR="${WORKSPACE}/swift-experimental-string-processing"
12361236
LIBXML2_SOURCE_DIR="${WORKSPACE}/libxml2"
1237+
SWIFT_SYNTAX_SOURCE_DIR="${WORKSPACE}/swift-syntax"
12371238

12381239
# We cannot currently apply the normal rules of skipping here for LLVM. Even if
12391240
# we are skipping building LLVM, we still need to at least build a few tools
@@ -2022,6 +2023,7 @@ for host in "${ALL_HOSTS[@]}"; do
20222023
-DSWIFT_TOOLS_ENABLE_LTO:STRING="${SWIFT_TOOLS_ENABLE_LTO}"
20232024
-DSWIFT_BUILD_RUNTIME_WITH_HOST_COMPILER:BOOL=$(true_false "${BUILD_RUNTIME_WITH_HOST_COMPILER}")
20242025
-DLIBDISPATCH_CMAKE_BUILD_TYPE:STRING="${LIBDISPATCH_BUILD_TYPE}"
2026+
-DSWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE:PATH="${SWIFT_SYNTAX_SOURCE_DIR}"
20252027
"${swift_cmake_options[@]}"
20262028
)
20272029

0 commit comments

Comments
 (0)