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

Cmake speedups #1905

Merged
merged 3 commits into from
Feb 18, 2022
Merged

Cmake speedups #1905

merged 3 commits into from
Feb 18, 2022

Commits on Feb 17, 2022

  1. Always skip update command for git based external projects

    I noticed that some external projects were being reconfigured/built
    with every make, even though no files in the external project had been
    updated.
    
    With some debugging I noticed that git based external projects were
    re-running their "update" step every time, and that in turn caused the
    configure/build/install steps to re-run as well. (Generally the build
    step is a no-op as the Makefile/etc. in the external project is well
    formed and doesn't do anything, but the configure/install steps still
    run).
    
    It seems related to this cmake bug:
    https://gitlab.kitware.com/cmake/cmake/-/issues/19703. In short, the
    git update step for an external project does not create any "done"
    file that denotes that the files are still up-to-date. Without that
    "done" file, the update step is always run, and that in turn causes
    the other steps for the external project to re-run as well.
    
    The best way to fix this seems to be to skip the update step by
    defining an empty UPDATE_COMMAND. As long as the downloaded code for a
    given hash/tag/etc does not change, the update step is unnecessary.
    
    And if we *really* wanted to ensure unchanged dependencies, we would
    download our own copies anyway.
    
    Making this change significantly cleans up the falco build to avoid
    rebuilding git based external dependencies.
    
    Signed-off-by: Mark Stemm <mark.stemm@gmail.com>
    mstemm committed Feb 17, 2022
    Configuration menu
    Copy the full SHA
    11d2029 View commit details
    Browse the repository at this point in the history
  2. Cmake function to copy files from source to build dir, as a target

    Define a cmake function copy_files_to_build_dir(source_files,
    targetsuffix) that defines a single custom target and single custom
    command to copy the set of source files to
    CMAKE_CURRENT_BINARY_DIR. All of the real work is done via cmake -E
    copy_if_different.
    
    This function will replace the nearly identical cmake code in several
    other directories. This function has the advantage of being a single
    target for the set of source files instead of a target per-file.
    
    Signed-off-by: Mark Stemm <mark.stemm@gmail.com>
    mstemm committed Feb 17, 2022
    Configuration menu
    Copy the full SHA
    a1443ef View commit details
    Browse the repository at this point in the history
  3. Use cmake function to copy files, as a single target

    Replace nearly-identical blocks of code that defined individual custom
    targets/custom commands to copy files from source to build dir with
    the copy_files_to_build_dir function.
    
    This reduces the number of build targets and speeds up/cleans up the
    make output.
    
    Signed-off-by: Mark Stemm <mark.stemm@gmail.com>
    mstemm committed Feb 17, 2022
    Configuration menu
    Copy the full SHA
    517ff1b View commit details
    Browse the repository at this point in the history