diff options
author | Gil <mcg@google.com> | 2018-01-17 10:24:27 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-17 10:24:27 -0800 |
commit | 6a3379db62ccbce7fc9a859032955614e78e68bb (patch) | |
tree | e50af3689dfcb0a55478bc92272821bbbc6a8f81 | |
parent | c3664973a94a2c715b9c57583f5953483caf2cce (diff) |
Add a cc_library to the CMake build (#670)
* 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
-rw-r--r-- | Firestore/core/src/firebase/firestore/remote/CMakeLists.txt | 13 | ||||
-rw-r--r-- | Firestore/core/src/firebase/firestore/util/CMakeLists.txt | 92 | ||||
-rw-r--r-- | Firestore/core/test/firebase/firestore/remote/CMakeLists.txt | 9 | ||||
-rw-r--r-- | Firestore/core/test/firebase/firestore/util/CMakeLists.txt | 35 | ||||
-rw-r--r-- | cmake/utils.cmake | 80 |
5 files changed, 140 insertions, 89 deletions
diff --git a/Firestore/core/src/firebase/firestore/remote/CMakeLists.txt b/Firestore/core/src/firebase/firestore/remote/CMakeLists.txt index 74ad80b..43320ce 100644 --- a/Firestore/core/src/firebase/firestore/remote/CMakeLists.txt +++ b/Firestore/core/src/firebase/firestore/remote/CMakeLists.txt @@ -12,12 +12,11 @@ # See the License for the specific language governing permissions and # limitations under the License. -add_library( +cc_library( firebase_firestore_remote - datastore.h - datastore.cc -) -target_link_libraries( - firebase_firestore_remote - grpc::grpc + SOURCES + datastore.h + datastore.cc + DEPENDS + grpc::grpc ) diff --git a/Firestore/core/src/firebase/firestore/util/CMakeLists.txt b/Firestore/core/src/firebase/firestore/util/CMakeLists.txt index 3028a95..7283942 100644 --- a/Firestore/core/src/firebase/firestore/util/CMakeLists.txt +++ b/Firestore/core/src/firebase/firestore/util/CMakeLists.txt @@ -16,69 +16,61 @@ # libraries in here are an implementation detail of making this a # mutli-platform build. -add_library( +cc_library( firebase_firestore_util_base - secure_random_arc4random.cc - string_printf.cc -) -target_link_libraries( - firebase_firestore_util_base - PUBLIC - absl_base + SOURCES + secure_random.h + secure_random_arc4random.cc + string_printf.cc + string_printf.h + DEPENDS + absl_base ) -# stdio-dependent bits can be built and tested everywhere -add_library( - firebase_firestore_util_stdio - assert_stdio.cc - log_stdio.cc -) -target_link_libraries( +## assert and log + +cc_library( firebase_firestore_util_stdio - PUBLIC - firebase_firestore_util_base + SOURCES + assert_stdio.cc + log_stdio.cc + DEPENDS + firebase_firestore_util_base + absl_base + EXCLUDE_FROM_ALL ) -# apple-dependent bits can only built and tested on apple plaforms -if(APPLE) - add_library( - firebase_firestore_util_apple +cc_library( + firebase_firestore_util_apple + SOURCES assert_apple.mm log_apple.mm - ) - target_compile_options( - firebase_firestore_util_apple - PRIVATE - ${OBJC_FLAGS} - ) - target_link_libraries( - firebase_firestore_util_apple - PUBLIC + string_apple.h + DEPENDS FirebaseCore - ) -endif(APPLE) - -add_library( - firebase_firestore_util - autoid.cc + EXCLUDE_FROM_ALL ) # Export a dependency on the correct logging library for this platform. All # buildable libraries are built and tested but only the best fit is exported. if(APPLE) - target_link_libraries( - firebase_firestore_util - PUBLIC - firebase_firestore_util_apple - firebase_firestore_util_base - ) + list(APPEND UTIL_DEPENDS firebase_firestore_util_apple) +else() + list(APPEND UTIL_DEPENDS firebase_firestore_util_stdio) +endif() -else(NOT APPLE) - target_link_libraries( - firebase_firestore_util - PUBLIC - firebase_firestore_util_stdio - firebase_firestore_util_base - ) -endif(APPLE) +## main library + +cc_library( + firebase_firestore_util + SOURCES + autoid.cc + autoid.h + firebase_assert.h + log.h + DEPENDS + ${UTIL_DEPENDS} + firebase_firestore_util_base + absl_base +) diff --git a/Firestore/core/test/firebase/firestore/remote/CMakeLists.txt b/Firestore/core/test/firebase/firestore/remote/CMakeLists.txt index f0731c3..7d99e6f 100644 --- a/Firestore/core/test/firebase/firestore/remote/CMakeLists.txt +++ b/Firestore/core/test/firebase/firestore/remote/CMakeLists.txt @@ -14,9 +14,8 @@ cc_test( firebase_firestore_remote_test - datastore_test.cc -) -target_link_libraries( - firebase_firestore_remote_test - firebase_firestore_remote + SOURCES + datastore_test.cc + DEPENDS + firebase_firestore_remote ) diff --git a/Firestore/core/test/firebase/firestore/util/CMakeLists.txt b/Firestore/core/test/firebase/firestore/util/CMakeLists.txt index e51bb51..7f0539c 100644 --- a/Firestore/core/test/firebase/firestore/util/CMakeLists.txt +++ b/Firestore/core/test/firebase/firestore/util/CMakeLists.txt @@ -14,33 +14,30 @@ cc_test( firebase_firestore_util_test - autoid_test.cc - secure_random_test.cc - string_printf_test.cc -) -target_link_libraries( - firebase_firestore_util_test - firebase_firestore_util + SOURCES + autoid_test.cc + secure_random_test.cc + string_printf_test.cc + DEPENDS + firebase_firestore_util ) if(APPLE) cc_test( firebase_firestore_util_apple_test - assert_test.cc - log_test.cc - ) - target_link_libraries( - firebase_firestore_util_apple_test - firebase_firestore_util_apple + SOURCES + assert_test.cc + log_test.cc + DEPENDS + firebase_firestore_util_apple ) endif(APPLE) cc_test( firebase_firestore_util_stdio_test - assert_test.cc - log_test.cc -) -target_link_libraries( - firebase_firestore_util_stdio_test - firebase_firestore_util_stdio + SOURCES + assert_test.cc + log_test.cc + DEPENDS + firebase_firestore_util_stdio ) diff --git a/cmake/utils.cmake b/cmake/utils.cmake index 54044d6..1c3cbd6 100644 --- a/cmake/utils.cmake +++ b/cmake/utils.cmake @@ -12,16 +12,80 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Defines a new test executable and does all the things we want done with -# tests: +include(CMakeParseArguments) + +# cc_library( +# target +# SOURCES sources... +# DEPENDS libraries... +# ) +# +# Defines a new library target with the given target name, sources, and dependencies. +function(cc_library name) + set(flag EXCLUDE_FROM_ALL) + set(multi DEPENDS SOURCES) + cmake_parse_arguments(ccl "${flag}" "" "${multi}" ${ARGN}) + + add_library( + ${name} + ${ccl_SOURCES} + ) + add_objc_flags(${name} ccl) + target_link_libraries( + ${name} + PUBLIC + ${ccl_DEPENDS} + ) + + if(ccl_EXCLUDE_FROM_ALL) + set_property( + TARGET ${name} + PROPERTY EXCLUDE_FROM_ALL ON + ) + endif() + +endfunction() + +# cc_test( +# target +# SOURCES sources... +# DEPENDS libraries... +# ) # -# * add_executable (with the given arguments) -# * add_Test - defines a test with the same name -# * declares that the test links against gtest -# * adds the executable as a dependency of the `check` target. +# Defines a new test executable target with the given target name, sources, and +# dependencies. Implicitly adds DEPENDS on GTest::GTest and GTest::Main. function(cc_test name) - add_executable(${name} ${ARGN}) + set(multi DEPENDS SOURCES) + cmake_parse_arguments(cct "" "" "${multi}" ${ARGN}) + + list(APPEND cct_DEPENDS GTest::GTest GTest::Main) + + add_executable(${name} ${cct_SOURCES}) + add_objc_flags(${name} cct) add_test(${name} ${name}) - target_link_libraries(${name} GTest::GTest GTest::Main) + target_link_libraries(${name} ${cct_DEPENDS}) +endfunction() + +# add_objc_flags(target sources...) +# +# Adds OBJC_FLAGS to the compile options of the given target if any of the +# sources have filenames that indicate they are are Objective-C. +function(add_objc_flags target) + set(_has_objc OFF) + + foreach(source ${ARGN}) + get_filename_component(ext ${source} EXT) + if((ext STREQUAL ".m") OR (ext STREQUAL ".mm")) + set(_has_objc ON) + endif() + endforeach() + + if(_has_objc) + target_compile_options( + ${target} + PRIVATE + ${OBJC_FLAGS} + ) + endif() endfunction() |