aboutsummaryrefslogtreecommitdiffhomepage
path: root/cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake')
-rw-r--r--cmake/FindFirebaseCore.cmake57
-rw-r--r--cmake/external/FirebaseCore.cmake23
-rw-r--r--cmake/external/firestore.cmake2
-rw-r--r--cmake/external/googletest.cmake5
-rw-r--r--cmake/xcodebuild.cmake90
5 files changed, 173 insertions, 4 deletions
diff --git a/cmake/FindFirebaseCore.cmake b/cmake/FindFirebaseCore.cmake
new file mode 100644
index 0000000..e23d6db
--- /dev/null
+++ b/cmake/FindFirebaseCore.cmake
@@ -0,0 +1,57 @@
+# 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.
+
+find_library(
+ FIREBASECORE_LIBRARY
+ FirebaseCore
+ PATHS ${FIREBASE_BINARY_DIR}/Frameworks
+)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(
+ FirebaseCore
+ DEFAULT_MSG
+ FIREBASECORE_LIBRARY
+)
+
+if(FIREBASECORE_FOUND)
+ # Emulate CocoaPods behavior which makes all headers available unqualified.
+ set(
+ FIREBASECORE_INCLUDE_DIRS
+ ${FIREBASECORE_LIBRARY}/Headers
+ ${FIREBASECORE_LIBRARY}/PrivateHeaders
+ )
+
+ # TODO(mcg): on iOS this should depend on UIKit.
+ set(
+ FIREBASECORE_LIBRARIES
+ ${FIREBASECORE_LIBRARY}
+ "-framework AppKit"
+ )
+
+ if(NOT TARGET FirebaseCore)
+ # Add frameworks as INTERFACE libraries rather than IMPORTED so that
+ # framework behavior is preserved.
+ add_library(FirebaseCore INTERFACE)
+
+ set_property(
+ TARGET FirebaseCore APPEND PROPERTY
+ INTERFACE_INCLUDE_DIRECTORIES ${FIREBASECORE_INCLUDE_DIRS}
+ )
+ set_property(
+ TARGET FirebaseCore APPEND PROPERTY
+ INTERFACE_LINK_LIBRARIES ${FIREBASECORE_LIBRARIES}
+ )
+ endif()
+endif(FIREBASECORE_FOUND)
diff --git a/cmake/external/FirebaseCore.cmake b/cmake/external/FirebaseCore.cmake
new file mode 100644
index 0000000..8be6969
--- /dev/null
+++ b/cmake/external/FirebaseCore.cmake
@@ -0,0 +1,23 @@
+# 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(xcodebuild)
+
+if(APPLE)
+ # FirebaseCore is only available as a CocoaPod build.
+ xcodebuild(FirebaseCore)
+else()
+ # On non-Apple platforms, there's no way to build FirebaseCore.
+ add_custom_target(FirebaseCore)
+endif()
diff --git a/cmake/external/firestore.cmake b/cmake/external/firestore.cmake
index 9fb673e..61f79f3 100644
--- a/cmake/external/firestore.cmake
+++ b/cmake/external/firestore.cmake
@@ -19,7 +19,7 @@ set(binary_dir ${PROJECT_BINARY_DIR}/Firestore)
ExternalProject_Add(
Firestore
- DEPENDS abseil-cpp googletest leveldb
+ DEPENDS abseil-cpp FirebaseCore googletest leveldb
# Lay the binary directory out as if this were a subproject. This makes it
# possible to build and test in it directly.
diff --git a/cmake/external/googletest.cmake b/cmake/external/googletest.cmake
index a956e9f..128f849 100644
--- a/cmake/external/googletest.cmake
+++ b/cmake/external/googletest.cmake
@@ -17,12 +17,11 @@ include(ExternalProject)
ExternalProject_Add(
googletest
- URL "https://github.com/google/googletest/archive/release-1.8.0.tar.gz"
- URL_HASH "SHA256=58a6f4277ca2bc8565222b3bbd58a177609e9c488e8a72649359ba51450db7d8"
+ GIT_REPOSITORY "https://github.com/google/googletest.git"
+ GIT_TAG "release-1.8.0"
PREFIX ${PROJECT_BINARY_DIR}/third_party/googletest
- DOWNLOAD_DIR ${FIREBASE_DOWNLOAD_DIR}
INSTALL_DIR ${FIREBASE_INSTALL_DIR}
TEST_COMMAND ""
diff --git a/cmake/xcodebuild.cmake b/cmake/xcodebuild.cmake
new file mode 100644
index 0000000..8312f6d
--- /dev/null
+++ b/cmake/xcodebuild.cmake
@@ -0,0 +1,90 @@
+# 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}")
+
+ 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}")
+
+ set(binary_dir ${PROJECT_BINARY_DIR}/${scheme})
+
+ # 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 ${binary_dir}
+
+ # The source directory doesn't actually matter
+ SOURCE_DIR ${PROJECT_SOURCE_DIR}
+ BINARY_DIR ${binary_dir}
+
+ CONFIGURE_COMMAND ""
+
+ BUILD_COMMAND
+ xcodebuild
+ -workspace ${xcb_WORKSPACE}
+ -scheme ${scheme}
+ -configuration ${configuration}
+ -destination ${destination}
+ CONFIGURATION_BUILD_DIR=${FIREBASE_INSTALL_DIR}/Frameworks
+ build
+ ${pipe_xcpretty}
+ BUILD_ALWAYS ${BUILD_PODS}
+
+ INSTALL_COMMAND ""
+ TEST_COMMAND ""
+ )
+endfunction()