Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DRAFT: Split shared/dynamic libraries from static/build artifacts #223

Draft
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

carterbox
Copy link
Member

@carterbox carterbox commented Jan 3, 2024

Checklist

  • Used a personal fork of the feedstock to propose changes
  • Bumped the build number (if the version is unchanged)
  • Reset the build number to 0 (if the version changed)
  • Re-rendered with the latest conda-smithy (Use the phrase @conda-forge-admin, please rerender in a comment in this PR for automated rerendering)
  • Ensured the license file is being packaged.

Closes #42

This PR separates the shared and dynamically loaded libraries in /lib and /plugins into a separate output from qt-main; this new output is called libqt5.

The purpose of creating this new output is to reduce the size of run exports for downstream packages which link to qt.

The size of the new libqt5 package is 31MB/100MB (compressed/uncompressed) which is about half the size of the current qt-main package (61MB/254MB).

As you can see from the diff, the build script is unchanged.

There is one change to the top-level build/host requirements: The libclang version is now manually pinned to 15 via the conda_build_config.yaml. This is because using pin_compatible in the outputs section causes an error in conda-build as noted in #223 (comment).

A new output section which splits the artifacts and dependencies using glob expressions.

Runtime dependencies on libraries who now have run_exports upstream were removed.

For testing, I have compared the artifacts using git, to identify added/missing files.

  • linux64 - No significant difference; some pyc files are not packaged.
  • osx64
  • win64

https://doc.qt.io/qt-6/deployment-plugins.html

@conda-forge-webservices
Copy link
Contributor

Hi! This is the friendly automated conda-forge-linting service.

I wanted to let you know that I linted all conda-recipes in your PR (recipe) and found some lint.

Here's what I've got...

For recipe:

  • Selectors are suggested to take a <two spaces>#<one space>[<expression>] form. See lines [263]

@conda-forge-webservices
Copy link
Contributor

conda-forge-webservices bot commented Jan 3, 2024

Hi! This is the friendly automated conda-forge-linting service.

I just wanted to let you know that I linted all conda-recipes in your PR (recipe/meta.yaml) and found it was in an excellent condition.

@carterbox
Copy link
Member Author

There is some problem with rendering the recipe due to the replacements key in the conda_build_config.yaml

Traceback (most recent call last):
  File "/opt/conda/bin/conda-mambabuild", line 10, in <module>
    sys.exit(main())
  File "/opt/conda/lib/python3.10/site-packages/boa/cli/mambabuild.py", line 256, in main
    call_conda_build(action, config)
  File "/opt/conda/lib/python3.10/site-packages/boa/cli/mambabuild.py", line 228, in call_conda_build
    result = api.build(
  File "/opt/conda/lib/python3.10/site-packages/conda_build/api.py", line 254, in build
    return build_tree(
  File "/opt/conda/lib/python3.10/site-packages/conda_build/build.py", line 3789, in build_tree
    packages_from_this = build(
  File "/opt/conda/lib/python3.10/site-packages/conda_build/build.py", line 2470, in build
    output_metas = expand_outputs([(m, need_source_download, need_reparse_in_env)])
  File "/opt/conda/lib/python3.10/site-packages/conda_build/render.py", line 932, in expand_outputs
    get_all_replacements(m.config)
  File "/opt/conda/lib/python3.10/site-packages/conda_build/build.py", line 1109, in get_all_replacements
    assert isinstance(
AssertionError: Found 'all_replacements[0]' (('tag', 'glob_patterns', 'regex_re', 'replacement_re')), but it is not a dict

- xcrun

# Only what's needed for run_exports downstream
- name: libqt5
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be for the same reason why the main output is qt-main instead of qt

Suggested change
- name: libqt5
- name: libqt5-main

@carterbox
Copy link
Member Author

Probably rerendering has broken the osx build because the vmImage has been updated.

- {{ library }}bin/*.dll # [win]
- {{ library }}lib/lib*.*.dylib # [osx]
- {{ library }}lib/lib*.so.* # [linux]
- "{{ library }}plugins/**/*"
Copy link
Member Author

@carterbox carterbox Oct 23, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@conda-forge/qt-main, before I move to the next step (trimming runtime dependencies). I need to know if this package split is correct. Are there also plugins or other binaries needed by end users at runtime located in $PREFIX/qml/**? Maybe I should add something like:

Suggested change
- "{{ library }}plugins/**/*"
- "{{ library }}plugins/**/*"
- "{{ library }}**/*plugin.so"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Remove static libraries?
2 participants