Commit Graph
16 Commits
Author SHA1 Message Date
Rich Gowman 189313e8b1 Minor refactoring 2018-02-06 10:02:30 -05:00
Rich Gowman fd0b332f46 Downgrade nanopb from 0.4.0-dev to 0.3.8.
Also regenerate the protos
2018-02-06 10:02:30 -05:00
Rich Gowman 3fcdf510ce Hook up nanopb to firestorep project
Use remote/serializer placeholder class as a hook for the test to ensure
nanopb headers can be found, and test can be linked.
2018-02-06 10:02:30 -05:00
Rich Gowman ace2ed15fe Add ability to build nanopb and protobuf 2018-02-06 10:02:30 -05:00
Rich Gowman 15206e8df2 Skip 'update' step for external dependencies
We check them out from a git tag, so this *should* be a noop. However,
cmake seems to want to rebuild these dependencies every time you run
make as it assumes the dependency *might* have been updated. (In
practice, this isn't completely awful, as make notices the files haven't
changed, so files don't actually get recompiled. But the configure step
is still re-run and all the files still need to be rescanned.)

Skipping the update step speeds up the build considerably.

On my linux box, running:
  cmake .. && make -j && time make -j
takes ~8.5s prior to this CL and ~6.5 afterwards. (6s is used by the
test suite.) The upcoming protobuf addition would otherwise have made
this much worse. (It takes a long time to ./configure.)
2018-02-06 10:02:30 -05:00
Rich Gowman f12406716c Eliminate sequencing dependencies
We originally had this as it was thought that cmake would spawn n*m jobs
(where n is the number of jobs it was instructed to create, ie. make
-j8, and m is the number of external projects.) However, it isn't
supposed to do that, and doesn't appear to be doing that right now. So
we'll remove this.

If the problem re-appears, we'll add these back in. (Symptom was being
unable to spawn /bin/sh.)
2018-02-06 10:02:30 -05:00
Gil c3664973a9 Simplify integration with googletest (#672)
This makes it possible to build the Firestore subproject with CLion
because it no longer needs to be told where googletest is.
2018-01-17 10:22:57 -08:00
Gil b15283bd27 Build gRPC for Firestore C++ (#652)
* Clean up quoting and other minor issues

* Reorganize CMake build output

Make it clearer which parts of the output pertain to external projects.

* Use a consistent ordering of ExternalProject arguments

* Prevent the top-level build from running in parallel

This prevents spurious failures when running make -j.

* Actually parse arguments in the xcodebuild function

* Use ExternalProject features when available

  * submodule limits from CMake 3.0
  * shallow clones from CMake 3.6
  * git progress output from CMake 3.8

* Only build the parts of leveldb we need

Skip building the tools and other libraries

* Avoid installing ExternalProjects

Consume build output directly so that we can build just the targets we
need. Installing causes all targets to be built.

This doesn't matter as much for these targets but the gRPC build
includes a ton of stuff we don't need so it's worth adopting this as a
general strategy.

* Define an external build for grpc

* Test that grpc can link successfully.

* Add a FindGRPC CMake module

* Actually comment ExternalProjext_GitSource
2018-01-13 15:21:01 -08:00
Gil ad97695519 Actually exclude leveldb on Windows (#630) 2018-01-08 17:49:59 -08:00
Gil 0f6103e404 Port StringPrintf from //base (#624)
* Port StringPrintf from //base.

  Prefer this to approaches based on variadic templates. While the variadic
  template mechanisms are strictly safer, they result in binary bloat we
  can't afford.

  This is essentially the same StringPrintf previously open sourced as a
  part of protobuf, though updated for C++11 which saves a copy and a
  temporary buffer on the heap.

* Add abseil as a subdirectory of Firestore

  This saves having to redefine all the libraries that abseil defines as
  imported libraries.

* Rename firebase_firesture_util_log_* targets

  Cut the log out of the name to reflect that these will get more
  components besides just logging.
2018-01-08 08:57:36 -08:00
Gil 13da48d8a4 Build FirebaseCore from CMake (#594)
* Don't bother specifying a download directory to CMake ExternalProject
* Teach CMake to build pure Xcode projects as dependencies

  This allows downstream code (like log_apple.mm) to consume this for
  testing within the CMake build without requiring a CMake-native build
  for these components.

  This makes integrating these components into the cmake build essentially
  free from the point of view of the consumed component.

* Get the CMake build semi-working on Linux again

  Many prebuilt versions of cmake on Linux lack the ability to download
  over https so use git to get googletest.

  Don't attempt to build FirebaseCore on Linux; there's no xcodebuild.

  Note the build is still ultimately broken because we don't yet have an
  alternative to arc4random on Linux but at least this is no more broken
  than it was before.
2018-01-01 21:00:32 -08:00
Gil 87d88ebbe2 Add leveldb to the Firestore cmake build (#559)
* Use Debug as the default build type if unspecified

* Add a leveldb ExternalProject, FindLevelDB module, and use it in Firestore

* Accept an externally built leveldb via LEVELDB_ROOT

* Clone leveldb via https: instead of git:

* Remove extra DOWNLOAD_DIR which doesn't work with GIT sources
2017-12-12 11:13:02 -08:00
Marek Gilbert 56c8c06594 Fix whitespace 2017-12-08 09:43:13 -08:00
Marek Gilbert 82810a84ff Add abseil-cpp to the superbuild 2017-12-07 13:02:53 -08:00
Gil 32bdc38400 Rework the top-level cmake build to be a superproject (#538)
All projects are now ExternalProjects

This makes it much easier to build them all in a single pass.
2017-12-06 16:10:59 -08:00
Gil 1670f1c5dd Initial CMake-based build (#472)
Initial CMake-based build

This knows how to download and build googletest.
2017-11-20 14:38:44 -08:00