firebase #271
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: firebase | |
on: | |
pull_request: | |
workflow_dispatch: | |
jobs: | |
windows: | |
runs-on: windows-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- arch: 'amd64' | |
platform: 'x64' | |
- arch: 'arm64' | |
platform: 'ARM64' | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 1 | |
path: ${{ github.workspace }}/SourceCache/flatbuffers | |
ref: 99aa1ef21dd9dc3f9d4fb0eb82f4b59d0bb5e4c5 | |
repository: google/flatbuffers | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 1 | |
path: ${{ github.workspace }}/SourceCache/firebase-cpp-sdk | |
repository: thebrowsercompany/firebase-cpp-sdk | |
- uses: compnerd/gha-setup-vsdevenv@main | |
with: | |
host_arch: amd64 | |
components: 'Microsoft.VisualStudio.Component.VC.Tools.x86.x64;Microsoft.VisualStudio.Component.VC.Tools.ARM64' | |
arch: ${{ matrix.arch }} | |
- uses: actions/setup-python@v4 | |
id: python | |
with: | |
python-version: 3.9 | |
architecture: 'x64' | |
- name: Install absl-py | |
run: pip install absl-py | |
- name: Configure flatbuffers | |
run: | |
exit 0 | |
cmake -B ${{ github.workspace }}/BinaryCache/flatbuffers ` | |
-D CMAKE_BUILD_TYPE=Release ` | |
-G "Visual Studio 17 2022" ` | |
-A x64 ` | |
-S ${{ github.workspace }}/SourceCache/flatbuffers | |
- name: Build flatc | |
run: cmake --build ${{ github.workspace }}/BinaryCache/flatbuffers --config Release --target flatc | |
- name: Adjust cmake build settings for debugging | |
run: powershell ${{ github.workspace }}/SourceCache/firebase-cpp-sdk/build_scripts/windows/fix_cmake_debugflags.ps1 ${{ github.workspace }}/SourceCache/firebase-cpp-sdk/CMakeLists.txt | |
# For curl we set '-D HAVE_IOCTLSOCKET_FIONBIO=1'. This should automatically be set to 1 by | |
# https://github.com/curl/curl/blob/60580f9f214869b501ba0caaa5a6bf335e6aee1d/CMake/Platforms/WindowsCache.cmake | |
# but this is not what we observe in CI. | |
- name: Configure firebase | |
run: | |
cmake -B ${{ github.workspace }}/BinaryCache/firebase ` | |
-D BUILD_SHARED_LIBS=NO ` | |
-D CMAKE_BUILD_TYPE=Release ` | |
-D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot/Library/firebase/usr ` | |
-G "Visual Studio 17 2022" ` | |
-A ${{ matrix.platform }} ` | |
-S ${{ github.workspace }}/SourceCache/firebase-cpp-sdk ` | |
-D FLATBUFFERS_BUILD_FLATC=NO ` | |
-D FIREBASE_CPP_BUILD_PACKAGE=YES ` | |
-D FIREBASE_GITHUB_ACTION_BUILD=YES ` | |
-D FIREBASE_INCLUDE_LIBRARY_DEFAULT=OFF ` | |
-D FIREBASE_INCLUDE_AUTH=YES ` | |
-D FIREBASE_INCLUDE_FIRESTORE=YES ` | |
-D FIREBASE_INCLUDE_FUNCTIONS=YES ` | |
-D FIREBASE_INCLUDE_STORAGE=YES ` | |
-D FIREBASE_USE_BORINGSSL=YES ` | |
-D MSVC_RUNTIME_LIBRARY_STATIC=NO ` | |
-D CMAKE_C_FLAGS="/D_HAS_EXCEPTIONS=0 /EHsc- /arch:AVX2" ` | |
-D CMAKE_CXX_FLAGS="/D_HAS_EXCEPTIONS=0 /EHsc- /arch:AVX2" ` | |
-D CMAKE_MSVC_DEBUG_INFORMATION_FORMAT=Embedded ` | |
-D HAVE_IOCTLSOCKET_FIONBIO=1 ` | |
-D FIREBASE_PYTHON_HOST_EXECUTABLE:FILEPATH=${{ steps.python.outputs.python-path }} ` | |
-D FLATBUFFERS_FLATC_EXECUTABLE=${{ github.workspace }}/BinaryCache/flatbuffers/Release/flatc.exe | |
- name: Adjust external project build settings for debugging | |
run: | | |
$names = Get-ChildItem -Path "${{ github.workspace }}/BinaryCache/firebase" -File -Recurse -Filter CMakeLists.txt | |
foreach ($name in $names) { | |
$fullName = $name.FullName | |
powershell ${{ github.workspace }}/SourceCache/firebase-cpp-sdk/build_scripts/windows/fix_cmake_debugflags.ps1 $fullName | |
Write-Host "... fixed up debug options for ${fullName}" | |
} | |
- name: Configure firebase after build setting adjustments | |
run: | |
cmake -B ${{ github.workspace }}/BinaryCache/firebase ` | |
-D BUILD_SHARED_LIBS=NO ` | |
-D CMAKE_BUILD_TYPE=Release ` | |
-D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot/Library/firebase/usr ` | |
-G "Visual Studio 17 2022" ` | |
-A ${{ matrix.platform }} ` | |
-S ${{ github.workspace }}/SourceCache/firebase-cpp-sdk ` | |
-D FLATBUFFERS_BUILD_FLATC=NO ` | |
-D FIREBASE_CPP_BUILD_PACKAGE=YES ` | |
-D FIREBASE_GITHUB_ACTION_BUILD=YES ` | |
-D FIREBASE_INCLUDE_LIBRARY_DEFAULT=OFF ` | |
-D FIREBASE_INCLUDE_AUTH=YES ` | |
-D FIREBASE_INCLUDE_FIRESTORE=YES ` | |
-D FIREBASE_INCLUDE_FUNCTIONS=YES ` | |
-D FIREBASE_INCLUDE_STORAGE=YES ` | |
-D FIREBASE_USE_BORINGSSL=YES ` | |
-D MSVC_RUNTIME_LIBRARY_STATIC=NO ` | |
-D CMAKE_MSVC_DEBUG_INFORMATION_FORMAT=Embedded ` | |
-D FIREBASE_PYTHON_HOST_EXECUTABLE:FILEPATH=${{ steps.python.outputs.python-path }} ` | |
-D FLATBUFFERS_FLATC_EXECUTABLE=${{ github.workspace }}/BinaryCache/flatbuffers/Release/flatc.exe | |
# The step below is necessary since Snappy detects if it should use BMI2 instructions on x64 based only on its ability to | |
# compile BMI2 code on the host machine, but we need to disable BMI2 instructions so that the resulting nuget package | |
# can be used on target machines without BMI2 support. Unfortunately Snappy is pulled indirectly from | |
# another dependency (firebase-ios-sdk) in a very involved dependency chain and there is no good way to | |
# set SNAPPY_HAVE_BMI2 without patching its code since compiler directives have less precendence than | |
# the result of the host machine's check_cxx_source_compiles (which ends up in the config.h file). | |
# So, the less messy solution seems to be to patch the config.h file after the configure step, which is what we do below. | |
- name: Change SNAPPY_HAVE_BMI2 in snappy config.h | |
# BMI2 instructions are only relevant in amd64 | |
if: matrix.arch == 'amd64' | |
run: | | |
$snappy_config = "${{ github.workspace }}\BinaryCache\firebase\external\src\firestore-build\external\src\snappy-build\config.h" | |
if (-not (Select-String -Path $snappy_config -Pattern "#define SNAPPY_HAVE_BMI2 1")) { | |
Write-Error "String '#define SNAPPY_HAVE_BMI2 1' expected but not found in $snappy_config" | |
exit 1 | |
} | |
(Get-Content $snappy_config) -replace '#define SNAPPY_HAVE_BMI2 1', '#define SNAPPY_HAVE_BMI2 0' | Set-Content $snappy_config | |
- name: Build firebase | |
run: cmake --build ${{ github.workspace }}/BinaryCache/firebase --config RelWithDebInfo | |
- name: Install firebase | |
run: cmake --build ${{ github.workspace }}/BinaryCache/firebase --config RelWithDebInfo --target install | |
- name: Install firebase (manual) | |
run: | | |
Copy-Item "${{ github.workspace }}/BinaryCache/firebase/external/src/firestore/Firestore/core/include/firebase/firestore/firestore_errors.h" "${{ github.workspace }}/BuildRoot/Library/firebase/usr/include/firebase/firestore/firestore_errors.h" | |
Copy-Item "${{ github.workspace }}/BinaryCache/firebase/external/src/firestore/Firestore/core/include/firebase/firestore/geo_point.h" "${{ github.workspace }}/BuildRoot/Library/firebase/usr/include/firebase/firestore/geo_point.h" | |
Copy-Item "${{ github.workspace }}/BinaryCache/firebase/external/src/firestore/Firestore/core/include/firebase/firestore/timestamp.h" "${{ github.workspace }}/BuildRoot/Library/firebase/usr/include/firebase/firestore/timestamp.h" | |
Write-Host "Copying static libraries ..." | |
$source = "${{ github.workspace }}/BinaryCache/firebase" | |
$libraries = Get-ChildItem -Path $source -File -Recurse -Filter *.lib | |
foreach ($library in $libraries) { | |
$destination = Join-Path -Path "${{ github.workspace }}/BuildRoot/Library/firebase/usr/libs/windows" -ChildPath $library.Name | |
Copy-Item -Path $library.FullName -Destination $destination -Force | |
Write-Host "... copied ${destination}" | |
} | |
# We need this library to be used on CPUs without BMI2 support, so we check that snappy.lib was built correctly, | |
# and fail if it contains BMI2 instructions. | |
# | |
# Note: We explicitly check for bzhi because that is the BMI2 instruction used in snappy source code if BMI2 is enabled: | |
# https://github.com/google/snappy/blob/2c94e11145f0b7b184b831577c93e5a41c4c0346/snappy.cc#L1197 | |
# It may be possible that the compiler decides to add other BMI2 instructions automatically, but by checking | |
# for the absense of 'bzhi' we are at least ensuring that the explicit SNAPPY_HAVE_BMI2 change in config.h is | |
# being respected. | |
- name: Check for Snappy BMI2 instructions | |
# BMI2 instructions are only relevant in amd64 | |
if: matrix.arch == 'amd64' | |
run: | | |
Write-Host "Checking for BMI2 instructions on Snappy.lib..." | |
$snappy_lib = "${{ github.workspace }}/BuildRoot/Library/firebase/usr/libs/windows/snappy.lib" | |
$output = dumpbin /DISASM "$snappy_lib" | Select-String -Pattern "bzhi" | |
if ($output) { | |
Write-Host $output | |
Write-Error "ERROR: A BMI2 instruction ('bzhi') was not supposed to be found in $snappy_lib." | |
exit 1 | |
} else { | |
Write-Output "Success! No BMI2 instructions were found in snappy.lib." | |
} | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: firebase-windows-${{ matrix.arch }} | |
path: ${{ github.workspace }}/BuildRoot/Library/firebase | |
- name: Print built libraries | |
run: Get-ChildItem -Recurse -Name -Path ${{ github.workspace }}\BuildRoot\Library\firebase -Include *.lib | |
- name: Package firebase-cpp-sdk | |
run: | | |
@" | |
<?xml version="1.0" encoding="utf-8"?> | |
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> | |
<metadata> | |
<id>com.google.firebase.windows.${{ matrix.arch }}</id> | |
<version>0.0.0.0</version> | |
<title>Firebase C++ SDK</title> | |
<description>C++ Firebase SDK</description> | |
<authors>Google, Inc.</authors> | |
<projectUrl>https://firebase.google.com</projectUrl> | |
<repository type="git" url="https://github.com/google/firebase-cpp-sdk" branch="main" /> | |
</metadata> | |
<files> | |
<file src="`$BUILDROOT`$\usr\include\firebase\app.h" target="include/firebase" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\auth.h" target="include/firebase" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\firestore.h" target="include/firebase" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\functions.h" target="include/firebase" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\future.h" target="include/firebase" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\log.h" target="include/firebase" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\storage.h" target="include/firebase" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\util.h" target="include/firebase" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\variant.h" target="include/firebase" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\auth\credential.h" target="include/firebase/auth" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\auth\types.h" target="include/firebase/auth" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\auth\user.h" target="include/firebase/auth" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\firestore\aggregate_query.h" target="include/firebase/firestore" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\firestore\aggregate_query_snapshot.h" target="include/firebase/firestore" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\firestore\aggregate_source.h" target="include/firebase/firestore" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\firestore\collection_reference.h" target="include/firebase/firestore" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\firestore\document_change.h" target="include/firebase/firestore" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\firestore\document_reference.h" target="include/firebase/firestore" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\firestore\document_snapshot.h" target="include/firebase/firestore" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\firestore\field_path.h" target="include/firebase/firestore" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\firestore\field_value.h" target="include/firebase/firestore" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\firestore\filter.h" target="include/firebase/firestore" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\firestore\firestore_errors.h" target="include/firebase/firestore" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\firestore\geo_point.h" target="include/firebase/firestore" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\firestore\listener_registration.h" target="include/firebase/firestore" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\firestore\load_bundle_task_progress.h" target="include/firebase/firestore" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\firestore\map_field_value.h" target="include/firebase/firestore" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\firestore\metadata_changes.h" target="include/firebase/firestore" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\firestore\query.h" target="include/firebase/firestore" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\firestore\query_snapshot.h" target="include/firebase/firestore" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\firestore\settings.h" target="include/firebase/firestore" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\firestore\set_options.h" target="include/firebase/firestore" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\firestore\snapshot_metadata.h" target="include/firebase/firestore" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\firestore\source.h" target="include/firebase/firestore" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\firestore\timestamp.h" target="include/firebase/firestore" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\firestore\transaction.h" target="include/firebase/firestore" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\firestore\transaction_options.h" target="include/firebase/firestore" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\firestore\write_batch.h" target="include/firebase/firestore" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\functions\callable_reference.h" target="include/firebase/functions" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\functions\callable_result.h" target="include/firebase/functions" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\functions\common.h" target="include/firebase/functions" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\storage\common.h" target="include/firebase/storage" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\storage\controller.h" target="include/firebase/storage" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\storage\listener.h" target="include/firebase/storage" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\storage\metadata.h" target="include/firebase/storage" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\storage\storage_reference.h" target="include/firebase/storage" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\internal\common.h" target="include/firebase/internal" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\internal\future_impl.h" target="include/firebase/internal" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\internal\mutex.h" target="include/firebase/internal" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\internal\platform.h" target="include/firebase/internal" /> | |
<file src="`$BUILDROOT`$\usr\include\firebase\internal\type_traits.h" target="include/firebase/internal" /> | |
<!-- FIXME(compnerd) is this header actually required? --> | |
<file src="`$BUILDROOT`$\usr\include\google_play_services\availability.h" target="include/google_play_services" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\firebase_app.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\firebase_auth.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\firebase_firestore.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\firebase_functions.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\firebase_storage.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\firebase_rest_lib.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\firestore_core.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\firestore_nanopb.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\firestore_protos_nanopb.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\firestore_util.lib" target="lib" /> | |
<!-- dependencies --> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_bad_optional_access.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_bad_variant_access.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_base.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_city.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_civil_time.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_cord.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_cord_internal.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_cordz_functions.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_cordz_handle.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_cordz_info.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_crc_cord_state.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_crc_cpu_detect.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_crc_internal.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_crc32c.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_debugging_internal.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_demangle_internal.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_exponential_biased.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_flags_commandlineflag_internal.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_flags_commandlineflag.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_flags_config.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_flags_internal.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_flags_marshalling.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_flags_private_handle_accessor.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_flags_program_name.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_flags_reflection.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_graphcycles_internal.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_hash.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_hashtablez_sampler.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_int128.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_kernel_timeout_internal.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_log_severity.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_low_level_hash.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_malloc_internal.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_random_distributions.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_random_internal_seed_material.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_random_internal_platform.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_random_internal_pool_urbg.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_random_internal_randen.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_random_internal_randen_hwaes.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_random_internal_randen_hwaes_impl.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_random_internal_randen_slow.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_random_seed_gen_exception.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_random_seed_sequences.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_raw_hash_set.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_raw_logging_internal.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_spinlock_wait.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_stacktrace.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_status.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_statusor.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_str_format_internal.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_strerror.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_string_view.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_strings.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_strings_internal.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_symbolize.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_synchronization.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_throw_delegate.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_time.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\absl_time_zone.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\address_sorting.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\cares.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\crypto.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\fipsmodule.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\flatbuffers.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\gpr.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\grpc.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\grpc++.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\leveldb.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\libcurl.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\libprotobuf.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\libuWS.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\protobuf-nanopb.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\re2.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\snappy.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\ssl.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\uv_a.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\upb_base_lib.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\upb_json_lib.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\upb_mem_lib.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\upb_message_lib.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\upb_textformat_lib.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\utf8_range_lib.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\utf8_validity.lib" target="lib" /> | |
<file src="`$BUILDROOT`$\usr\libs\windows\zlibstatic.lib" target="lib" /> | |
</files> | |
</package> | |
"@ | Out-File -Encoding UTF8 firebase.nuspec | |
nuget pack -Properties BUILDROOT=${{ github.workspace }}\BuildRoot\Library\firebase -Suffix (git -C ${{ github.workspace }}/SourceCache/firebase-cpp-sdk log -1 --format=%h) firebase.nuspec | |
shell: pwsh | |
- uses: actions/upload-artifact@v3 | |
if: github.event_name != 'pull_request' | |
with: | |
name: windows-${{ matrix.arch }}.nupkg | |
path: com.google.firebase.windows.${{ matrix.arch }}.*.nupkg | |
- name: Publish NuGet Packages | |
if: github.event_name != 'pull_request' | |
env: | |
NUGET_SOURCE_NAME: TheBrowserCompany | |
NUGET_SOURCE_URL: https://nuget.pkg.github.com/thebrowsercompany/index.json | |
NUGET_SOURCE_USERNAME: thebrowsercompany-bot2 | |
NUGET_SOURCE_PASSWORD: ${{ secrets.GITHUB_TOKEN }} | |
NUGET_API_KEY: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
if ((nuget sources List | Select-String "${env:NUGET_SOURCE_NAME}").Count -gt 0) { | |
nuget sources Remove -Name "${env:NUGET_SOURCE_NAME}" | |
} | |
nuget sources Add -Name ${env:NUGET_SOURCE_NAME} -Source ${env:NUGET_SOURCE_URL} -Username ${env:NUGET_SOURCE_USERNAME} -Password ${env:NUGET_SOURCE_PASSWORD} -StorePasswordInClearText | |
nuget setApiKey ${env:NUGET_API_KEY} -Source ${env:NUGET_SOURCE_URL} | |
$pkgs = Get-ChildItem -Path com.google.firebase.windows.${{ matrix.arch }}.*.nupkg | |
nuget push $pkgs[0].Name -Source ${env:NUGET_SOURCE_URL} -SkipDuplicate | |
shell: pwsh | |
android: | |
runs-on: ubuntu-20.04 | |
strategy: | |
fail-fast: true | |
matrix: | |
include: | |
- arch: 'arm64-v8a' | |
- arch: 'x86_64' | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 1 | |
path: ${{ github.workspace }}/SourceCache/firebase-cpp-sdk | |
ref: refs/heads/compnerd/swift | |
repository: thebrowsercompany/firebase-cpp-sdk | |
- uses: actions/checkout@v3 | |
with: | |
path: ${{ github.workspace }}/SourceCache/firebase-android-sdk | |
repository: firebase/firebase-android-sdk | |
- name: Install Ninja | |
run: sudo apt-get install -y ninja-build | |
- name: Download Android NDK | |
run: | | |
NDK_VERSION="r21e" | |
NDK_FILE="android-ndk-${NDK_VERSION}-linux-x86_64.zip" | |
curl -L -o "${NDK_FILE}" "https://dl.google.com/android/repository/${NDK_FILE}" | |
unzip -q "${NDK_FILE}" | |
rm "${NDK_FILE}" | |
echo "NDK_ROOT=$(pwd)/android-ndk-${NDK_VERSION}" >> $GITHUB_ENV | |
echo "ANDROID_NDK_HOME=$(pwd)/android-ndk-${NDK_VERSION}" >> $GITHUB_ENV | |
- name: Install absl-py | |
run: pip install absl-py | |
- name: Set up JDK 17 | |
uses: actions/setup-java@v3 | |
with: | |
java-version: '17' | |
distribution: 'temurin' | |
- name: Build Android | |
run: | | |
echo "NDK: $NDK_ROOT" | |
cd ${{ github.workspace }}/SourceCache/firebase-android-sdk | |
git submodule update --init --recursive | |
./gradlew :firebase-common:build | |
./gradlew tasks | |
find ${{ github.workspace }}/SourceCache/firebase-android-sdk -name "*.aar" | |
find ${{ github.workspace }}/SourceCache/firebase-android-sdk -name "*.jar" | |
exit 1 | |
- name: Build | |
run: | | |
echo "NDK: $NDK_ROOT" | |
export SRC=${{ github.workspace }}/SourceCache/firebase-cpp-sdk | |
export DST=${{ github.workspace }}/SourceCache/firebase-cpp-sdk | |
function cmake_build { | |
arch=$1 | |
module=$2 | |
extra_params=$3 | |
src_dir=$SRC | |
dst_dir=$DST | |
ndk_dir="$NDK_ROOT" | |
config_command="cmake \ | |
-H$src_dir \ | |
-B$dst_dir/$module/.externalNativeBuild/cmake/release/$arch \ | |
-DANDROID_ABI=$arch \ | |
-DANDROID_PLATFORM=android-19 \ | |
-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=$dst_dir/$module/build/intermediates/cmake/release/obj/$arch \ | |
-D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot/Library/firebase/usr \ | |
-DCMAKE_BUILD_TYPE=Debug \ | |
-DANDROID_NDK=$ndk_dir \ | |
-DCMAKE_TOOLCHAIN_FILE=$ndk_dir/build/cmake/android.toolchain.cmake \ | |
-GNinja \ | |
-DFIREBASE_INCLUDE_LIBRARY_DEFAULT=OFF \ | |
-D FIREBASE_GITHUB_ACTION_BUILD=YES \ | |
$extra_params" | |
echo "Configuring $module..." | |
eval "$config_command" | |
echo "Building $module..." | |
cmake --build $dst_dir/$module/.externalNativeBuild/cmake/release/$arch | |
} | |
arch="${{ matrix.arch }}" | |
cd ${{ github.workspace }}/SourceCache/firebase-cpp-sdk | |
# Prebuild the gradle app to avoid any gradle <-> cmake issues on GHA workflow. | |
./gradlew :app:invites_resources:generateDexJarRelease | |
# Build the invididual components | |
cmake_build $arch "app" "" | |
cmake_build $arch "storage" "-DFIREBASE_CPP_USE_PRIOR_GRADLE_BUILD=ON -DFIREBASE_INCLUDE_STORAGE=ON" | |
cmake_build $arch "messaging" "-DFIREBASE_CPP_USE_PRIOR_GRADLE_BUILD=ON -DFIREBASE_INCLUDE_MESSAGING=ON" | |
cmake_build $arch "analytics" "-DFIREBASE_CPP_USE_PRIOR_GRADLE_BUILD=ON -DFIREBASE_INCLUDE_ANALYTICS=ON" | |
cmake_build $arch "database" "-DFIREBASE_CPP_USE_PRIOR_GRADLE_BUILD=ON -DFIREBASE_INCLUDE_DATABASE=ON" | |
cmake_build $arch "gma" "-DFIREBASE_CPP_USE_PRIOR_GRADLE_BUILD=ON -DFIREBASE_INCLUDE_GMA=ON" | |
cmake_build $arch "dynamic_links" "-DFIREBASE_CPP_USE_PRIOR_GRADLE_BUILD=ON -DFIREBASE_INCLUDE_DYNAMIC_LINKS=ON" | |
cmake_build $arch "installations" "-DFIREBASE_CPP_USE_PRIOR_GRADLE_BUILD=ON -DFIREBASE_INCLUDE_INSTALLATIONS=ON" | |
cmake_build $arch "app_check" "-DFIREBASE_CPP_USE_PRIOR_GRADLE_BUILD=ON -DFIREBASE_INCLUDE_APP_CHECK=ON" | |
cmake_build $arch "firestore" "-DFIREBASE_CPP_USE_PRIOR_GRADLE_BUILD=ON -DFIREBASE_INCLUDE_FIRESTORE=ON" | |
cmake_build $arch "auth" "-DFIREBASE_CPP_USE_PRIOR_GRADLE_BUILD=ON -DFIREBASE_INCLUDE_AUTH=ON" | |
cmake_build $arch "functions" "-DFIREBASE_CPP_USE_PRIOR_GRADLE_BUILD=ON -DFIREBASE_INCLUDE_FUNCTIONS=ON" | |
cmake_build $arch "remote_config" "-DFIREBASE_CPP_USE_PRIOR_GRADLE_BUILD=ON -DFIREBASE_INCLUDE_REMOTE_CONFIG=ON" | |
- name: Install (manual) | |
run: | | |
echo "Copying static libraries ..." | |
source="${{ github.workspace }}/SourceCache/firebase-cpp-sdk" | |
destination_dir=${{ github.workspace }}/BuildRoot/Library/firebase/usr/libs/android/${{ matrix.arch }} | |
mkdir -p $destination_dir | |
while IFS= read -r file; do | |
cp "$file" "$destination_dir" | |
echo "Copied: $file" | |
done < <(find $source -type f -name "*.a") | |
echo "Copying header files ..." | |
header_destination_dir=${{ github.workspace }}/BuildRoot/Library/firebase/usr/include/firebase | |
firebase_dir=${{ github.workspace }}/SourceCache/firebase-cpp-sdk | |
mkdir -p $header_destination_dir \ | |
$header_destination_dir/internal \ | |
$header_destination_dir/auth \ | |
$header_destination_dir/firestore \ | |
$header_destination_dir/functions \ | |
$header_destination_dir/storage | |
for header in ${firebase_dir}/app/src/include/firebase/app.h \ | |
${firebase_dir}/app/src/include/firebase/future.h \ | |
${firebase_dir}/app/src/include/firebase/log.h \ | |
${firebase_dir}/app/src/include/firebase/util.h \ | |
${firebase_dir}/app/src/include/firebase/variant.h \ | |
${firebase_dir}/auth/src/include/firebase/auth.h \ | |
${firebase_dir}/firestore/src/include/firebase/firestore.h \ | |
${firebase_dir}/functions/src/include/firebase/functions.h \ | |
${firebase_dir}/storage/src/include/firebase/storage.h \ | |
; do | |
cp $header ${header_destination_dir} | |
done | |
for header in ${firebase_dir}/app/src/include/firebase/internal/*.h; do | |
cp $header ${header_destination_dir}/internal/ | |
done | |
for header in ${firebase_dir}/auth/src/include/firebase/auth/*.h; do | |
cp $header ${header_destination_dir}/auth/ | |
done | |
for header in ${firebase_dir}/firestore/src/include/firebase/firestore/*.h; do | |
cp $header ${header_destination_dir}/firestore/ | |
done | |
for header in ${firebase_dir}/functions/src/include/firebase/functions/*.h; do | |
cp $header ${header_destination_dir}/functions/ | |
done | |
for header in ${firebase_dir}/storage/src/include/firebase/storage/*.h; do | |
cp $header ${header_destination_dir}/storage/ | |
done | |
for header in ${firebase_dir}/app/.externalNativeBuild/cmake/release/${{ matrix.arch }}/external/src/firestore/Firestore/core/include/firebase/firestore/firestore_errors.h \ | |
${firebase_dir}/app/.externalNativeBuild/cmake/release/${{ matrix.arch }}/external/src/firestore/Firestore/core/include/firebase/firestore/geo_point.h \ | |
${firebase_dir}/app/.externalNativeBuild/cmake/release/${{ matrix.arch }}/external/src/firestore/Firestore/core/include/firebase/firestore/timestamp.h ; do | |
cp $header ${header_destination_dir}/firestore/ | |
done | |
mkdir -p "${{ github.workspace }}/BuildRoot/Library/firebase/usr/android" | |
for file in $(find ${firebase_dir} -name "*.aar"); do | |
cp "$file" "${{ github.workspace }}/BuildRoot/Library/firebase/usr/android" | |
done | |
find ${firebase_dir} -name "*.aar" | |
find ${firebase_dir} -name "*.jar" | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: firebase-android-${{ matrix.arch }} | |
path: ${{ github.workspace }}/BuildRoot/Library/firebase | |
release: | |
needs: [windows,android] | |
if: github.event_name != 'pull_request' | |
runs-on: windows-latest | |
steps: | |
- name: Download firebase-android-arm64-v8a artifact | |
uses: actions/download-artifact@v3 | |
with: | |
name: firebase-android-arm64-v8a | |
path: ${{ github.workspace }}/firebase-android-arm64-v8a | |
- name: Download firebase-android-x86_64 artifact | |
uses: actions/download-artifact@v3 | |
with: | |
name: firebase-android-x86_64 | |
path: ${{ github.workspace }}/firebase-android-x86_64 | |
- name: Download firebase-windows-amd64 artifact | |
uses: actions/download-artifact@v3 | |
with: | |
name: firebase-windows-amd64 | |
path: ${{ github.workspace }}/firebase-windows-amd64 | |
- name: Download firebase-windows-arm64 artifact | |
uses: actions/download-artifact@v3 | |
with: | |
name: firebase-windows-arm64 | |
path: ${{ github.workspace }}/firebase-windows-arm64 | |
- name: Create Release | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
Compress-Archive -Path "${{ github.workspace }}/firebase-android-arm64-v8a" -DestinationPath firebase-android-arm64-v8a.zip | |
Get-FileHash -Path firebase-android-arm64-v8a.zip -Algorithm SHA256 > firebase-android-arm64-v8a.zip.sha256 | |
Compress-Archive -Path "${{ github.workspace }}/firebase-android-x86_64" -DestinationPath firebase-android-x86_64.zip | |
Get-FileHash -Path firebase-android-x86_64.zip -Algorithm SHA256 > firebase-android-x86_64.zip.sha256 | |
Compress-Archive -Path "${{ github.workspace }}/firebase-windows-amd64" -DestinationPath firebase-windows-amd64.zip | |
Get-FileHash -Path firebase-windows-amd64.zip -Algorithm SHA256 > firebase-windows-amd64.zip.sha256 | |
Compress-Archive -Path "${{ github.workspace }}/firebase-windows-arm64" -DestinationPath firebase-windows-arm64.zip | |
Get-FileHash -Path firebase-windows-arm64.zip -Algorithm SHA256 > firebase-windows-arm64.zip.sha256 | |
$Date = Get-Date -Format 'yyyyMMdd' | |
$Release = $(gh release list -R ${{ github.repository }} | Select-String -Pattern $Date -AllMatches).Count | |
gh release create "$Date.$Release" -R ${{ github.repository }} | |
gh release upload "$Date.$Release" firebase-android-arm64-v8a.zip -R ${{ github.repository }} | |
gh release upload "$Date.$Release" firebase-android-arm64-v8a.zip.sha256 -R ${{ github.repository }} | |
gh release upload "$Date.$Release" firebase-android-x86_64.zip -R ${{ github.repository }} | |
gh release upload "$Date.$Release" firebase-android-x86_64.zip.sha256 -R ${{ github.repository }} | |
gh release upload "$Date.$Release" firebase-windows-amd64.zip -R ${{ github.repository }} | |
gh release upload "$Date.$Release" firebase-windows-amd64.zip.sha256 -R ${{ github.repository }} | |
gh release upload "$Date.$Release" firebase-windows-arm64.zip -R ${{ github.repository }} | |
gh release upload "$Date.$Release" firebase-windows-arm64.zip.sha256 -R ${{ github.repository }} | |