Skip to content

Commit 3070675

Browse files
committed
cmake
1 parent c2dc3e9 commit 3070675

File tree

5 files changed

+60
-6
lines changed

5 files changed

+60
-6
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,7 @@ xcuserdata/
66
.swiftpm
77
build
88
.vscode
9+
10+
CMakeCache.txt
11+
CMakeFiles
12+
Package.resolved

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ find_package(dispatch QUIET)
2727
find_package(Foundation QUIET)
2828
find_package(Threads QUIET)
2929
find_package(SQLite3 REQUIRED)
30+
find_package(SwiftCollections REQUIRED)
3031

3132
add_subdirectory(Sources)
3233
add_subdirectory(cmake/modules)

Sources/TSCBasic/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,14 @@ add_library(TSCBasic
4848
Thread.swift
4949
Tuple.swift
5050
misc.swift)
51-
51+
5252
target_compile_options(TSCBasic PUBLIC
5353
# Don't use GNU strerror_r on Android.
5454
"$<$<PLATFORM_ID:Android>:SHELL:-Xcc -U_GNU_SOURCE>"
5555
# Ignore secure function warnings on Windows.
5656
"$<$<PLATFORM_ID:Windows>:SHELL:-Xcc -D_CRT_SECURE_NO_WARNINGS>")
5757
target_link_libraries(TSCBasic PUBLIC
58-
OrderedCollections
58+
SwiftCollections::OrderedCollections
5959
TSCLibc)
6060
target_link_libraries(TSCBasic PRIVATE
6161
TSCclibc)

Sources/TSCUtility/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ add_library(TSCUtility
4646
misc.swift
4747
)
4848
target_link_libraries(TSCUtility PUBLIC
49-
OrderedCollections
49+
SwiftCollections::OrderedCollections
5050
TSCBasic)
5151
target_link_libraries(TSCUtility PRIVATE
5252
TSCclibc

Utilities/build-script-helper.py

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
import sys
2626
import errno
2727

28+
g_macos_deployment_target = '10.10'
29+
2830
def note(message):
2931
print("--- %s: note: %s" % (os.path.basename(sys.argv[0]), message))
3032
sys.stdout.flush()
@@ -71,6 +73,11 @@ def main():
7173
""")
7274
subparsers = parser.add_subparsers(dest='command')
7375

76+
# clean
77+
parser_clean = subparsers.add_parser("clean", help="cleans build artifacts")
78+
parser_clean.set_defaults(func=clean)
79+
add_global_args(parser_clean)
80+
7481
# build
7582
parser_build = subparsers.add_parser("build", help="builds TSC using CMake")
7683
parser_build.set_defaults(func=build)
@@ -120,6 +127,7 @@ def parse_global_args(args):
120127
"""Parses and cleans arguments necessary for all actions."""
121128
args.build_dir = os.path.abspath(args.build_dir)
122129
args.project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
130+
args.swift_collections_source_dir = os.path.join(args.project_root, "..", "swift-collections")
123131

124132
if platform.system() == 'Darwin':
125133
args.sysroot = call_output(["xcrun", "--sdk", "macosx", "--show-sdk-path"], verbose=args.verbose)
@@ -133,6 +141,7 @@ def parse_build_args(args):
133141
args.swiftc_path = get_swiftc_path(args)
134142
args.cmake_path = get_cmake_path(args)
135143
args.ninja_path = get_ninja_path(args)
144+
args.target_dir = os.path.join(args.build_dir, get_build_target(args))
136145

137146
def get_swiftc_path(args):
138147
"""Returns the path to the Swift compiler."""
@@ -180,14 +189,38 @@ def get_ninja_path(args):
180189
else:
181190
return call_output(["which", "ninja"], verbose=args.verbose)
182191

192+
def get_build_target(args, cross_compile=False):
193+
"""Returns the target-triple of the current machine or for cross-compilation."""
194+
try:
195+
command = [args.swiftc_path, '-print-target-info']
196+
if cross_compile:
197+
cross_compile_json = json.load(open(args.cross_compile_config))
198+
command += ['-target', cross_compile_json["target"]]
199+
target_info_json = subprocess.check_output(command,
200+
stderr=subprocess.PIPE, universal_newlines=True).strip()
201+
args.target_info = json.loads(target_info_json)
202+
return args.target_info["target"]["unversionedTriple"]
203+
except Exception as e:
204+
# Temporary fallback for Darwin.
205+
if platform.system() == 'Darwin':
206+
return 'x86_64-apple-macosx'
207+
else:
208+
error(str(e))
209+
183210
# -----------------------------------------------------------
184211
# Actions
185212
# -----------------------------------------------------------
186213

187214
def build(args):
188215
parse_build_args(args)
216+
build_swift_collections(args)
189217
build_tsc(args)
190218

219+
def clean(args):
220+
parse_global_args(args)
221+
222+
call(["rm", "-rf", args.build_dir], verbose=args.verbose)
223+
191224
# -----------------------------------------------------------
192225
# Build functions
193226
# -----------------------------------------------------------
@@ -222,11 +255,27 @@ def build_with_cmake(args, cmake_args, source_path, build_dir):
222255

223256
call(ninja_cmd, cwd=build_dir, verbose=args.verbose)
224257

225-
def build_tsc(args):
258+
def build_swift_collections(args):
259+
note("Building swift-collections")
260+
args.swift_collections_build_dir = os.path.join(args.target_dir, "swift-collections")
261+
226262
cmake_flags = []
227263
if platform.system() == 'Darwin':
228-
cmake_flags.append("-DCMAKE_C_FLAGS=-target x86_64-apple-macosx10.10")
229-
cmake_flags.append("-DCMAKE_OSX_DEPLOYMENT_TARGET=10.10")
264+
cmake_flags.append("-DCMAKE_C_FLAGS=-target %s%s" % (get_build_target(args), g_macos_deployment_target))
265+
cmake_flags.append("-DCMAKE_OSX_DEPLOYMENT_TARGET=%s" % g_macos_deployment_target)
266+
267+
build_with_cmake(args, cmake_flags, args.swift_collections_source_dir, args.swift_collections_build_dir)
268+
269+
270+
def build_tsc(args):
271+
note("Building TSC")
272+
273+
cmake_flags = [
274+
"-DSwiftCollections_DIR=" + os.path.join(args.swift_collections_build_dir, "cmake/modules"),
275+
]
276+
if platform.system() == 'Darwin':
277+
cmake_flags.append("-DCMAKE_C_FLAGS=-target %s%s" % (get_build_target(args), g_macos_deployment_target))
278+
cmake_flags.append("-DCMAKE_OSX_DEPLOYMENT_TARGET=%s" % g_macos_deployment_target)
230279

231280
build_with_cmake(args, cmake_flags, args.project_root, args.build_dir)
232281

0 commit comments

Comments
 (0)