diff options
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/FindFirebaseCore.cmake | 57 | ||||
-rw-r--r-- | cmake/external/FirebaseCore.cmake | 23 | ||||
-rw-r--r-- | cmake/external/firestore.cmake | 2 | ||||
-rw-r--r-- | cmake/external/googletest.cmake | 5 | ||||
-rw-r--r-- | cmake/xcodebuild.cmake | 90 |
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() |