external_rules.cmake 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. # Copyright 2018 Google LLC
  2. #
  3. # Licensed under the Apache License, Version 2.0 (the "License");
  4. # you may not use this file except in compliance with the License.
  5. # You may obtain a copy of the License at
  6. #
  7. # http://www.apache.org/licenses/LICENSE-2.0
  8. #
  9. # Unless required by applicable law or agreed to in writing, software
  10. # distributed under the License is distributed on an "AS IS" BASIS,
  11. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. # See the License for the specific language governing permissions and
  13. # limitations under the License.
  14. function(download_external_sources)
  15. file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/external)
  16. set(DOWNLOAD_BENCHMARK ${FIREBASE_IOS_BUILD_BENCHMARKS})
  17. set(DOWNLOAD_GOOGLETEST ${FIREBASE_IOS_BUILD_TESTS})
  18. # If a GITHUB_TOKEN is present, use it for all external project downloads.
  19. # This will prevent GitHub runners from being throttled by GitHub.
  20. if(DEFINED ENV{GITHUB_TOKEN})
  21. set(EXTERNAL_PROJECT_HTTP_HEADER "Authorization: token $ENV{GITHUB_TOKEN}")
  22. message("Adding GITHUB_TOKEN header to ExternalProject downloads.")
  23. else()
  24. set(EXTERNAL_PROJECT_HTTP_HEADER "")
  25. endif()
  26. execute_process(
  27. COMMAND
  28. ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}"
  29. -DFIREBASE_DOWNLOAD_DIR=${FIREBASE_DOWNLOAD_DIR}
  30. -DCMAKE_INSTALL_PREFIX=${FIREBASE_INSTALL_DIR}
  31. -DFUZZING=${FUZZING}
  32. -DDOWNLOAD_BENCHMARK=${DOWNLOAD_BENCHMARK}
  33. -DDOWNLOAD_GOOGLETEST=${DOWNLOAD_GOOGLETEST}
  34. -DEXTERNAL_PROJECT_HTTP_HEADER=${EXTERNAL_PROJECT_HTTP_HEADER}
  35. ${PROJECT_SOURCE_DIR}/cmake/external
  36. WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/external
  37. )
  38. # Run downloads in parallel if we know how
  39. if(CMAKE_GENERATOR STREQUAL "Unix Makefiles")
  40. set(cmake_build_args -j)
  41. endif()
  42. execute_process(
  43. COMMAND ${CMAKE_COMMAND} --build . -- ${cmake_build_args}
  44. WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/external
  45. )
  46. endfunction()
  47. function(add_external_subdirectory NAME)
  48. string(TOUPPER ${NAME} UPPER_NAME)
  49. if (NOT EXISTS ${${UPPER_NAME}_SOURCE_DIR})
  50. set(${UPPER_NAME}_SOURCE_DIR "${FIREBASE_BINARY_DIR}/external/src/${NAME}")
  51. set(${UPPER_NAME}_SOURCE_DIR "${${UPPER_NAME}_SOURCE_DIR}" PARENT_SCOPE)
  52. endif()
  53. if (NOT EXISTS ${${UPPER_NAME}_BINARY_DIR})
  54. set(${UPPER_NAME}_BINARY_DIR "${${UPPER_NAME}_SOURCE_DIR}-build")
  55. set(${UPPER_NAME}_BINARY_DIR "${${UPPER_NAME}_BINARY_DIR}" PARENT_SCOPE)
  56. endif()
  57. if (EXISTS "${${UPPER_NAME}_SOURCE_DIR}/CMakeLists.txt")
  58. add_subdirectory(
  59. ${${UPPER_NAME}_SOURCE_DIR}
  60. ${${UPPER_NAME}_BINARY_DIR}
  61. EXCLUDE_FROM_ALL
  62. )
  63. endif()
  64. endfunction()