firebase-cpp-sdk icon indicating copy to clipboard operation
firebase-cpp-sdk copied to clipboard

Use llvm-objcopy to package Windows binaries

Open triplef opened this issue 2 years ago • 13 comments

Description

Changes the packaging script to use LLVM binutils. This fixes object files corrupted by using objcopy by using llvm-objcopy instead. While the corrupted files were working fine when using the Visual Studio toolchain they were leading to errors when using the LLVM toolchain.

See https://github.com/firebase/firebase-cpp-sdk/issues/793#issuecomment-1676632194 for details.


Testing

Needs to be run as part of the GitHub actions packaging. I will test builds once they are available.


Type of Change

Place an x the applicable box:

  • [ ] Bug fix. Add the issue # below if applicable.
  • [ ] New feature. A non-breaking change which adds functionality.
  • [x] Other, such as a build process or documentation change.

Notes

  • Bug fixes and feature changes require an update to the Release Notes section of release_build_files/readme.md.
  • Read the contribution guidelines CONTRIBUTING.md.
  • Changes to the public API require an internal API review. If you'd like to help us make Firebase APIs better, please propose your change in a feature request so that we can discuss it together.

triplef avatar Aug 16 '23 15:08 triplef

@jonsimantov I hope I made the right changes based on your feedback - if not please let me know. Any chance you could trigger the CI to run with this branch?

triplef avatar Aug 27 '23 18:08 triplef

I'll go ahead and test the packaging process with these changes. To do that I believe I'll have to copy these changes into a branch within this repo.

jonsimantov avatar Sep 14 '23 18:09 jonsimantov

Invalid workflow file: .github/workflows/cpp-packaging.yml#L130 The workflow is not valid. .github/workflows/cpp-packaging.yml (Line: 130, Col: 16): Unexpected symbol: '['. Located at position 43 within expression: matrix.tools_platform == 'darwin' && join(['-', env.xcodeVersion]) || ''

jonsimantov avatar Sep 14 '23 18:09 jonsimantov

Thanks for checking – can you try again with the latest changes now please?

triplef avatar Sep 14 '23 19:09 triplef

OK, here goes: https://github.com/firebase/firebase-cpp-sdk/actions/runs/6190110457

jonsimantov avatar Sep 14 '23 19:09 jonsimantov

Fixed a missing quote, round 2: https://github.com/firebase/firebase-cpp-sdk/actions/runs/6190946332

jonsimantov avatar Sep 14 '23 21:09 jonsimantov

Thanks @jonsimantov! I tried the build and it works great for me using the LLVM toolchain.

One thing I noticed is that the firebase_cpp_sdk_windows.zip artifact itself contains another ZIP file, but I don’t think that stems from these changes?

triplef avatar Sep 15 '23 06:09 triplef

Unfortunately, the integration tests failed to build against the newly packaged SDK on Windows.

I've attached the log file.

8_Build integration tests.txt

jonsimantov avatar Sep 15 '23 18:09 jonsimantov

Hmm ok, so the issue here is all these error LNK2001: unresolved external symbol errors, right? Any idea how they could be caused by this change?

Is this also a new issue: Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed?

triplef avatar Sep 15 '23 20:09 triplef

@aganea would you be able to take a look at these errors? Unfortunately I’m a bit lost about how this change might be causing them.

triplef avatar Oct 09 '23 06:10 triplef

I rebased the branch onto the latest main.

@jonsimantov could you please run the tests once more to see if these linker errors are still happening? 🙏

triplef avatar Jan 05 '24 10:01 triplef

It's still failing to link. Log attached: 8_Build integration tests.txt

jonsimantov avatar Jan 10 '24 22:01 jonsimantov

Thank you @jonsimantov! It seems like the packaged library is missing a bunch of symbols.

Since the -L flag we’re adding in this patch is also making the packaging script use llvm-nm and llvm-ar (in addition to llvm-objcopy), I’m wondering if those are somehow behaving differently to cause this. Do they require some extra flags maybe – any idea @aganea?

Here is the same log without timestamps as well as the one from the latest run off the main branch for comparison:

The Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed is also present in the latest run and thus not a new issue.

triplef avatar Jan 11 '24 07:01 triplef