Skip to content

Commit

Permalink
build: introduce a CMake based build
Browse files Browse the repository at this point in the history
This enables building DocC as a CMake project. Doing so is motivated by
toolchain build times. By using CMake instead of SPM, we see an overall
reduction of ~7% in the total toolchain build time on Windows.
  • Loading branch information
compnerd committed Nov 19, 2024
1 parent 96bce1c commit 1203551
Show file tree
Hide file tree
Showing 5 changed files with 137 additions and 0 deletions.
24 changes: 24 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#[[
This source file is part of the Swift.org open source project
Copyright (c) 2024 Apple Inc. and the Swift project authors
Licensed under Apache License v2.0 with Runtime Library Exception
See https://swift.org/LICENSE.txt for license information
See https://swift.org/CONTRIBUTORS.txt for Swift project authors
#]]

cmake_minimum_required(VERSION 3.24)

project(SymbolKit
LANGUAGES Swift)

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

set(CMAKE_Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/swift)
set(CMAKE_Swift_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY MultiThreadedDLL)

add_subdirectory(Sources)
add_subdirectory(cmake/modules)
11 changes: 11 additions & 0 deletions Sources/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#[[
This source file is part of the Swift.org open source project
Copyright (c) 2024 Apple Inc. and the Swift project authors
Licensed under Apache License v2.0 with Runtime Library Exception
See https://swift.org/LICENSE.txt for license information
See https://swift.org/CONTRIBUTORS.txt for Swift project authors
#]]

add_subdirectory(SymbolKit)
69 changes: 69 additions & 0 deletions Sources/SymbolKit/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
#[[
This source file is part of the DocC open source project
Copyright (c) 2024 Apple Inc. and the DocC project authors
Licensed under Apache License v2.0 with Runtime Library Exception
See https://swift.org/LICENSE.txt for license information
#]]

add_library(SymbolKit
Mixin/Mixin+Equals.swift
Mixin/Mixin+Hash.swift
Mixin/Mixin.swift
SymbolGraph/AnyScalar.swift
SymbolGraph/LineList/LineList.swift
SymbolGraph/LineList/SourceRange/Position.swift
SymbolGraph/LineList/SourceRange/SourceRange.swift
SymbolGraph/Metadata.swift
SymbolGraph/Module.swift
SymbolGraph/OperatingSystem.swift
SymbolGraph/Platform.swift
SymbolGraph/Relationship/ReferenceLocation.swift
SymbolGraph/Relationship/Relationship.swift
SymbolGraph/Relationship/RelationshipKind.swift
SymbolGraph/Relationship/SourceOrigin.swift
SymbolGraph/Relationship/Swift/GenericConstraints.swift
SymbolGraph/Relationship/Swift/Swift.swift
SymbolGraph/SemanticVersion.swift
SymbolGraph/Symbol/AccessControl.swift
SymbolGraph/Symbol/AlternateDeclarations.swift
SymbolGraph/Symbol/Availability/Availability.swift
SymbolGraph/Symbol/Availability/AvailabilityItem.swift
SymbolGraph/Symbol/Availability/Domain.swift
SymbolGraph/Symbol/DeclarationFragments/DeclarationFragments+Simplify.swift
SymbolGraph/Symbol/DeclarationFragments/DeclarationFragments.swift
SymbolGraph/Symbol/DeclarationFragments/Fragment/Fragment.swift
SymbolGraph/Symbol/DeclarationFragments/Fragment/FragmentKind.swift
SymbolGraph/Symbol/FunctionSignature/FunctionParameter.swift
SymbolGraph/Symbol/FunctionSignature/FunctionSignature.swift
SymbolGraph/Symbol/HTTP/HTTP.swift
SymbolGraph/Symbol/Identifier.swift
SymbolGraph/Symbol/KindIdentifier.swift
SymbolGraph/Symbol/Location.swift
SymbolGraph/Symbol/Mutability.swift
SymbolGraph/Symbol/Names.swift
SymbolGraph/Symbol/OverloadData.swift
SymbolGraph/Symbol/PlistDetails.swift
SymbolGraph/Symbol/SPI.swift
SymbolGraph/Symbol/Snippet.swift
SymbolGraph/Symbol/Swift/Extension.swift
SymbolGraph/Symbol/Swift/GenericConstraint.swift
SymbolGraph/Symbol/Swift/GenericParameter.swift
SymbolGraph/Symbol/Swift/Generics.swift
SymbolGraph/Symbol/Swift/Namespace.swift
SymbolGraph/Symbol/Symbol.swift
SymbolGraph/Symbol/SymbolKind.swift
SymbolGraph/Symbol/ValueConstraints.swift
SymbolGraph/SymbolGraph+Overloads.swift
SymbolGraph/SymbolGraph.swift
UnifiedSymbolGraph/GraphCollector.swift
UnifiedSymbolGraph/UnifiedSymbol+Encodable.swift
UnifiedSymbolGraph/UnifiedSymbol.swift
UnifiedSymbolGraph/UnifiedSymbolGraph+Encodable.swift
UnifiedSymbolGraph/UnifiedSymbolGraph+Overloads.swift
UnifiedSymbolGraph/UnifiedSymbolGraph.swift)
set_target_properties(SymbolKit PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_Swift_MODULE_DIRECTORY})

set_property(GLOBAL APPEND PROPERTY SYMBOLKIT_EXPORTS SymbolKit)
20 changes: 20 additions & 0 deletions cmake/modules/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#[[
This source file is part of the Swift.org open source project
Copyright (c) 2024 Apple Inc. and the Swift project authors
Licensed under Apache License v2.0 with Runtime Library Exception
See https://swift.org/LICENSE.txt for license information
See https://swift.org/CONTRIBUTORS.txt for Swift project authors
#]]

set(SYMBOLKIT_EXPORTS_FILE
${CMAKE_CURRENT_BINARY_DIR}/SymbolKitExports.cmake)
configure_file(SymbolKitConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/SymbolKitConfig.cmake)

get_property(SYMBOLKIT_EXPORTS GLOBAL PROPERTY SYMBOLKIT_EXPORTS)
export(TARGETS ${SYMBOLKIT_EXPORTS}
NAMESPACE DocC::
FILE ${SYMBOLKIT_EXPORTS_FILE}
EXPORT_LINK_INTERFACE_LIBRARIES)
13 changes: 13 additions & 0 deletions cmake/modules/SymbolKitConfig.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#[[
This source file is part of the Swift.org open source project
Copyright (c) 2024 Apple Inc. and the Swift project authors
Licensed under Apache License v2.0 with Runtime Library Exception
See https://swift.org/LICENSE.txt for license information
See https://swift.org/CONTRIBUTORS.txt for Swift project authors
#]]

if(NOT TARGET DocC::SymbolKit)
include("@SYMBOLKIT_EXPORTS_FILE@")
endif()

0 comments on commit 1203551

Please sign in to comment.