https://github.com/chelcassanova updated https://github.com/llvm/llvm-project/pull/141116
>From fcb4a366d9f4659273480f49c491fc50a179cfff Mon Sep 17 00:00:00 2001 From: Chelsea Cassanova <chelsea_cassan...@apple.com> Date: Thu, 22 May 2025 11:00:06 -0700 Subject: [PATCH] [lldb][headers] Create script to fix up versioning This commit creates a Python script that fixes up the versioning information in lldb-defines.h. It also moves the build logic for fixing up the lldb headers from being in the framework only to being in the same location that we create the liblldb target. --- lldb/scripts/framework-header-fix.sh | 6 --- lldb/scripts/version-header-fix.py | 46 +++++++++++++++++++ lldb/source/API/CMakeLists.txt | 34 ++++++++++++++ lldb/test/Shell/Scripts/Inputs/lldb-defines.h | 7 +++ .../TestFrameworkFixScriptIncludes.test | 17 +++++++ .../Shell/Scripts/TestVersionFixScript.test | 11 +++++ 6 files changed, 115 insertions(+), 6 deletions(-) create mode 100755 lldb/scripts/version-header-fix.py create mode 100644 lldb/test/Shell/Scripts/Inputs/lldb-defines.h create mode 100644 lldb/test/Shell/Scripts/TestFrameworkFixScriptIncludes.test create mode 100644 lldb/test/Shell/Scripts/TestVersionFixScript.test diff --git a/lldb/scripts/framework-header-fix.sh b/lldb/scripts/framework-header-fix.sh index 3459dd91c9ec1..345579c80cdf5 100755 --- a/lldb/scripts/framework-header-fix.sh +++ b/lldb/scripts/framework-header-fix.sh @@ -7,11 +7,5 @@ for file in `find $1 -name "*.h"` do /usr/bin/sed -i.bak 's/\(#include\)[ ]*"lldb\/\(API\/\)\{0,1\}\(.*\)"/\1 <LLDB\/\3>/1' "$file" /usr/bin/sed -i.bak 's|<LLDB/Utility|<LLDB|' "$file" - LLDB_VERSION=`echo $2 | /usr/bin/sed -E 's/^([0-9]+).([0-9]+).([0-9]+)(.[0-9]+)?$/\\1/g'` - LLDB_REVISION=`echo $2 | /usr/bin/sed -E 's/^([0-9]+).([0-9]+).([0-9]+)(.[0-9]+)?$/\\3/g'` - LLDB_VERSION_STRING=`echo $2` - /usr/bin/sed -i.bak "s|//#define LLDB_VERSION$|#define LLDB_VERSION $LLDB_VERSION |" "$file" - /usr/bin/sed -i.bak "s|//#define LLDB_REVISION|#define LLDB_REVISION $LLDB_REVISION |" "$file" - /usr/bin/sed -i.bak "s|//#define LLDB_VERSION_STRING|#define LLDB_VERSION_STRING \"$LLDB_VERSION_STRING\" |" "$file" rm -f "$file.bak" done diff --git a/lldb/scripts/version-header-fix.py b/lldb/scripts/version-header-fix.py new file mode 100755 index 0000000000000..cf5b525d9a2e8 --- /dev/null +++ b/lldb/scripts/version-header-fix.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 +""" +Usage: <path/to/input-header.h> <path/to/output-header.h> LLDB_MAJOR_VERSION LLDB_MINOR_VERSION LLDB_PATCH_VERSION + +This script uncomments and populates the versioning information in lldb-defines.h +""" + +import argparse +import os +import re + +LLDB_VERSION_REGEX = re.compile(r'//\s*#define LLDB_VERSION\s*$', re.M) +LLDB_REVISION_REGEX = re.compile(r'//\s*#define LLDB_REVISION\s*$', re.M) +LLDB_VERSION_STRING_REGEX = re.compile(r'//\s*#define LLDB_VERSION_STRING\s*$', re.M) + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("input_path") + parser.add_argument("output_path") + parser.add_argument("lldb_version_major") + parser.add_argument("lldb_version_minor") + parser.add_argument("lldb_version_patch") + args = parser.parse_args() + input_path = str(args.input_path) + output_path = str(args.output_path) + lldb_version_major = args.lldb_version_major + lldb_version_minor = args.lldb_version_minor + lldb_version_patch = args.lldb_version_patch + + with open(input_path, "r") as input_file: + lines = input_file.readlines() + file_buffer = ''.join(lines) + + with open(output_path, "w") as output_file: + # For the defines in lldb-defines.h that define the major, minor and version string + # uncomment each define and populate its value using the arguments passed in. + # e.g. //#define LLDB_VERSION -> #define LLDB_VERSION <LLDB_MAJOR_VERSION> + file_buffer = re.sub(LLDB_VERSION_REGEX, r'#define LLDB_VERSION ' + lldb_version_major, file_buffer) + + file_buffer = re.sub(LLDB_REVISION_REGEX, r'#define LLDB_REVISION ' + lldb_version_patch, file_buffer) + file_buffer = re.sub(LLDB_VERSION_STRING_REGEX, r'#define LLDB_VERSION_STRING "{0}.{1}.{2}"'.format(lldb_version_major, lldb_version_minor, lldb_version_patch), file_buffer) + output_file.write(file_buffer) + + +if __name__ == "__main__": + main() diff --git a/lldb/source/API/CMakeLists.txt b/lldb/source/API/CMakeLists.txt index 3bc569608e458..a1f2d4fee82c8 100644 --- a/lldb/source/API/CMakeLists.txt +++ b/lldb/source/API/CMakeLists.txt @@ -290,6 +290,40 @@ else() endif() endif() +# Stage all headers in the include directory in the build dir. +file(GLOB public_headers ${LLDB_SOURCE_DIR}/include/lldb/API/*.h) +set(lldb_header_staging ${CMAKE_BINARY_DIR}/include/lldb) +file(GLOB root_public_headers ${LLDB_SOURCE_DIR}/include/lldb/lldb-*.h) +file(GLOB root_private_headers ${LLDB_SOURCE_DIR}/include/lldb/lldb-private*.h) +list(REMOVE_ITEM root_public_headers ${root_private_headers}) +foreach(header + ${public_headers} + ${generated_public_headers} + ${root_public_headers}) + get_filename_component(basename ${header} NAME) + set(staged_header ${lldb_header_staging}/${basename}) + + if(unifdef_EXECUTABLE) + # unifdef returns 0 when the file is unchanged and 1 if something was changed. + # That means if we successfully remove SWIG code, the build system believes + # that the command has failed and stops. This is undesirable. + set(copy_command ${unifdef_EXECUTABLE} -USWIG -o ${staged_header} ${header} || (exit 0)) + else() + set(copy_command ${CMAKE_COMMAND} -E copy ${header} ${staged_header}) + endif() + + add_custom_command( + DEPENDS ${header} OUTPUT ${staged_header} + COMMAND ${copy_command} + COMMENT "LLDB headers: stage LLDB headers in include directory") + + list(APPEND lldb_staged_headers ${staged_header}) +endforeach() + +add_custom_command(TARGET liblldb POST_BUILD + COMMAND ${LLDB_SOURCE_DIR}/scripts/version-header-fix.py ${LLDB_SOURCE_DIR}/include/lldb/lldb-defines.h ${lldb_header_staging}/lldb-defines.h ${LLDB_VERSION_MAJOR} ${LLDB_VERSION_MINOR} ${LLDB_VERSION_PATCH} +) + if(LLDB_BUILD_FRAMEWORK) include(LLDBFramework) diff --git a/lldb/test/Shell/Scripts/Inputs/lldb-defines.h b/lldb/test/Shell/Scripts/Inputs/lldb-defines.h new file mode 100644 index 0000000000000..8d3090e26d26f --- /dev/null +++ b/lldb/test/Shell/Scripts/Inputs/lldb-defines.h @@ -0,0 +1,7 @@ +// This is a truncated version of lldb-defines.h used to test the script +// that fixes up its versioning info. + +// The script needs to uncomment these lines and populate the info for versioning. +// #define LLDB_VERSION +// #define LLDB_REVISION +// #define LLDB_VERSION_STRING diff --git a/lldb/test/Shell/Scripts/TestFrameworkFixScriptIncludes.test b/lldb/test/Shell/Scripts/TestFrameworkFixScriptIncludes.test new file mode 100644 index 0000000000000..e8c34254713a5 --- /dev/null +++ b/lldb/test/Shell/Scripts/TestFrameworkFixScriptIncludes.test @@ -0,0 +1,17 @@ +// Run the convert script on it, then run the framework include fix on it. The framework version fix script +// expects that all lldb references have been renamed to lldb-rpc in order for it to modify the includes +// to go into the framework. +# RUN: %python %p/../../../scripts/framework-header-fix.py lldb_main %p/Inputs/ 21 0 0 + +// Check the output +# RUN: cat %p/Inputs/lldb-defines.h | FileCheck %s + +// The LLDB version defines must be uncommented and filled in with the values passed into the script. +# CHECK: {{^}}#define LLDB_VERSION 21 +# CHECK: {{^}}#define LLDB_REVISION 0 +# CHECK: {{^}}#define LLDB_VERSION_STRING "21.0.0" + +# RUN: cat %p/Inputs/SBAddress.h | FileCheck %s + +// Local includes for LLDB headers must be changed to framework includes. +# CHECK: #include "<LLDB/SBDefines.h>" diff --git a/lldb/test/Shell/Scripts/TestVersionFixScript.test b/lldb/test/Shell/Scripts/TestVersionFixScript.test new file mode 100644 index 0000000000000..78cc987263075 --- /dev/null +++ b/lldb/test/Shell/Scripts/TestVersionFixScript.test @@ -0,0 +1,11 @@ +# Create a temp dir for output and run the version fix script on the truncated version of lldb-defines.h in the inputs dir. +RUN: mkdir -p %t/Outputs +RUN: %python %p/../../../scripts/version-header-fix.py %p/Inputs/lldb-defines.h %t/Outputs/lldb-defines.h 21 0 12 + +# Check the output +RUN: cat %t/Outputs/lldb-defines.h | FileCheck %s + +# The LLDB version defines must be uncommented and filled in with the values passed into the script. +CHECK: {{^}}#define LLDB_VERSION 21 +CHECK: {{^}}#define LLDB_REVISION 12 +CHECK: {{^}}#define LLDB_VERSION_STRING "21.0.12" _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits