aboutsummaryrefslogtreecommitdiffhomepage
path: root/cmake
Commit message (Collapse)AuthorAge
* Fix protobuf/nanopb builds on Windows (#1392)Gravatar Gil2018-06-12
| | | | | | | | | | | | | | | | | | | | | | * Build protobuf with CMake for compatibility with Windows. Fixes b/74067357 * Update to nanopb 0.3.9.1 This release includes functional CMake support for building the protoc plugin. * Fix license * Build nanopb out-of-source This is possible now that the build is CMake-based. * Find protoc on windows * Define CMAKE_ARGS in a more straightforward way * Adjust libprotobuf locations to account for CMake build
* Adjust serializer test to verify via libprotobuf. (#1039)Gravatar rsgowman2018-04-24
| | | | | | Previously, the tests would compare serialization results against a precomputed (via protoc) array of bytes. Now they serialize via our nanopb based class and deserialize via libprotobuf (and vice versa) and then ensure the result is the same as the input
* Firestore Travis: add test runs using sanitizers (#1128)Gravatar Konstantin Varlamov2018-04-23
| | | Also move most of `before_install` actions from Travis config into scripts to reduce duplication.
* Add missing license file (#981)Gravatar rsgowman2018-03-26
|
* Convert cmake build to (mostly) use urls rather than git clones (#852)Gravatar rsgowman2018-02-27
| | | | | | | Exception: grpc. Due to it's use of git submodules, it's not completely trivial to convert it (though probably wouldn't be too much more work.) This helps address our build being throttled. (Maybe. This assumes github allows more fetching of tgz's than clones.) It should also speed up our build times. The downloaded tarballs are placed into ${PROJECT_BINARY_DIR}/downloads. This allows for eventual caching in travis.
* Enable -Wcomma for our build; disable it for abseil. (#799)Gravatar rsgowman2018-02-16
| | | | | | | | In order to use different cflags for abseil, this patch splits it out into a subspec within the pod. The cmake side of things "just works" since Firestore/CMakeLists.txt includes abseil before setting our compiler flags.
* Serialize and deserialize null (#783)Gravatar rsgowman2018-02-13
| | | | | | | | | | | | | | | | | | | | | | | | | | * Build (grpc's) nanopb with -DPB_FIELD_16BIT We require (at least) 16 bit fields. (By default, nanopb uses 8 bit fields, ie allowing up to 256 field tags.) Also note that this patch adds this to grpc's nanopb, rather than to our nanopb. We'll need to eventually either: a) we instruct grpc to use our nanopb b) we rely on grpc's nanopb instead of using our own. (^ marked as a TODO for now.) * Add some dependant protos Imported from protobuf. Nanopb requires these to be present (though anything using libprotobuf does not, as these are already built into that.) * Add generated nanopb protos based off of newly added proto definitions * Build the nanopb protos * Serialize and deserialize null
* cmake build fixes (#770)Gravatar rsgowman2018-02-09
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Fix nanopb (in cmake build) Look for binaries in the src dir (since that's where we build now.) This error would be masked if a previous build had completed prior to switching nanopb to build out of src. Also, don't patch the protoc path multiple times. This could be triggered by (eg) 'make && make clean && make'. * Add resource_path.{h,cc} to the cmake build * Fix signed/unsigned int comparison warnings * Ensure FieldValue tag_ is initialized during cp/mv ctor. Otherwise, the assignment operator attempts to deallocate based on the (uninitialized) tag_ variable, posssibly leading to segfaults. * Fix tests that throw exceptions. The (previous) tests checked to ensure that an abort() occurs, but if ABSL_HAVE_EXCEPTIONS is defined on non-macos (which is currently the default) then the assertions will throw a std::logic_error rather than abort()ing. On macos, an exception is thrown too, but the exception doesn't derrive from std::exception, so ASSERT_DEATH_* doesn't catch it (hence why ASSERT_DEATH_* actually works.) To resolve this, I've switched to ASSERT_ANY_THROW.
* Minor refactoringGravatar Rich Gowman2018-02-06
|
* Downgrade nanopb from 0.4.0-dev to 0.3.8.Gravatar Rich Gowman2018-02-06
| | | | Also regenerate the protos
* Hook up nanopb to firestorep projectGravatar Rich Gowman2018-02-06
| | | | | Use remote/serializer placeholder class as a hook for the test to ensure nanopb headers can be found, and test can be linked.
* Add ability to build nanopb and protobufGravatar Rich Gowman2018-02-06
|
* Skip 'update' step for external dependenciesGravatar Rich Gowman2018-02-06
| | | | | | | | | | | | | | | | | 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.)
* Eliminate sequencing dependenciesGravatar Rich Gowman2018-02-06
| | | | | | | | | | | 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.)
* Import iterator_adaptors from google3 (#718)Gravatar Gil2018-01-29
| | | | | | | | | | | | * Import iterator_adapters from google3 * Remove -Wconversion which is annoyingly hard to satisfy * Strip dependency on absl_container from iterator_adapters_test * Format and lint iterator_adaptors * More flexible copyright checking in Travis
* Fix a number of c++ build errors (#715)Gravatar rsgowman2018-01-27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Move -fvisibility-inlines-hidden from common_flags to cxx_flags This option isn't supported by C (and causes the build to fail under at least rodete). Manifested error was: ``` -- Looking for include file openssl/rand.h -- Looking for include file openssl/rand.h - not found CMake Error at core/src/firebase/firestore/util/CMakeLists.txt:94 (message): No implementation for SecureRandom available. -- Configuring incomplete, errors occurred! ``` which is completely misleading. :( * Fix exception include for std::logic_error Was causing compiler error on (at least) rodete. (http://en.cppreference.com/w/cpp/error/logic_error suggests that stdexcept is the correct header.) * Remove 'const' from vector contents. vectors cannot contain const objects as the contained objects are required to be assignable and copy constructable. (Not *quite* strictly true; since c++11, this requirement now depends on the operations performed on the container. But my compiler objects at any rate.) http://en.cppreference.com/w/cpp/container/vector https://stackoverflow.com/questions/8685257/why-cant-you-put-a-const-object-into-a-stl-container * Add brackets as suggested (required) by my compiler. * Add missing include For LLONG_MIN, etc. * Enable gnu extension to c++11 for firestore/util *test*. We disable them by default (in cmake/CompilerSetup.cmake) but our tests requires hexidecimal floating point, which is not supported in c++11 (though is supported in C++17, gnu++11, and others). http://en.cppreference.com/w/cpp/language/floating_literal https://bugzilla.redhat.com/show_bug.cgi?id=1321986 * Fix printf format for uint64_t http://en.cppreference.com/w/cpp/types/integer https://stackoverflow.com/questions/9225567/how-to-print-a-int64-t-type-in-c * Allow 0 length printf template strings in tests. * Get rid of a multi line comment. The backslash is apparently interpreted by the compiler cause the next line to be ignored too. In this case, the next line is (currently) a comment, and would be ignored anyways. (But that doesn't stop the compiler from yelling.) * Run ./scripts/style.sh
* Add a cc_library to the CMake build (#670)Gravatar Gil2018-01-17
| | | | | | | | | | | | | | | | | | | | | | * Rewrite cc_test to take named arguments Cut down on build file verbosity by having cc_test take SOURCES and DEPENDS. The separate invocation of target_link_libraries is no longer necessary. * Add a cc_library rule to parallel cc_test This cuts down on build file verbosity. * Automatically add OBJC_FLAGS to cc_libraries if applicable * Exclude platform-specific libraries from 'all' This is makes it possible to declare this kind of library unconditionally. Usage within a test or as a dependency will actually trigger building. * Restore secure_random_test.cc; clean-up comments
* Simplify integration with googletest (#672)Gravatar Gil2018-01-17
| | | | This makes it possible to build the Firestore subproject with CLion because it no longer needs to be told where googletest is.
* Enable warnings in the CMake build (#669)Gravatar Gil2018-01-16
| | | | | | * Enable warnings when building with GCC or clang * Fix warnings
* Build gRPC for Firestore C++ (#652)Gravatar Gil2018-01-13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 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
* Actually exclude leveldb on Windows (#630)Gravatar Gil2018-01-08
|
* Port StringPrintf from //base (#624)Gravatar Gil2018-01-08
| | | | | | | | | | | | | | | | | | | | | * 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.
* Build and test both C++ loggers where possible (#595)Gravatar Gil2018-01-03
| | | | | | | | | | | | | | | | | | * Rename FIREBASE_BINARY_DIR to FIREBASE_INSTALL_DIR Make this consistent with the outer superbuild and also make the association with CMAKE_INSTALL_PREFIX more obvious. * Build and test log_stdio separate from the rest of util This is in preparation for adding a test for log_apple * Build and test log_apple under CMake Also add notes about how FIRLogger's debug mode can break this test * Refactor log_apple to cut down duplicate switch statements There's also a slight reduction in final binary size.
* Remove FIRAppEnvironmentUtil's sharedApplication (#603)Gravatar Ryan Wilson2018-01-02
| | | | | | | | | | | | | | | | | | | * Deprecate FIRAppEnvironmentUtil sharedApplication * Remove sharedApplication private API. This also allows us to remove an AppKit dependency. * Disable autolink when building FirebaseCore (#606) This prevents the dependencies of FirebaseCore's dependencies from bleeding into its interface. The proximate benefit of avoiding this is that FirebaseCore no longer ends up depending on ColorSync.framework which became a top-level system framework in 10.13. This makes it possible to build against the resulting FirebaseCore.framework on macOS 10.12 using Xcode 9 (with the macOS 10.13 SDK).
* Build FirebaseCore from CMake (#594)Gravatar Gil2018-01-01
| | | | | | | | | | | | | | | | | | | | | | * 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.
* Add leveldb to the Firestore cmake build (#559)Gravatar Gil2017-12-12
| | | | | | | | | | | | * 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
* Fix whitespaceGravatar Marek Gilbert2017-12-08
|
* Add abseil-cpp to the superbuildGravatar Marek Gilbert2017-12-07
|
* Rework the top-level cmake build to be a superproject (#538)Gravatar Gil2017-12-06
| | | | | All projects are now ExternalProjects This makes it much easier to build them all in a single pass.
* Add SecureRandom (#473)Gravatar Gil2017-11-20
| | | | * Add SecureRandom * Add CMake support for building src/support
* Initial CMake-based build (#472)Gravatar Gil2017-11-20
Initial CMake-based build This knows how to download and build googletest.