Skip to content

Move All the Gyb Support for Syntax out of Swift #60859

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

Merged
merged 2 commits into from
Sep 1, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -623,6 +623,11 @@ if(CMAKE_C_COMPILER_ID MATCHES Clang)
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-Werror=c++98-compat-extra-semi>)
endif()

# Make sure we know where swift-syntax is because we need it to build the parser.
if(NOT EXISTS "${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should probably stick to a more conventional directory naming scheme.
Something like SWIFT_SYNTAX_SOURCE_DIR.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that the name actually works well for the current state of things - all the external repositories use this current naming scheme.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is true. Diverges from LLVM, but I guess that's common around these parts.

message(SEND_ERROR "swift-syntax is required to build the Swift compiler. Please run update-checkout or specify SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE")
endif()

# Use dispatch as the system scheduler by default.
# For convenience, we set this to false when concurrency is disabled.
set(SWIFT_CONCURRENCY_USES_DISPATCH FALSE)
Expand Down
5 changes: 3 additions & 2 deletions cmake/modules/AddSwift.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@ include(SwiftAndroidSupport)
include(SwiftCXXUtils)

function(_swift_gyb_target_sources target scope)
set(SWIFT_SYNTAX_GYB_SUPPORT_DIR "${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder")
file(GLOB GYB_UNICODE_DATA ${SWIFT_SOURCE_DIR}/utils/UnicodeData/*)
file(GLOB GYB_STDLIB_SUPPORT ${SWIFT_SOURCE_DIR}/utils/gyb_stdlib_support.py)
file(GLOB GYB_SYNTAX_SUPPORT ${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/*.py)
file(GLOB GYB_SYNTAX_SUPPORT ${SWIFT_SYNTAX_GYB_SUPPORT_DIR}/gyb_syntax_support/*.py)
file(GLOB GYB_SOURCEKIT_SUPPORT ${SWIFT_SOURCE_DIR}/utils/gyb_sourcekit_support/*.py)
set(GYB_SOURCES
${SWIFT_SOURCE_DIR}/utils/gyb
Expand All @@ -26,7 +27,7 @@ function(_swift_gyb_target_sources target scope)

add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${generated}
COMMAND
$<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}
${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}
COMMAND
${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_BINARY_DIR}/${generated}.tmp ${CMAKE_CURRENT_BINARY_DIR}/${generated}
COMMAND
Expand Down
40 changes: 21 additions & 19 deletions cmake/modules/SwiftHandleGybSources.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -53,12 +53,14 @@ function(handle_gyb_source_single dependency_out_var_name)
endforeach()
list(REMOVE_DUPLICATES gyb_expand_deps)

set(SWIFT_SYNTAX_GYB_SUPPORT_DIR "${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder")

add_custom_command_target(
dependency_target
COMMAND
"${CMAKE_COMMAND}" -E make_directory "${dir}"
COMMAND
"$<TARGET_FILE:Python3::Interpreter>" "${gyb_tool}" ${SWIFT_GYB_FLAGS} ${GYB_SINGLE_FLAGS} -o "${GYB_SINGLE_OUTPUT}.tmp" "${GYB_SINGLE_SOURCE}"
"${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}"
COMMAND
"${CMAKE_COMMAND}" -E copy_if_different "${GYB_SINGLE_OUTPUT}.tmp" "${GYB_SINGLE_OUTPUT}"
COMMAND
Expand Down Expand Up @@ -123,24 +125,24 @@ function(handle_gyb_sources dependency_out_var_name sources_var_name)
"${SWIFT_SOURCE_DIR}/utils/UnicodeData/GraphemeBreakProperty.txt"
"${SWIFT_SOURCE_DIR}/utils/UnicodeData/GraphemeBreakTest.txt"
"${SWIFT_SOURCE_DIR}/utils/gyb_stdlib_support.py"
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/__init__.py"
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/Child.py"
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/Classification.py"
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/kinds.py"
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/Node.py"
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/AttributeNodes.py"
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/AvailabilityNodes.py"
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/CommonNodes.py"
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/DeclNodes.py"
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/ExprNodes.py"
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/GenericNodes.py"
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/NodeSerializationCodes.py"
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/PatternNodes.py"
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/StmtNodes.py"
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/TypeNodes.py"
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/Token.py"
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/Trivia.py"
"${SWIFT_SOURCE_DIR}/utils/gyb_syntax_support/Traits.py"
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/__init__.py"
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/Child.py"
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/Classification.py"
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/kinds.py"
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/Node.py"
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/AttributeNodes.py"
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/AvailabilityNodes.py"
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/CommonNodes.py"
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/DeclNodes.py"
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/ExprNodes.py"
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/GenericNodes.py"
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/NodeSerializationCodes.py"
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/PatternNodes.py"
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/StmtNodes.py"
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/TypeNodes.py"
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/Token.py"
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/Trivia.py"
"${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}/Sources/generate-swift-syntax-builder/gyb_syntax_support/Traits.py"
"${SWIFT_SOURCE_DIR}/utils/gyb_sourcekit_support/__init__.py"
"${SWIFT_SOURCE_DIR}/utils/gyb_sourcekit_support/UIDs.py")

Expand Down
2 changes: 1 addition & 1 deletion lib/Syntax/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -481,7 +481,7 @@ A couple of interesting points and reminders:
## API Generation

The libSyntax APIs are generated automatically from a set of description files
written in Python. These files are located in `utils/gyb_syntax_support/`, and
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
all follow the same schema.

### Class Schema
Expand Down
2 changes: 2 additions & 0 deletions utils/build-script-impl
Original file line number Diff line number Diff line change
Expand Up @@ -1234,6 +1234,7 @@ LIBICU_SOURCE_DIR="${WORKSPACE}/icu"
LIBCXX_SOURCE_DIR="${WORKSPACE}/llvm-project/runtimes"
EXPERIMENTAL_STRING_PROCESSING_SOURCE_DIR="${WORKSPACE}/swift-experimental-string-processing"
LIBXML2_SOURCE_DIR="${WORKSPACE}/libxml2"
SWIFT_SYNTAX_SOURCE_DIR="${WORKSPACE}/swift-syntax"

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

Expand Down
3 changes: 2 additions & 1 deletion utils/build-windows.bat
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,6 @@ git -C "%source_root%\swift" checkout-index --force --all
@set "skip_repositories_arg=%skip_repositories_arg% --skip-repository swift-integration-tests"
@set "skip_repositories_arg=%skip_repositories_arg% --skip-repository swiftpm"
@set "skip_repositories_arg=%skip_repositories_arg% --skip-repository swift-stress-tester"
@set "skip_repositories_arg=%skip_repositories_arg% --skip-repository swift-syntax"
@set "skip_repositories_arg=%skip_repositories_arg% --skip-repository swift-tools-support-core"
@set "skip_repositories_arg=%skip_repositories_arg% --skip-repository swift-xcode-playground-support"
@set "skip_repositories_arg=%skip_repositories_arg% --skip-repository tensorflow-swift-apis"
Expand Down Expand Up @@ -282,6 +281,8 @@ cmake^
-DCMAKE_EXE_LINKER_FLAGS:STRING=/INCREMENTAL:NO^
-DCMAKE_SHARED_LINKER_FLAGS:STRING=/INCREMENTAL:NO^
-DSWIFT_LIT_ARGS="--time-tests"^
-DSWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE:PATH=%source_root%\swift-syntax^
-DSWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE:PATH=%source_root%\swift-syntax^
-S "%source_root%\swift" %exitOnError%

cmake --build "%build_root%\swift" %exitOnError%
Expand Down
Loading