Skip to content

Commit ecc9093

Browse files
authored
Merge pull request #80328 from etcwilde/ewilde/stdlib-string-processing
[CMake] [Stdlib] Build StringProcessing with new stdlib build
2 parents a61c400 + bab0db6 commit ecc9093

File tree

9 files changed

+218
-9
lines changed

9 files changed

+218
-9
lines changed

CMakeLists.txt

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1630,7 +1630,7 @@ if(SWIFT_ENABLE_NEW_RUNTIME_BUILD)
16301630

16311631
DEPENDS PopulateRuntimeSourceDir
16321632
CMAKE_ARGS
1633-
-DCMAKE_INSTALL_LIBDIR:FILEPATH=lib/swift/${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${arch}
1633+
-DCMAKE_INSTALL_LIBDIR:FILEPATH=lib
16341634
# Compiler will see mismatched swift modules and fail initial checks
16351635
-DCMAKE_Swift_COMPILER_WORKS:BOOLEAN=YES
16361636
-DBUILD_SHARED_LIBS:BOOLEAN=YES # TODO: Make this configurable
@@ -1646,12 +1646,32 @@ if(SWIFT_ENABLE_NEW_RUNTIME_BUILD)
16461646
-DCMAKE_CXX_COMPILER_TARGET:STRING=${stdlib_target_triple}
16471647
-DCMAKE_COLOR_DIAGNOSTICS:BOOLEAN=${CMAKE_COLOR_DIAGNOSTICS}
16481648
-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
1649-
-DSwiftCore_PLATFORM_SUBDIR=${SWIFT_SDK_${sdk}_LIB_SUBDIR}
1650-
-DSwiftCore_ARCH_SUBDIR=${arch}
1649+
-DSwiftCore_INSTALL_NESTED_SUBDIR=YES
16511650
-DSwiftCore_ENABLE_CONCURRENCY=YES)
16521651
if(NOT ${CMAKE_CROSSCOMPILING})
1653-
add_dependencies("${stdlib_target}" swift-frontend)
1652+
add_dependencies("${stdlib_target}-core" swift-frontend)
16541653
endif()
1654+
1655+
ExternalProject_Get_Property("${stdlib_target}-core" INSTALL_DIR)
1656+
1657+
ExternalProject_Add("${stdlib_target}-StringProcessing"
1658+
SOURCE_DIR
1659+
"${CMAKE_CURRENT_SOURCE_DIR}/Runtimes/Supplemental/StringProcessing"
1660+
DEPENDS "${stdlib_target}-core"
1661+
INSTALL_DIR "${INSTALL_DIR}"
1662+
INSTALL_COMMAND "" # No install story set up yet
1663+
CMAKE_ARGS
1664+
-DBUILD_SHARED_LIBS=YES
1665+
-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
1666+
-DCMAKE_INSTALL_PREFIX:FILEPATH=${INSTALL_DIR}
1667+
-DCMAKE_Swift_COMPILER:FILEPATH=$<IF:$<BOOL:${CMAKE_CROSSCOMPILING}>,${CMAKE_Swift_COMPILER},$<PATH:REPLACE_FILENAME,$<TARGET_FILE:swift-frontend>,swiftc>>
1668+
-DCMAKE_C_COMPILER:FILEPATH=${CMAKE_C_COMPILER}
1669+
-DCMAKE_CXX_COMPILER:FILEPATH=${CMAKE_CXX_COMPILER}
1670+
-DCMAKE_Swift_COMPILER_TARGET:STRING=${stdlib_target_triple}
1671+
-DCMAKE_C_COMPILER_TARGET:STRING=${stdlib_target_triple}
1672+
-DCMAKE_CXX_COMPILER_TARGET:STRING=${stdlib_target_triple}
1673+
-DCMAKE_COLOR_DIAGNOSTICS:BOOLEAN=${CMAKE_COLOR_DIAGNOSTICS}
1674+
-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM})
16551675
endforeach()
16561676
endforeach()
16571677
endif()

Runtimes/Core/CMakeLists.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -225,12 +225,12 @@ install(EXPORT SwiftCoreTargets
225225
COMPONENT SwiftCore_cmake)
226226
include(CMakePackageConfigHelpers)
227227
configure_package_config_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/interface/SwiftCoreConfig.cmake.in"
228-
"${CMAKE_CURRENT_BINARY_DIR}/cmake/SwiftCoreConfig.cmake"
228+
"${CMAKE_CURRENT_BINARY_DIR}/cmake/SwiftCore/SwiftCoreConfig.cmake"
229229
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/SwiftCore")
230-
write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/cmake/SwiftCoreConfigVersion.cmake"
230+
write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/cmake/SwiftCore/SwiftCoreConfigVersion.cmake"
231231
VERSION "${PROJECT_VERSION}"
232232
COMPATIBILITY ExactVersion)
233233
install(FILES
234-
"${CMAKE_CURRENT_BINARY_DIR}/cmake/SwiftCoreConfig.cmake"
235-
"${CMAKE_CURRENT_BINARY_DIR}/cmake/SwiftCoreConfigVersion.cmake"
234+
"${CMAKE_CURRENT_BINARY_DIR}/cmake/SwiftCore/SwiftCoreConfig.cmake"
235+
"${CMAKE_CURRENT_BINARY_DIR}/cmake/SwiftCore/SwiftCoreConfigVersion.cmake"
236236
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/SwiftCore")

Runtimes/Core/cmake/interface/SwiftCoreConfig.cmake.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
@PACKAGE_INIT@
2-
include("${CMAKE_CURRENT_LIST_DIR}/SwiftCore/SwiftCoreTargets.cmake")
2+
include("${CMAKE_CURRENT_LIST_DIR}/SwiftCoreTargets.cmake")
33

44
set(SwiftCore_ENABLE_LIBRARY_EVOLUTION @SwiftCore_ENABLE_LIBRARY_EVOLUTION@)
55

Runtimes/Resync.cmake

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,3 +127,22 @@ copy_files(public/Platform Overlay/Windows/CRT
127127

128128
# TODO: Add source directories for the platform overlays, supplemental
129129
# libraries, and test support libraries.
130+
131+
# Supplemental Libraries
132+
133+
# Copy StringProcessing, RegexParser, RegexBuilder
134+
if(NOT DEFINED StringProcessing_ROOT_DIR)
135+
find_path(StringProcessing_ROOT_DIR
136+
"swift-experimental-string-processing/Package.swift"
137+
HINTS "${CMAKE_CURRENT_LIST_DIR}/../../")
138+
endif()
139+
message(STATUS "String Processing Root: ${StringProcessing_ROOT_DIR}")
140+
141+
copy_library_sources(_RegexParser "Sources" "Supplemental/StringProcessing"
142+
ROOT "${StringProcessing_ROOT_DIR}/swift-experimental-string-processing")
143+
copy_library_sources(_StringProcessing "Sources" "Supplemental/StringProcessing"
144+
ROOT "${StringProcessing_ROOT_DIR}/swift-experimental-string-processing")
145+
copy_library_sources(_CUnicode "Sources" "Supplemental/StringProcessing/_StringProcessing"
146+
ROOT "${StringProcessing_ROOT_DIR}/swift-experimental-string-processing")
147+
copy_library_sources(RegexBuilder "Sources" "Supplemental/StringProcessing"
148+
ROOT "${StringProcessing_ROOT_DIR}/swift-experimental-string-processing")
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
cmake_minimum_required(VERSION 3.29)
2+
3+
set(CMAKE_POSITION_INDEPENDENT_CODE YES)
4+
5+
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/../cmake/modules")
6+
7+
if($ENV{BUILD_NUMBER})
8+
math(EXPR BUILD_NUMBER "$ENV{BUILD_NUMBER} % 65535")
9+
set(BUILD_NUMBER ".${BUILD_NUMBER}")
10+
endif()
11+
project(SwiftStringProcessing
12+
LANGUAGES Swift C
13+
VERSION 6.1.0${BUILD_NUMBER})
14+
15+
if(NOT PROJECT_IS_TOP_LEVEL)
16+
message(FATAL_ERROR "Swift StringProcessing must build as a standalone project")
17+
endif()
18+
19+
set(${PROJECT_NAME}_SWIFTC_SOURCE_DIR
20+
"${PROJECT_SOURCE_DIR}/../../../"
21+
CACHE FILEPATH "Path to the root source directory of the Swift compiler")
22+
23+
find_package(SwiftCore)
24+
25+
include(AvailabilityMacros)
26+
27+
add_compile_options(
28+
$<$<COMPILE_LANGUAGE:Swift>:-explicit-module-build>
29+
$<$<COMPILE_LANGUAGE:Swift>:-nostdlibimport>
30+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-Xfrontend -disable-implicit-string-processing-module-import>")
31+
32+
add_subdirectory(_RegexParser)
33+
add_subdirectory(_StringProcessing)
34+
add_subdirectory(RegexBuilder)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
add_library(swiftRegexBuilder
2+
CharacterClass.swift
3+
Anchor.swift
4+
Builder.swift
5+
Algorithms.swift
6+
Variadics.swift
7+
DSL.swift)
8+
9+
set_target_properties(swiftRegexBuilder PROPERTIES
10+
Swift_MODULE_NAME RegexBuilder)
11+
12+
target_link_libraries(swiftRegexBuilder PRIVATE
13+
swift_StringProcessing
14+
swiftCore)
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
add_library(swift_RegexParser
2+
Regex/TreeProtocols.swift
3+
Regex/Parse/DelimiterLexing.swift
4+
Regex/Parse/Source.swift
5+
Regex/Parse/CharacterPropertyClassification.swift
6+
Regex/Parse/LexicalAnalysis.swift
7+
Regex/Parse/SyntaxOptions.swift
8+
Regex/Parse/CaptureList.swift
9+
Regex/Parse/CompilerInterface.swift
10+
Regex/Parse/CaptureStructure.swift
11+
Regex/Parse/Parse.swift
12+
Regex/Parse/SourceLocation.swift
13+
Regex/Parse/Diagnostics.swift
14+
Regex/Parse/Sema.swift
15+
Regex/Printing/RenderRanges.swift
16+
Regex/Printing/PrettyPrinter.swift
17+
Regex/Printing/PrintAsCanonical.swift
18+
Regex/Printing/DumpAST.swift
19+
Regex/AST/ASTAction.swift
20+
Regex/AST/AST.swift
21+
Regex/AST/CustomCharClass.swift
22+
Regex/AST/Quantification.swift
23+
Regex/AST/Conditional.swift
24+
Regex/AST/MatchingOptions.swift
25+
Regex/AST/ASTProtocols.swift
26+
Regex/AST/Group.swift
27+
Regex/AST/Atom.swift
28+
Utility/TypeConstruction.swift
29+
Utility/Misc.swift
30+
Utility/AllScalars.swift
31+
Utility/Errors.swift
32+
Utility/MissingUnicode.swift)
33+
34+
target_link_libraries(swift_RegexParser PRIVATE swiftCore)
35+
36+
set_target_properties(swift_RegexParser PROPERTIES
37+
Swift_MODULE_NAME _RegexParser)
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
add_library(swift_StringProcessing
2+
_CUnicode/UnicodeData.c
3+
_CUnicode/UnicodeScalarProps.c
4+
_CharacterClassModel.swift
5+
Executor.swift
6+
Capture.swift
7+
Unicode/NumberParsing.swift
8+
Unicode/ASCII.swift
9+
Unicode/CharacterProps.swift
10+
Unicode/Transcoding.swift
11+
Unicode/ScalarProps.swift
12+
Unicode/Comparison.swift
13+
Unicode/NecessaryEvils.swift
14+
Unicode/Validation.swift
15+
Unicode/UCD.swift
16+
Unicode/NFC.swift
17+
Unicode/Encodings.swift
18+
Unicode/Formatting.swift
19+
Unicode/WordBreaking.swift
20+
Unicode/Decoding.swift
21+
Unicode/CaseConversion.swift
22+
Algorithms/Matching/FirstMatch.swift
23+
Algorithms/Matching/MatchingCollectionSearcher.swift
24+
Algorithms/Matching/MatchResult.swift
25+
Algorithms/Matching/MatchReplace.swift
26+
Algorithms/Matching/Matches.swift
27+
Algorithms/Algorithms/FirstRange.swift
28+
Algorithms/Algorithms/Contains.swift
29+
Algorithms/Algorithms/Split.swift
30+
Algorithms/Algorithms/Trim.swift
31+
Algorithms/Algorithms/Ranges.swift
32+
Algorithms/Algorithms/StartsWith.swift
33+
Algorithms/Algorithms/Replace.swift
34+
Algorithms/Algorithms/SubstringSearcher.swift
35+
Algorithms/Searchers/CollectionSearcher.swift
36+
Algorithms/Searchers/ZSearcher.swift
37+
Algorithms/Consumers/CollectionConsumer.swift
38+
Algorithms/Consumers/FixedPatternConsumer.swift
39+
Regex/Options.swift
40+
Regex/Match.swift
41+
Regex/CustomComponents.swift
42+
Regex/Core.swift
43+
Regex/ASTConversion.swift
44+
Regex/DSLTree.swift
45+
Regex/AnyRegexOutput.swift
46+
LiteralPrinter.swift
47+
MatchingOptions.swift
48+
Compiler.swift
49+
ConsumerInterface.swift
50+
PrintAsPattern.swift
51+
Engine/MEBuiltins.swift
52+
Engine/Processor.swift
53+
Engine/MEProgram.swift
54+
Engine/MEQuantify.swift
55+
Engine/InstPayload.swift
56+
Engine/Backtracking.swift
57+
Engine/Instruction.swift
58+
Engine/Registers.swift
59+
Engine/MEBuilder.swift
60+
Engine/Structuralize.swift
61+
Engine/Tracing.swift
62+
Engine/Metrics.swift
63+
Engine/MECapture.swift
64+
ByteCodeGen.swift
65+
Utility/AsciiBitset.swift
66+
Utility/Traced.swift
67+
Utility/TypedIndex.swift
68+
Utility/Misc.swift
69+
Utility/TypedInt.swift
70+
Utility/Protocols.swift
71+
Utility/TypeVerification.swift
72+
Utility/RegexFactory.swift
73+
Utility/ASTBuilder.swift)
74+
75+
set_target_properties(swift_StringProcessing PROPERTIES
76+
Swift_MODULE_NAME _StringProcessing)
77+
78+
target_link_libraries(swift_StringProcessing PRIVATE
79+
swift_RegexParser
80+
swiftCore)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
file(STRINGS "${${PROJECT_NAME}_SWIFTC_SOURCE_DIR}/utils/availability-macros.def" availability_defs)
2+
list(FILTER availability_defs EXCLUDE REGEX "^\\s*(#.*)?$")
3+
foreach(def ${availability_defs})
4+
add_compile_options("$<$<COMPILE_LANGUAGE:Swift>:SHELL:-Xfrontend -define-availability -Xfrontend \"${def}\">")
5+
endforeach()

0 commit comments

Comments
 (0)