blob: 01a2961e216e5a3c92f8751c93923cd23e05af09 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
# Copyright 2017 Google
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
include(CMakeParseArguments)
include(ExternalProject)
# Builds an existing Xcode project or workspace as an external project in CMake.
#
# xcodebuild(<framework> [<option>...])
#
# Options:
# ``DEPENDS <projects>...``
# Targets on which the project depends
# ``SCHEME <scheme>``
# The scheme to build in the workspace, defaults to <framework>-<platform>,
# where <platform> is always "macOS".
# ``WORKSPACE <workspace>``
# Location of the xcworkspace file containing the target to build. Defaults to
# Example/Firebase.xcworkspace.
function(xcodebuild framework)
# Parse arguments
set(options "")
set(single_value SCHEME WORKSPACE)
set(multi_value DEPENDS)
cmake_parse_arguments(xcb "${options}" "${single_value}" "${multi_value}" ${ARGN})
if(NOT xcb_WORKSPACE)
set(xcb_WORKSPACE ${PROJECT_SOURCE_DIR}/Example/Firebase.xcworkspace)
endif()
# TODO(mcg): Investigate supporting non-macOS platforms
# The canonical way to build and test for iOS is via Xcode and CocoaPods so
# it's not super important to make this work here
set(platform macOS)
set(destination "platform=macOS,arch=x86_64")
set(scheme "${framework}-${platform}")
# CMake has a variety of release types, but Xcode has just one by default.
if(CMAKE_BUILD_TYPE STREQUAL Debug)
set(configuration Debug)
else()
set(configuration Release)
endif()
# Pipe build output through xcpretty if it's available
find_program(xcpretty_cmd xcpretty)
if(xcpretty_cmd)
set(pipe_xcpretty "|" ${xcpretty_cmd})
endif()
ExternalProject_Add(
${framework}
DEPENDS ${xcb_DEPENDS}
PREFIX ${PROJECT_BINARY_DIR}/external/${framework}
# The source directory doesn't actually matter
SOURCE_DIR ${PROJECT_SOURCE_DIR}
BINARY_DIR ${PROJECT_BINARY_DIR}/Frameworks
CONFIGURE_COMMAND ""
BUILD_COMMAND
xcodebuild
-workspace ${xcb_WORKSPACE}
-scheme ${scheme}
-configuration ${configuration}
-destination ${destination}
CONFIGURATION_BUILD_DIR=<BINARY_DIR>
build
${pipe_xcpretty}
BUILD_ALWAYS ${BUILD_PODS}
INSTALL_COMMAND ""
TEST_COMMAND ""
)
endfunction()
|