Quellcode durchsuchen

Initial CMake-based build (#472)

Initial CMake-based build

This knows how to download and build googletest.
Gil vor 8 Jahren
Ursprung
Commit
1670f1c5dd
4 geänderte Dateien mit 162 neuen und 0 gelöschten Zeilen
  1. 62 0
      CMAKE.md
  2. 31 0
      CMakeLists.txt
  3. 15 0
      Firestore/CMakeLists.txt
  4. 54 0
      cmake/external/googletest.cmake

+ 62 - 0
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
+```

+ 31 - 0
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)

+ 15 - 0
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)

+ 54 - 0
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)