blob: 16cd3eda313181408e4316a8f894845ef3b4b745 [file] [log] [blame]
cmake_minimum_required(VERSION 3.4.3)
list(APPEND CMAKE_MODULE_PATH
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
project(XCTest
LANGUAGES
C)
enable_testing()
option(ENABLE_TESTING "Build tests" YES)
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
option(XCTEST_PATH_TO_LIBDISPATCH_SOURCE "Path to libdispatch source" "")
option(XCTEST_PATH_TO_LIBDISPATCH_BUILD "Path to libdispatch build" "")
option(XCTEST_PATH_TO_FOUNDATION_BUILD "Path to Foundation build" "")
if(ENABLE_TESTING)
find_package(LLVM CONFIG)
if(LLVM_FOUND)
message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
include(${LLVM_DIR}/LLVMConfig.cmake)
list(APPEND CMAKE_MODULE_PATH ${LLVM_DIR})
include(AddLLVM)
elseif(NOT DEFINED LLVM_MAIN_SRC_DIR OR NOT EXISTS ${LLVM_MAIN_SRC_DIR})
message(SEND_ERROR "LLVM not found and LLVM_MAIN_SRC_DIR not defined - required for testing")
endif()
endif()
include(SwiftSupport)
include(GNUInstallDirs)
if(CMAKE_SYSTEM_NAME STREQUAL Windows)
set(WORKAROUND_SR9138 -Xlinker;-ignore:4217)
set(WORKAROUND_SR9995 -Xlinker;-nodefaultlib:libcmt)
endif()
add_swift_library(XCTest
MODULE_NAME
XCTest
MODULE_LINK_NAME
XCTest
MODULE_PATH
${CMAKE_CURRENT_BINARY_DIR}/swift/XCTest.swiftmodule
LINK_FLAGS
-L${XCTEST_PATH_TO_LIBDISPATCH_BUILD}
-L${XCTEST_PATH_TO_LIBDISPATCH_BUILD}/bin
-L${XCTEST_PATH_TO_LIBDISPATCH_BUILD}/src -ldispatch
-L${XCTEST_PATH_TO_LIBDISPATCH_BUILD}/src/BlocksRuntime
-L${XCTEST_PATH_TO_FOUNDATION_BUILD} -lFoundation
# compatibility with Foundation build_script.py
-L${XCTEST_PATH_TO_FOUNDATION_BUILD}/Foundation
${WORKAROUND_SR9138}
${WORKAROUND_SR9995}
SOURCES
Sources/XCTest/Private/WallClockTimeMetric.swift
Sources/XCTest/Private/TestListing.swift
Sources/XCTest/Private/XCTestCaseSuite.swift
Sources/XCTest/Private/TestFiltering.swift
Sources/XCTest/Private/XCTestInternalObservation.swift
Sources/XCTest/Private/ObjectWrapper.swift
Sources/XCTest/Private/PerformanceMeter.swift
Sources/XCTest/Private/PrintObserver.swift
Sources/XCTest/Private/ArgumentParser.swift
Sources/XCTest/Private/SourceLocation.swift
Sources/XCTest/Private/WaiterManager.swift
Sources/XCTest/Private/IgnoredErrors.swift
Sources/XCTest/Public/XCTestRun.swift
Sources/XCTest/Public/XCTestMain.swift
Sources/XCTest/Public/XCTestCase.swift
Sources/XCTest/Public/XCTestSuite.swift
Sources/XCTest/Public/XCTestSuiteRun.swift
Sources/XCTest/Public/XCTestErrors.swift
Sources/XCTest/Public/XCTestObservation.swift
Sources/XCTest/Public/XCTestCaseRun.swift
Sources/XCTest/Public/XCAbstractTest.swift
Sources/XCTest/Public/XCTestObservationCenter.swift
Sources/XCTest/Public/XCTestCase+Performance.swift
Sources/XCTest/Public/XCTAssert.swift
Sources/XCTest/Public/Asynchronous/XCTNSNotificationExpectation.swift
Sources/XCTest/Public/Asynchronous/XCTNSPredicateExpectation.swift
Sources/XCTest/Public/Asynchronous/XCTWaiter+Validation.swift
Sources/XCTest/Public/Asynchronous/XCTWaiter.swift
Sources/XCTest/Public/Asynchronous/XCTestCase+Asynchronous.swift
Sources/XCTest/Public/Asynchronous/XCTestExpectation.swift
TARGET
${CMAKE_C_COMPILER_TARGET}
SWIFT_FLAGS
$<$<NOT:$<CONFIG:Debug>>:-O>
-I${XCTEST_PATH_TO_LIBDISPATCH_SOURCE}
-I${XCTEST_PATH_TO_LIBDISPATCH_BUILD}/src/swift
-I${XCTEST_PATH_TO_LIBDISPATCH_BUILD}/src/swift/swift
-Xcc -fblocks
-I${XCTEST_PATH_TO_FOUNDATION_BUILD}/swift
-Fsystem ${XCTEST_PATH_TO_FOUNDATION_BUILD}
# compatibility with Foundation build_script.py
-I${XCTEST_PATH_TO_FOUNDATION_BUILD}/Foundation
-I${XCTEST_PATH_TO_FOUNDATION_BUILD}/Foundation/usr/lib/swift)
if(ENABLE_TESTING)
if(EXISTS ${LLVM_MAIN_SRC_DIR}/utils/lit/lit.py)
set(LIT_COMMAND "${LLVM_MAIN_SRC_DIR}/utils/lit/lit.py"
CACHE STRING "command used to spawn llvm-lit")
else()
find_program(LIT_COMMAND NAMES llvm-lit lit.py lit)
endif()
find_package(PythonInterp)
add_custom_target(check-xctest
COMMAND
${CMAKE_COMMAND} -E env
BUILT_PRODUCTS_DIR=${CMAKE_BINARY_DIR}
FOUNDATION_BUILT_PRODUCTS_DIR=${XCTEST_PATH_TO_FOUNDATION_BUILD}
LIBDISPATCH_SRC_DIR=${XCTEST_PATH_TO_LIBDISPATCH_SOURCE}
LIBDISPATCH_BUILD_DIR=${XCTEST_PATH_TO_LIBDISPATCH_BUILD}
LIBDISPATCH_OVERLAY_DIR=${XCTEST_PATH_TO_LIBDISPATCH_BUILD}/src/swift
SWIFT_EXEC=${CMAKE_SWIFT_COMPILER}
${PYTHON_EXECUTABLE} ${LIT_COMMAND} -sv ${CMAKE_SOURCE_DIR}/Tests/Functional
COMMENT
"Running XCTest functional test suite"
DEPENDS
XCTest
USES_TERMINAL)
endif()
string(TOLOWER ${CMAKE_SYSTEM_NAME} swift_os)
get_swift_host_arch(swift_host_arch)
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/swift/XCTest.swiftdoc
${CMAKE_CURRENT_BINARY_DIR}/swift/XCTest.swiftmodule
DESTINATION
${CMAKE_INSTALL_FULL_LIBDIR}/swift/${swift_os}/${swift_host_arch})
if(BUILD_SHARED_LIBS)
set(library_kind SHARED)
set(swift_dir swift)
else()
set(library_kind STATIC)
set(swift_dir swift_static)
endif()
set(XCTest_OUTPUT_FILE
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_${library_kind}_LIBRARY_PREFIX}XCTest${CMAKE_${library_kind}_LIBRARY_SUFFIX})
if(CMAKE_SYSTEM_NAME STREQUAL Windows AND BUILD_SHARED_LIBS)
install(FILES
${XCTest_OUTPUT_FILE}
DESTINATION
${CMAKE_INSTALL_FULL_BINDIR})
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_IMPORT_LIBRARY_PREFIX}XCTest${CMAKE_IMPORT_LIBRARY_SUFFIX}
DESTINATION
${CMAKE_INSTALL_FULL_LIBDIR}/${swift_dir}/${swift_os})
else()
# NOTE(compnerd) stage a compatibility copy in the swift resource dir
install(FILES
${XCTest_OUTPUT_FILE}
DESTINATION
${CMAKE_INSTALL_FULL_LIBDIR}/${swift_dir}/${swift_os})
endif()