Skip to content

Commit a26240c

Browse files
committed
build: add a CMake based build for Windows
Given that swift-package-manager is not currently ready for Windows, this addition makes it possible to build for Windows.
1 parent 57d2a6d commit a26240c

File tree

4 files changed

+75
-0
lines changed

4 files changed

+75
-0
lines changed

CMakeLists.txt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
cmake_minimum_required(VERSION 3.16)
2+
3+
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules)
4+
5+
project(swift-log
6+
LANGUAGES Swift)
7+
8+
set(CMAKE_Swift_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/swift)
9+
10+
include(SwiftSupport)
11+
12+
add_subdirectory(Sources)
13+
14+
export(EXPORT swift-log
15+
NAMESPACE SwiftLog::
16+
FILE swift-log-config.cmake)

Sources/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
add_subdirectory(Logging)

Sources/Logging/CMakeLists.txt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
add_library(Logging
2+
Locks.swift
3+
Logging.swift
4+
LogHandler.swift)
5+
target_compile_options(Logging PRIVATE
6+
"SHELL:$<$<PLATFORM_ID:Windows>:-Xcc -D_CRT_SECURE_NO_WARNINGS>")
7+
set_target_properties(Logging PROPERTIES
8+
INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_Swift_MODULE_DIRECTORY})
9+
10+
11+
install(TARGETS Logging
12+
EXPORT swift-log
13+
ARCHIVE DESTINATION lib/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>
14+
LIBRARY DESTINATION lib/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>
15+
RUNTIME DESTINATION bin)
16+
get_swift_host_arch(swift_arch)
17+
install(FILES
18+
EXPORT swift-log
19+
$<TARGET_PROPERTY:Logging,Swift_MODULE_DIRECTORY>/Logging.swiftdoc
20+
$<TARGET_PROPERTY:Logging,Swift_MODULE_DIRECTORY>/Logging.swiftmodule
21+
DESTINATION lib/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>/${swift_arch})

cmake/modules/SwiftSupport.cmake

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
2+
# Returns the current architecture name in a variable
3+
#
4+
# Usage:
5+
# get_swift_host_arch(result_var_name)
6+
#
7+
# If the current architecture is supported by Swift, sets ${result_var_name}
8+
# with the sanitized host architecture name derived from CMAKE_SYSTEM_PROCESSOR.
9+
function(get_swift_host_arch result_var_name)
10+
if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
11+
set("${result_var_name}" "x86_64" PARENT_SCOPE)
12+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64")
13+
set("${result_var_name}" "aarch64" PARENT_SCOPE)
14+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ppc64")
15+
set("${result_var_name}" "powerpc64" PARENT_SCOPE)
16+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ppc64le")
17+
set("${result_var_name}" "powerpc64le" PARENT_SCOPE)
18+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "s390x")
19+
set("${result_var_name}" "s390x" PARENT_SCOPE)
20+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "armv6l")
21+
set("${result_var_name}" "armv6" PARENT_SCOPE)
22+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "armv7l")
23+
set("${result_var_name}" "armv7" PARENT_SCOPE)
24+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "armv7-a")
25+
set("${result_var_name}" "armv7" PARENT_SCOPE)
26+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "AMD64")
27+
set("${result_var_name}" "x86_64" PARENT_SCOPE)
28+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "IA64")
29+
set("${result_var_name}" "itanium" PARENT_SCOPE)
30+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86")
31+
set("${result_var_name}" "i686" PARENT_SCOPE)
32+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686")
33+
set("${result_var_name}" "i686" PARENT_SCOPE)
34+
else()
35+
message(FATAL_ERROR "Unrecognized architecture on host system: ${CMAKE_SYSTEM_PROCESSOR}")
36+
endif()
37+
endfunction()

0 commit comments

Comments
 (0)