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 Jul 30, 2024
1 parent 4c245d4 commit c3eb369
Show file tree
Hide file tree
Showing 5 changed files with 133 additions and 0 deletions.
23 changes: 23 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#[[
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
#]]

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)
10 changes: 10 additions & 0 deletions Sources/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#[[
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_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/Snippet.swift
SymbolGraph/Symbol/SPI.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)
19 changes: 19 additions & 0 deletions cmake/modules/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#[[
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
#]]

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)
12 changes: 12 additions & 0 deletions cmake/modules/SymbolKitConfig.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#[[
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
#]]

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

0 comments on commit c3eb369

Please sign in to comment.