Skip to content

Commit ce43667

Browse files
compnerdallevato
authored andcommitted
build: add a CMake based build
This adds a CMake based build for supporting platforms where swift-package-manager is not yet ready. This enables building swift-protobuf on Windows.
1 parent 92e46a4 commit ce43667

File tree

6 files changed

+207
-0
lines changed

6 files changed

+207
-0
lines changed

CMakeLists.txt

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
cmake_minimum_required(VERSION 3.16)
2+
project(protobuf
3+
LANGUAGES Swift)
4+
5+
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/modules)
6+
7+
set(CMAKE_Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/swift)
8+
9+
include(SwiftSupport)
10+
11+
add_subdirectory(Sources)

Sources/CMakeLists.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
add_subdirectory(SwiftProtobuf)
2+
add_subdirectory(swiftProtobufPluginLibrary)
3+
add_subdirectory(protoc-gen-swift)

Sources/SwiftProtobuf/CMakeLists.txt

+97
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
add_library(SwiftProtobuf
2+
any.pb.swift
3+
AnyMessageStorage.swift
4+
AnyUnpackError.swift
5+
api.pb.swift
6+
BinaryDecoder.swift
7+
BinaryDecodingError.swift
8+
BinaryDecodingOptions.swift
9+
BinaryDelimited.swift
10+
BinaryEncoder.swift
11+
BinaryEncodingError.swift
12+
BinaryEncodingSizeVisitor.swift
13+
BinaryEncodingVisitor.swift
14+
CustomJSONCodable.swift
15+
Data+Extensions.swift
16+
Decoder.swift
17+
descriptor.pb.swift
18+
DoubleParser.swift
19+
duration.pb.swift
20+
empty.pb.swift
21+
Enum.swift
22+
ExtensibleMessage.swift
23+
ExtensionFields.swift
24+
ExtensionFieldValueSet.swift
25+
ExtensionMap.swift
26+
FieldTag.swift
27+
FieldTypes.swift
28+
field_mask.pb.swift
29+
Google_Protobuf_Any+Extensions.swift
30+
Google_Protobuf_Any+Registry.swift
31+
Google_Protobuf_Duration+Extensions.swift
32+
Google_Protobuf_FieldMask+Extensions.swift
33+
Google_Protobuf_ListValue+Extensions.swift
34+
Google_Protobuf_Struct+Extensions.swift
35+
Google_Protobuf_Timestamp+Extensions.swift
36+
Google_Protobuf_Value+Extensions.swift
37+
Google_Protobuf_Wrappers+Extensions.swift
38+
HashVisitor.swift
39+
Internal.swift
40+
JSONDecoder.swift
41+
JSONDecodingError.swift
42+
JSONDecodingOptions.swift
43+
JSONEncoder.swift
44+
JSONEncodingError.swift
45+
JSONEncodingOptions.swift
46+
JSONEncodingVisitor.swift
47+
JSONMapEncodingVisitor.swift
48+
JSONScanner.swift
49+
MathUtils.swift
50+
Message+AnyAdditions.swift
51+
Message+BinaryAdditions.swift
52+
Message+JSONAdditions.swift
53+
Message+JSONArrayAdditions.swift
54+
Message+TextFormatAdditions.swift
55+
Message.swift
56+
MessageExtension.swift
57+
NameMap.swift
58+
ProtobufAPIVersionCheck.swift
59+
ProtobufMap.swift
60+
ProtoNameProviding.swift
61+
SelectiveVisitor.swift
62+
SimpleExtensionMap.swift
63+
source_context.pb.swift
64+
StringUtils.swift
65+
struct.pb.swift
66+
TextFormatDecoder.swift
67+
TextFormatDecodingError.swift
68+
TextFormatEncoder.swift
69+
TextFormatEncodingOptions.swift
70+
TextFormatEncodingVisitor.swift
71+
TextFormatScanner.swift
72+
timestamp.pb.swift
73+
TimeUtils.swift
74+
type.pb.swift
75+
UnknownStorage.swift
76+
UnsafeBufferPointer+Shims.swift
77+
UnsafeRawPointer+Shims.swift
78+
Varint.swift
79+
Version.swift
80+
Visitor.swift
81+
WireFormat.swift
82+
wrappers.pb.swift
83+
ZigZag.swift)
84+
set_target_properties(SwiftProtobuf PROPERTIES
85+
INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_Swift_MODULE_DIRECTORY})
86+
87+
88+
install(TARGETS SwiftProtobuf
89+
ARCHIVE DESTINATION lib/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>
90+
LIBRARY DESTINATION lib/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>
91+
RUNTIME DESTINATION bin)
92+
get_swift_host_arch(swift_arch)
93+
install(FILES
94+
$<TARGET_PROPERTY:SwiftProtobuf,Swift_MODULE_DIRECTORY>/SwiftProtobuf.swiftdoc
95+
$<TARGET_PROPERTY:SwiftProtobuf,Swift_MODULE_DIRECTORY>/SwiftProtobuf.swiftmodule
96+
DESTINATION lib/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>/${swift_arch})
97+
set_property(GLOBAL APPEND PROPERTY Protobuf_EXPORTS SwiftProtobuf)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
add_library(SwiftProtobufPluginLibrary
2+
Array+Extensions.swift
3+
CodePrinter.swift
4+
Descriptor+Extensions.swift
5+
Descriptor.swift
6+
FieldNumbers.swift
7+
Google_Protobuf_Compiler_CodeGeneratorResponse+Extensions.swift
8+
Google_Protobuf_SourceCodeInfo+Extensions.swift
9+
NamingUtils.swift
10+
plugin.pb.swift
11+
ProtoFileToModuleMappings.swift
12+
ProvidesLocationPath.swift
13+
ProvidesSourceCodeLocation.swift
14+
SwiftLanguage.swift
15+
SwiftProtobufInfo.swift
16+
SwiftProtobufNamer.swift
17+
swift_protobuf_module_mappings.pb.swift
18+
UnicodeScalar+Extensions.swift)
19+
target_link_libraries(SwiftProtobufPluginLibrary PUBLIC
20+
SwiftProtobuf)
21+
22+
23+
install(TARGETS SwiftProtobufPluginLibrary
24+
ARCHIVE DESTINATION lib/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>
25+
LIBRARY DESTINATION lib/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>
26+
RUNTIME DESTINATION bin)
27+
get_swift_host_arch(swift_arch)
28+
install(FILES
29+
$<TARGET_PROPERTY:SwiftProtobufPluginLibrary,Swift_MODULE_DIRECTORY>/SwiftProtobufPluginLibrary.swiftdoc
30+
$<TARGET_PROPERTY:SwiftProtobufPluginLibrary,Swift_MODULE_DIRECTORY>/SwiftProtobufPluginLibrary.swiftmodule
31+
DESTINATION lib/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>/${swift_arch})
32+
set_property(GLOBAL APPEND PROPERTY Protobuf_EXPORTS SwiftProtobufPluginLibrary)
+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
add_executable(protoc-gen-swift
2+
CommandLine+Extensions.swift
3+
Descriptor+Extensions.swift
4+
EnumGenerator.swift
5+
ExtensionSetGenerator.swift
6+
FieldGenerator.swift
7+
FileGenerator.swift
8+
FileIo.swift
9+
GenerationError.swift
10+
GeneratorOptions.swift
11+
Google_Protobuf_DescriptorProto+Extensions.swift
12+
Google_Protobuf_FileDescriptorProto+Extensions.swift
13+
main.swift
14+
MessageFieldGenerator.swift
15+
MessageGenerator.swift
16+
MessageStorageClassGenerator.swift
17+
OneofGenerator.swift
18+
StringUtils.swift
19+
Version.swift)
20+
target_link_libraries(protoc-gen-swift PRIVATE
21+
SwiftProtobufPluginLibrary
22+
SwiftProtobuf)
23+
24+
25+
install(TARGETS protoc-gen-swift
26+
DESTINATION bin)
27+
set_property(GLOBAL APPEND PROPERTY Protobuf_EXPORTS protoc-gen-swift)

cmake/modules/SwiftSupport.cmake

+37
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)