Skip to content

Commit a78715b

Browse files
authored
Merge pull request #289 from compnerd/cmake-3.15.1
build: port to new Swift support
2 parents 4fa39ed + ca7dfe0 commit a78715b

File tree

2 files changed

+60
-348
lines changed

2 files changed

+60
-348
lines changed

CMakeLists.txt

Lines changed: 60 additions & 123 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,62 @@
11

2-
cmake_minimum_required(VERSION 3.4.3)
2+
cmake_minimum_required(VERSION 3.15.1)
33

4-
list(APPEND CMAKE_MODULE_PATH
5-
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
4+
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules)
65

7-
project(XCTest
8-
LANGUAGES
9-
C)
10-
11-
enable_testing()
12-
option(ENABLE_TESTING "Build tests" YES)
6+
project(XCTest LANGUAGES Swift)
137

148
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
159

16-
option(XCTEST_PATH_TO_LIBDISPATCH_SOURCE "Path to libdispatch source" "")
17-
option(XCTEST_PATH_TO_LIBDISPATCH_BUILD "Path to libdispatch build" "")
10+
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
11+
find_package(dispatch CONFIG REQUIRED)
12+
find_package(Foundation CONFIG REQUIRED)
13+
endif()
14+
15+
include(SwiftSupport)
16+
include(GNUInstallDirs)
17+
18+
add_library(XCTest
19+
Sources/XCTest/Private/WallClockTimeMetric.swift
20+
Sources/XCTest/Private/TestListing.swift
21+
Sources/XCTest/Private/XCTestCaseSuite.swift
22+
Sources/XCTest/Private/TestFiltering.swift
23+
Sources/XCTest/Private/XCTestInternalObservation.swift
24+
Sources/XCTest/Private/ObjectWrapper.swift
25+
Sources/XCTest/Private/PerformanceMeter.swift
26+
Sources/XCTest/Private/PrintObserver.swift
27+
Sources/XCTest/Private/ArgumentParser.swift
28+
Sources/XCTest/Private/SourceLocation.swift
29+
Sources/XCTest/Private/WaiterManager.swift
30+
Sources/XCTest/Private/IgnoredErrors.swift
31+
Sources/XCTest/Public/XCTestRun.swift
32+
Sources/XCTest/Public/XCTestMain.swift
33+
Sources/XCTest/Public/XCTestCase.swift
34+
Sources/XCTest/Public/XCTestSuite.swift
35+
Sources/XCTest/Public/XCTestSuiteRun.swift
36+
Sources/XCTest/Public/XCTestErrors.swift
37+
Sources/XCTest/Public/XCTestObservation.swift
38+
Sources/XCTest/Public/XCTestCaseRun.swift
39+
Sources/XCTest/Public/XCAbstractTest.swift
40+
Sources/XCTest/Public/XCTestObservationCenter.swift
41+
Sources/XCTest/Public/XCTestCase+Performance.swift
42+
Sources/XCTest/Public/XCTAssert.swift
43+
Sources/XCTest/Public/Asynchronous/XCTNSNotificationExpectation.swift
44+
Sources/XCTest/Public/Asynchronous/XCTNSPredicateExpectation.swift
45+
Sources/XCTest/Public/Asynchronous/XCTWaiter+Validation.swift
46+
Sources/XCTest/Public/Asynchronous/XCTWaiter.swift
47+
Sources/XCTest/Public/Asynchronous/XCTestCase+Asynchronous.swift
48+
Sources/XCTest/Public/Asynchronous/XCTestExpectation.swift)
49+
target_link_libraries(XCTest PRIVATE
50+
dispatch
51+
Foundation)
52+
set_target_properties(XCTest PROPERTIES
53+
Swift_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/swift
54+
INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_BINARY_DIR}/swift)
1855

19-
option(XCTEST_PATH_TO_FOUNDATION_BUILD "Path to Foundation build" "")
2056

2157
if(ENABLE_TESTING)
58+
enable_testing()
59+
2260
find_package(LLVM CONFIG)
2361
if(LLVM_FOUND)
2462
message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
@@ -31,91 +69,16 @@ if(ENABLE_TESTING)
3169
elseif(NOT DEFINED LLVM_MAIN_SRC_DIR OR NOT EXISTS ${LLVM_MAIN_SRC_DIR})
3270
message(SEND_ERROR "LLVM not found and LLVM_MAIN_SRC_DIR not defined - required for testing")
3371
endif()
34-
endif()
35-
36-
include(SwiftSupport)
37-
include(GNUInstallDirs)
38-
39-
if(CMAKE_SYSTEM_NAME STREQUAL Windows)
40-
set(WORKAROUND_SR9138 -Xlinker;-ignore:4217)
41-
set(WORKAROUND_SR9995 -Xlinker;-nodefaultlib:libcmt)
42-
endif()
4372

44-
add_swift_library(XCTest
45-
MODULE_NAME
46-
XCTest
47-
MODULE_LINK_NAME
48-
XCTest
49-
MODULE_PATH
50-
${CMAKE_CURRENT_BINARY_DIR}/swift/XCTest.swiftmodule
51-
LINK_FLAGS
52-
-L${XCTEST_PATH_TO_LIBDISPATCH_BUILD}
53-
-L${XCTEST_PATH_TO_LIBDISPATCH_BUILD}/bin
54-
-L${XCTEST_PATH_TO_LIBDISPATCH_BUILD}/src -ldispatch
55-
-L${XCTEST_PATH_TO_LIBDISPATCH_BUILD}/src/BlocksRuntime
56-
-L${XCTEST_PATH_TO_FOUNDATION_BUILD} -lFoundation
57-
58-
# compatibility with Foundation build_script.py
59-
-L${XCTEST_PATH_TO_FOUNDATION_BUILD}/Foundation
60-
61-
${WORKAROUND_SR9138}
62-
${WORKAROUND_SR9995}
63-
SOURCES
64-
Sources/XCTest/Private/WallClockTimeMetric.swift
65-
Sources/XCTest/Private/TestListing.swift
66-
Sources/XCTest/Private/XCTestCaseSuite.swift
67-
Sources/XCTest/Private/TestFiltering.swift
68-
Sources/XCTest/Private/XCTestInternalObservation.swift
69-
Sources/XCTest/Private/ObjectWrapper.swift
70-
Sources/XCTest/Private/PerformanceMeter.swift
71-
Sources/XCTest/Private/PrintObserver.swift
72-
Sources/XCTest/Private/ArgumentParser.swift
73-
Sources/XCTest/Private/SourceLocation.swift
74-
Sources/XCTest/Private/WaiterManager.swift
75-
Sources/XCTest/Private/IgnoredErrors.swift
76-
Sources/XCTest/Public/XCTestRun.swift
77-
Sources/XCTest/Public/XCTestMain.swift
78-
Sources/XCTest/Public/XCTestCase.swift
79-
Sources/XCTest/Public/XCTestSuite.swift
80-
Sources/XCTest/Public/XCTestSuiteRun.swift
81-
Sources/XCTest/Public/XCTestErrors.swift
82-
Sources/XCTest/Public/XCTestObservation.swift
83-
Sources/XCTest/Public/XCTestCaseRun.swift
84-
Sources/XCTest/Public/XCAbstractTest.swift
85-
Sources/XCTest/Public/XCTestObservationCenter.swift
86-
Sources/XCTest/Public/XCTestCase+Performance.swift
87-
Sources/XCTest/Public/XCTAssert.swift
88-
Sources/XCTest/Public/Asynchronous/XCTNSNotificationExpectation.swift
89-
Sources/XCTest/Public/Asynchronous/XCTNSPredicateExpectation.swift
90-
Sources/XCTest/Public/Asynchronous/XCTWaiter+Validation.swift
91-
Sources/XCTest/Public/Asynchronous/XCTWaiter.swift
92-
Sources/XCTest/Public/Asynchronous/XCTestCase+Asynchronous.swift
93-
Sources/XCTest/Public/Asynchronous/XCTestExpectation.swift
94-
TARGET
95-
${CMAKE_C_COMPILER_TARGET}
96-
SWIFT_FLAGS
97-
$<$<NOT:$<CONFIG:Debug>>:-O>
98-
99-
-I${XCTEST_PATH_TO_LIBDISPATCH_SOURCE}
100-
-I${XCTEST_PATH_TO_LIBDISPATCH_BUILD}/src/swift
101-
-I${XCTEST_PATH_TO_LIBDISPATCH_BUILD}/src/swift/swift
102-
-Xcc -fblocks
103-
104-
-I${XCTEST_PATH_TO_FOUNDATION_BUILD}/swift
105-
-Fsystem ${XCTEST_PATH_TO_FOUNDATION_BUILD}
106-
107-
# compatibility with Foundation build_script.py
108-
-I${XCTEST_PATH_TO_FOUNDATION_BUILD}/Foundation
109-
-I${XCTEST_PATH_TO_FOUNDATION_BUILD}/Foundation/usr/lib/swift)
110-
111-
if(ENABLE_TESTING)
11273
if(EXISTS ${LLVM_MAIN_SRC_DIR}/utils/lit/lit.py)
11374
set(LIT_COMMAND "${LLVM_MAIN_SRC_DIR}/utils/lit/lit.py"
11475
CACHE STRING "command used to spawn llvm-lit")
11576
else()
11677
find_program(LIT_COMMAND NAMES llvm-lit lit.py lit)
11778
endif()
79+
11880
find_package(PythonInterp)
81+
11982
add_custom_target(check-xctest
12083
COMMAND
12184
${CMAKE_COMMAND} -E env
@@ -133,39 +96,13 @@ if(ENABLE_TESTING)
13396
USES_TERMINAL)
13497
endif()
13598

136-
string(TOLOWER ${CMAKE_SYSTEM_NAME} swift_os)
137-
get_swift_host_arch(swift_host_arch)
13899

100+
get_swift_host_arch(swift_arch)
101+
install(TARGETS XCTest
102+
ARCHIVE DESTINATION lib/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>
103+
LIBRARY DESTINATION lib/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>
104+
RUNTIME DESTINATION bin)
139105
install(FILES
140-
${CMAKE_CURRENT_BINARY_DIR}/swift/XCTest.swiftdoc
141-
${CMAKE_CURRENT_BINARY_DIR}/swift/XCTest.swiftmodule
142-
DESTINATION
143-
${CMAKE_INSTALL_FULL_LIBDIR}/swift/${swift_os}/${swift_host_arch})
144-
145-
if(BUILD_SHARED_LIBS)
146-
set(library_kind SHARED)
147-
set(swift_dir swift)
148-
else()
149-
set(library_kind STATIC)
150-
set(swift_dir swift_static)
151-
endif()
152-
153-
set(XCTest_OUTPUT_FILE
154-
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_${library_kind}_LIBRARY_PREFIX}XCTest${CMAKE_${library_kind}_LIBRARY_SUFFIX})
155-
156-
if(CMAKE_SYSTEM_NAME STREQUAL Windows AND BUILD_SHARED_LIBS)
157-
install(FILES
158-
${XCTest_OUTPUT_FILE}
159-
DESTINATION
160-
${CMAKE_INSTALL_FULL_BINDIR})
161-
install(FILES
162-
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_IMPORT_LIBRARY_PREFIX}XCTest${CMAKE_IMPORT_LIBRARY_SUFFIX}
163-
DESTINATION
164-
${CMAKE_INSTALL_FULL_LIBDIR}/${swift_dir}/${swift_os})
165-
else()
166-
# NOTE(compnerd) stage a compatibility copy in the swift resource dir
167-
install(FILES
168-
${XCTest_OUTPUT_FILE}
169-
DESTINATION
170-
${CMAKE_INSTALL_FULL_LIBDIR}/${swift_dir}/${swift_os})
171-
endif()
106+
${CMAKE_CURRENT_BINARY_DIR}/swift/XCTest.swiftdoc
107+
${CMAKE_CURRENT_BINARY_DIR}/swift/XCTest.swiftmodule
108+
DESTINATION lib/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>/${swift_arch})

0 commit comments

Comments
 (0)