external_rules.cmake 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. include("${CMAKE_CURRENT_LIST_DIR}/firebase_utils.cmake")
  15. function(download_external_sources)
  16. file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/external)
  17. set(DOWNLOAD_BENCHMARK ${FIREBASE_IOS_BUILD_BENCHMARKS})
  18. set(DOWNLOAD_GOOGLETEST ${FIREBASE_IOS_BUILD_TESTS})
  19. # If a GITHUB_TOKEN is present, use it for all external project downloads.
  20. # This will prevent GitHub runners from being throttled by GitHub.
  21. if(DEFINED ENV{GITHUB_TOKEN})
  22. set(EXTERNAL_PROJECT_HTTP_HEADER "Authorization: token $ENV{GITHUB_TOKEN}")
  23. message("Adding GITHUB_TOKEN header to ExternalProject downloads.")
  24. else()
  25. set(EXTERNAL_PROJECT_HTTP_HEADER "")
  26. endif()
  27. # Pass along FIREBASE_PYTHON_HOST_EXECUTABLE because leveldb.cmake uses it.
  28. if("${FIREBASE_PYTHON_HOST_EXECUTABLE}" STREQUAL "")
  29. set(FIREBASE_PYTHON_HOST_EXECUTABLE_CMAKE_ARG "")
  30. else()
  31. set(
  32. FIREBASE_PYTHON_HOST_EXECUTABLE_CMAKE_ARG
  33. "-DFIREBASE_PYTHON_HOST_EXECUTABLE:FILEPATH=${FIREBASE_PYTHON_HOST_EXECUTABLE}"
  34. )
  35. endif()
  36. firebase_execute_process(
  37. COMMAND
  38. ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}"
  39. -DFIREBASE_DOWNLOAD_DIR=${FIREBASE_DOWNLOAD_DIR}
  40. -DCMAKE_INSTALL_PREFIX=${FIREBASE_INSTALL_DIR}
  41. -DFUZZING=${FUZZING}
  42. -DDOWNLOAD_BENCHMARK=${DOWNLOAD_BENCHMARK}
  43. -DDOWNLOAD_GOOGLETEST=${DOWNLOAD_GOOGLETEST}
  44. -DEXTERNAL_PROJECT_HTTP_HEADER=${EXTERNAL_PROJECT_HTTP_HEADER}
  45. ${FIREBASE_PYTHON_HOST_EXECUTABLE_CMAKE_ARG}
  46. ${PROJECT_SOURCE_DIR}/cmake/external
  47. WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/external
  48. )
  49. # Run downloads in parallel if we know how
  50. if(CMAKE_GENERATOR STREQUAL "Unix Makefiles")
  51. set(cmake_build_args -j)
  52. endif()
  53. firebase_execute_process(
  54. COMMAND ${CMAKE_COMMAND} --build . -- ${cmake_build_args}
  55. WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/external
  56. )
  57. endfunction()
  58. function(add_external_subdirectory NAME)
  59. string(TOUPPER ${NAME} UPPER_NAME)
  60. if (NOT EXISTS ${${UPPER_NAME}_SOURCE_DIR})
  61. set(${UPPER_NAME}_SOURCE_DIR "${FIREBASE_BINARY_DIR}/external/src/${NAME}")
  62. set(${UPPER_NAME}_SOURCE_DIR "${${UPPER_NAME}_SOURCE_DIR}" PARENT_SCOPE)
  63. endif()
  64. if (NOT EXISTS ${${UPPER_NAME}_BINARY_DIR})
  65. set(${UPPER_NAME}_BINARY_DIR "${${UPPER_NAME}_SOURCE_DIR}-build")
  66. set(${UPPER_NAME}_BINARY_DIR "${${UPPER_NAME}_BINARY_DIR}" PARENT_SCOPE)
  67. endif()
  68. if (EXISTS "${${UPPER_NAME}_SOURCE_DIR}/CMakeLists.txt")
  69. add_subdirectory(
  70. ${${UPPER_NAME}_SOURCE_DIR}
  71. ${${UPPER_NAME}_BINARY_DIR}
  72. EXCLUDE_FROM_ALL
  73. )
  74. endif()
  75. endfunction()