diff options
-rw-r--r-- | CMAKE.md | 62 | ||||
-rw-r--r-- | CMakeLists.txt | 31 | ||||
-rw-r--r-- | Firestore/CMakeLists.txt | 15 | ||||
-rw-r--r-- | cmake/external/googletest.cmake | 54 |
4 files changed, 162 insertions, 0 deletions
diff --git a/CMAKE.md b/CMAKE.md new file mode 100644 index 0000000..09ce143 --- /dev/null +++ b/CMAKE.md @@ -0,0 +1,62 @@ +# Building with CMake + +Some portions of this repository are portable beyond iOS and can be built using +CMake. + +## Dependencies + +You need: + * A C++ compiler + * `cmake` + +### macOS + +You need [Xcode](https://developer.apple.com/xcode/), which you can get from +the Mac App Store. + +You can get other development tools via [homebrew](https://brew.sh). Adjust as +needed for other package managers. +``` +brew install cmake +``` + +### Ubuntu + +Ubuntu Trusty includes CMake 2.8.12 which should be sufficient. Newer versions +are fine too. + +``` +sudo apt-get install cmake +``` + +### Windows + +An easy way to get development tools is via [Chocolatey](https://chocolatey.org/). + +Unfortunately, the `cmake.install` package is semi-broken, so use the portable +version. + +``` +choco install cmake.portable +``` + +## Setup + +CMake builds out-of source, so create a separate build directory for the target +you want to work on. + +``` +mkdir build +cd build +cmake .. +``` + +## Testing + +Once CMake has run once, you can just run `make` repeatedly and it will +regenerate Makefiles as needed. + +To build everything and run tests: +``` +make -j all test +``` diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..83950a9 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,31 @@ +# 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. + +cmake_minimum_required(VERSION 2.8.11) +project(firebase C CXX) + +# We use C++11 +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +# Fully qualified imports, project wide +include_directories("${PROJECT_SOURCE_DIR}") + +# CMake's test target does not build tests before running them. This adds a +# check target that +add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure) + +enable_testing() +add_subdirectory(Firestore) diff --git a/Firestore/CMakeLists.txt b/Firestore/CMakeLists.txt new file mode 100644 index 0000000..99f0ab1 --- /dev/null +++ b/Firestore/CMakeLists.txt @@ -0,0 +1,15 @@ +# 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(${PROJECT_SOURCE_DIR}/cmake/external/googletest.cmake) diff --git a/cmake/external/googletest.cmake b/cmake/external/googletest.cmake new file mode 100644 index 0000000..66b2689 --- /dev/null +++ b/cmake/external/googletest.cmake @@ -0,0 +1,54 @@ +# 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(ExternalProject) +ExternalProject_Add( + googletest_external + PREFIX googletest + URL "https://github.com/google/googletest/archive/release-1.8.0.tar.gz" + URL_HASH "SHA256=58a6f4277ca2bc8565222b3bbd58a177609e9c488e8a72649359ba51450db7d8" + + CMAKE_ARGS + -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} + -DBUILD_GMOCK:BOOL=OFF + -DBUILD_GTEST:BOOL=ON + + # Cut down on scary log output + LOG_DOWNLOAD ON + LOG_CONFIGURE ON + + INSTALL_COMMAND "" + UPDATE_COMMAND "" + TEST_COMMAND "" +) + +ExternalProject_Get_Property(googletest_external source_dir binary_dir) + +# CMake requires paths in include_directories to exist at configure time +file(MAKE_DIRECTORY ${source_dir}/googletest/include) + +add_library(gtest STATIC IMPORTED GLBOAL) +set_target_properties( + gtest PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES ${source_dir}/googletest/include + IMPORTED_LOCATION ${binary_dir}/googletest/${CMAKE_FIND_LIBRARY_PREFIXES}gtest.a +) +add_dependencies(gtest googletest_external) + +add_library(gtest_main STATIC IMPORTED GLOBAL) +set_target_properties( + gtest_main PROPERTIES + IMPORTED_LOCATION ${binary_dir}/googletest/${CMAKE_FIND_LIBRARY_PREFIXES}gtest_main.a +) +add_dependencies(gtest_main googletest_external) |