RFE: de-duplication of installed headers

Issue #299 resolved
Paul Hargrove created an issue

Currently we may install as many as 16 library variants (for instance {seq,par} X {O3,debug} X {smp,udp,mpi,NATIVE}). While each library is distinct, they currently each contain a seprate include/ directory with identical contents.

It should be a straight-forward engineering task to install only one instance of the headers and construct the proper -I... in upcxx-meta

Comments (6)

  1. Paul Hargrove reporter
    • changed status to open

    Since this issue was first entered, upcxx_config.hpp has been added and it does vary with the library it is paired to. That will make the solution marginally more difficult, but still fairly mechanical.

    I am now considering attacking this issue for the upcoming release, but its resolution in the next few business days is far from certain.

  2. Paul Hargrove reporter

    A proposed solution is now in pull request 333.

    However, I am NOT considering merge of that PR for the pending 2021.3.0 release due to the perceived reward (5MB on disk based on a Dirac install) relative the the risk (unusable install). I have updated the Milestone accordingly.

    I hope to merge a week or two after we release and then a few weeks of nightly testing and corresponding nightly and bleeding-edge installs should let us know of any regressions.

  3. Paul Hargrove reporter

    De-duplication of installed headers

    This commit revises the install targets in bld/Makefile to install a single instance of include/upcxx/ to be used with all of the libraries.

    Installed per-library directories now contain a gen_include/upcxx holding only the generated upcxx_config.hpp. All other headers are now installed in $(prefix)/include/upcxx. Care has been taken to avoid parallel installs of the headers, which meant splitting the do-upcxx-install-headers target into do-upcxx-install-include and do-upcxx-install-gen_include.

    The generated bottom-level upcxx-meta has been updated for the changed layout.

    The per-library build directories continue to contain both an include and gen_include, where the include/upcxx remains a symlink to $(top_srcdir)/src. While it was tempting to merge the per-library symlinks in the build directory, the current scheme is parallel-make-safe in a way I could not achieve using ln -sf.

    There were also some "incident" changes for maintainability. In addition to the changed name (headers -> include) on the target handling the header installation, do-upcxx-install-all was renamed do-upcxx-install-one-codemode to more accurately reflect its role. Also, some missing PHONY: dependencies were added for paranoia.

    Resolves issue 299

    → <<cset f0a5ed14f35c>>

  4. Log in to comment