Skip to content

Commit 31e1d9b

Browse files
authored
Merge pull request #11126 from chelcassanova/cherry/rebranch/lldb-framework-script-changes
[lldb][framework] Glob headers from source for framework (llvm#148736)
2 parents 0adc814 + 98da52e commit 31e1d9b

File tree

6 files changed

+33
-50
lines changed

6 files changed

+33
-50
lines changed

lldb/cmake/modules/LLDBFramework.cmake

Lines changed: 0 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -70,33 +70,6 @@ endif()
7070

7171
find_program(unifdef_EXECUTABLE unifdef)
7272

73-
# All necessary header files will be staged in the include directory in the build directory,
74-
# so just copy the files from there into the framework's staging directory.
75-
set(lldb_build_dir_header_staging "${CMAKE_BINARY_DIR}/include/lldb")
76-
set(lldb_framework_header_staging "${CMAKE_CURRENT_BINARY_DIR}/FrameworkHeaders")
77-
file(GLOB lldb_build_dir_header_staging_list ${lldb_build_dir_header_staging}/*)
78-
foreach(header ${lldb_build_dir_header_staging_list})
79-
80-
get_filename_component(basename ${header} NAME)
81-
set(staged_header ${lldb_framework_header_staging}/${basename})
82-
83-
if(unifdef_EXECUTABLE)
84-
# unifdef returns 0 when the file is unchanged and 1 if something was changed.
85-
# That means if we successfully remove SWIG code, the build system believes
86-
# that the command has failed and stops. This is undesirable.
87-
set(copy_command ${unifdef_EXECUTABLE} -USWIG -o ${staged_header} ${header} || (exit 0))
88-
else()
89-
set(copy_command ${CMAKE_COMMAND} -E copy ${header} ${staged_header})
90-
endif()
91-
92-
add_custom_command(
93-
DEPENDS ${header} OUTPUT ${staged_header}
94-
COMMAND ${copy_command}
95-
COMMENT "LLDB.framework: collect framework header and remove SWIG macros")
96-
97-
list(APPEND lldb_staged_headers ${staged_header})
98-
endforeach()
99-
10073
# Wrap output in a target, so lldb-framework can depend on it.
10174
add_custom_target(liblldb-resource-headers DEPENDS lldb-sbapi-dwarf-enums ${lldb_staged_headers})
10275
set_target_properties(liblldb-resource-headers PROPERTIES FOLDER "LLDB/Resources")
@@ -105,22 +78,6 @@ set_target_properties(liblldb-resource-headers PROPERTIES FOLDER "LLDB/Resources
10578
add_dependencies(liblldb-resource-headers liblldb-header-staging)
10679
add_dependencies(liblldb liblldb-resource-headers)
10780

108-
# Take the headers from the staging directory and fix up their includes for the framework.
109-
# Then write them to the output directory.
110-
# Also, run unifdef to remove any specified guards from the header files.
111-
file(GLOB lldb_framework_header_staging_list ${lldb_framework_header_staging}/*)
112-
foreach(header ${lldb_framework_header_staging_list})
113-
114-
set(input_header ${header})
115-
get_filename_component(header_basename ${input_header} NAME)
116-
set(output_header $<TARGET_FILE_DIR:liblldb>/Headers/${header_basename})
117-
118-
add_custom_command(TARGET liblldb POST_BUILD
119-
COMMAND ${LLDB_SOURCE_DIR}/scripts/framework-header-fix.py -f lldb_main -i ${input_header} -o ${output_header} -p ${unifdef_EXECUTABLE} USWIG
120-
COMMENT "LLDB.framework: Fix up and copy framework headers"
121-
)
122-
endforeach()
123-
12481
# Copy vendor-specific headers from clang (without staging).
12582
if(NOT APPLE_EMBEDDED)
12683
if (TARGET clang-resource-headers)

lldb/scripts/framework-header-fix.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ def main():
9797
parser.add_argument("-o", "--output_file")
9898
parser.add_argument("-p", "--unifdef_path")
9999
parser.add_argument(
100-
"unifdef_guards",
100+
"--unifdef_guards",
101101
nargs="+",
102102
type=str,
103103
help="Guards to be removed with unifdef. These must be specified in the same way as they would be when passed directly into unifdef.",
@@ -111,7 +111,8 @@ def main():
111111
# unifdef takes the guards to remove as arguments in their own right (e.g. -USWIG)
112112
# but passing them in with dashes for this script causes argparse to think that they're
113113
# arguments in and of themself, so they need to passed in without dashes.
114-
unifdef_guards = ["-" + guard for guard in args.unifdef_guards]
114+
if args.unifdef_guards:
115+
unifdef_guards = ["-" + guard for guard in args.unifdef_guards]
115116

116117
# Create the framework's header dir if it doesn't already exist
117118
if not os.path.exists(os.path.dirname(output_file_path)):
@@ -123,7 +124,8 @@ def main():
123124
modify_rpc_includes(input_file_path, output_file_path)
124125
# After the incldues have been modified, run unifdef on the headers to remove any guards
125126
# specified at the command line.
126-
remove_guards(output_file_path, unifdef_path, unifdef_guards)
127+
if args.unifdef_guards:
128+
remove_guards(output_file_path, unifdef_path, unifdef_guards)
127129

128130

129131
if __name__ == "__main__":

lldb/scripts/version-header-fix.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ def main():
2929
input_path = str(args.input_path)
3030
output_path = str(args.output_path)
3131

32+
# Create the output dir if it doesn't already exist
33+
if not os.path.exists(os.path.dirname(output_path)):
34+
os.makedirs(os.path.dirname(output_path))
35+
3236
with open(input_path, "r") as input_file:
3337
lines = input_file.readlines()
3438
file_buffer = "".join(lines)

lldb/source/API/CMakeLists.txt

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -329,12 +329,21 @@ endif()
329329
# Stage all headers in the include directory in the build dir.
330330
file(GLOB public_headers ${LLDB_SOURCE_DIR}/include/lldb/API/*.h)
331331
set(lldb_header_staging_dir ${CMAKE_BINARY_DIR}/include/lldb)
332+
set(generated_public_headers ${LLDB_OBJ_DIR}/include/lldb/API/SBLanguages.h)
332333
file(GLOB root_public_headers ${LLDB_SOURCE_DIR}/include/lldb/lldb-*.h)
333334
file(GLOB root_private_headers ${LLDB_SOURCE_DIR}/include/lldb/lldb-private*.h)
334335
list(REMOVE_ITEM root_public_headers ${root_private_headers})
335336

336337
find_program(unifdef_EXECUTABLE unifdef)
337338

339+
add_custom_target(liblldb-header-staging DEPENDS ${lldb_staged_headers} ${lldb_header_staging_dir}/lldb-defines.h)
340+
341+
if (LLDB_BUILD_FRAMEWORK)
342+
add_custom_target(lldb-framework-fixup-all-headers)
343+
add_dependencies(lldb-framework-fixup-all-headers liblldb-header-staging)
344+
add_dependencies(liblldb lldb-framework-fixup-all-headers)
345+
endif()
346+
338347
foreach(header
339348
${public_headers}
340349
${generated_public_headers}
@@ -357,12 +366,23 @@ foreach(header
357366
COMMENT "LLDB headers: stage LLDB headers in include directory")
358367

359368
list(APPEND lldb_staged_headers ${staged_header})
369+
370+
if (LLDB_BUILD_FRAMEWORK)
371+
set(output_header $<TARGET_FILE_DIR:liblldb>/Headers/${basename})
372+
373+
add_custom_target(lldb-framework-fixup-header-${basename} DEPENDS ${staged_header})
374+
add_dependencies(lldb-framework-fixup-all-headers lldb-framework-fixup-header-${basename})
375+
376+
add_custom_command(TARGET lldb-framework-fixup-header-${basename} POST_BUILD
377+
COMMAND "${Python3_EXECUTABLE}" ${LLDB_SOURCE_DIR}/scripts/framework-header-fix.py -f lldb_main -i ${staged_header} -o ${output_header}
378+
COMMENT "LLDB.framework: Fix up and copy framework headers"
379+
)
380+
endif()
360381
endforeach()
361382

362-
add_custom_command(TARGET liblldb POST_BUILD
383+
add_custom_command(TARGET liblldb-header-staging POST_BUILD
363384
COMMAND "${Python3_EXECUTABLE}" ${LLDB_SOURCE_DIR}/scripts/version-header-fix.py -i ${LLDB_SOURCE_DIR}/include/lldb/lldb-defines.h -o ${lldb_header_staging_dir}/lldb-defines.h -m ${LLDB_VERSION_MAJOR} -n ${LLDB_VERSION_MINOR} -p ${LLDB_VERSION_PATCH}
364385
)
365-
add_custom_target(liblldb-header-staging DEPENDS ${lldb_staged_headers})
366386
add_dependencies(liblldb liblldb-header-staging)
367387

368388
if(LLDB_BUILD_FRAMEWORK)

lldb/test/Shell/Scripts/TestFrameworkFixScript.test

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Create a temp dir for output and run the framework fix script on the truncated version of SBAddress.h in the inputs dir.
22
RUN: mkdir -p %t/Outputs
3-
RUN: %python %p/../../../scripts/framework-header-fix.py -f lldb_main -i %p/Inputs/Main/SBAddress.h -o %t/Outputs/SBAddress.h -p /usr/bin/unifdef USWIG
3+
RUN: %python %p/../../../scripts/framework-header-fix.py -f lldb_main -i %p/Inputs/Main/SBAddress.h -o %t/Outputs/SBAddress.h -p /usr/bin/unifdef --unifdef_guards USWIG
44

55
# Check the output
66
RUN: cat %t/Outputs/SBAddress.h | FileCheck %s

lldb/test/Shell/Scripts/TestRPCFrameworkFixScript.test

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Create a temp dir for output and run the framework fix script on the truncated version of SBAddress.h in the inputs dir.
22
RUN: mkdir -p %t/Outputs
3-
RUN: %python %p/../../../scripts/framework-header-fix.py -f lldb_rpc -i %p/Inputs/RPC/RPCSBAddress.h -o %t/Outputs/RPCSBAddress.h -p /usr/bin/unifdef USWIG
3+
RUN: %python %p/../../../scripts/framework-header-fix.py -f lldb_rpc -i %p/Inputs/RPC/RPCSBAddress.h -o %t/Outputs/RPCSBAddress.h -p /usr/bin/unifdef --unifdef_guards USWIG
44

55
# Check the output
66
RUN: cat %t/Outputs/RPCSBAddress.h | FileCheck %s

0 commit comments

Comments
 (0)