Fix: Prevent Unnecessary Rebuilds Due to QEMU Config File Regeneration #2036
+41
−76
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem:
Currently, the Unicorn engine subproject is configured to regenerate QEMU's
config-host.h
and the architecture-specificconfig-target.h
files every time CMake is run. This happens even if there haven't been any relevant changes to the project, leading to unnecessary rebuilds of the Unicorn library and any projects depending on it.Solution:
This PR introduces conditional regeneration of the QEMU config files. The logic now checks if the files already exist in the build directory. If they do, regeneration is skipped, saving valuable build time.
Further Considerations:
While this PR addresses the most common case of unnecessary regeneration, there might be more subtle scenarios where we still want to regenerate the config files. Here are some potential approaches for future refinement:
Timestamp Comparison: We could compare the timestamps of the input (e.g.,
qemu/configure
script) and output (e.g.,config-host.h
) files. If the input file is newer, it suggests changes have been made that require regeneration.Configuration Hashing: A more robust approach would be to hash relevant configuration options and store the hash. If the configuration changes, the hash would change, triggering regeneration.
User-Controllable Option: Provide a CMake option (e.g.,
UNICORN_FORCE_REGEN
) to give users control over forcing regeneration when desired.