Skip to content

Commit d10db3d

Browse files
committed
[lldb][framework] Glob headers from source for framework
When gathering the headers to fix up and place in LLDB.framework, we were previously globbing the header files from a location in the build directory. This commit changes this to glob from the source directory instead, as we were globbing from the build directory without ensuring that the necessary files were actually in that location before globbing.f
1 parent 8f37fb2 commit d10db3d

File tree

2 files changed

+34
-35
lines changed

2 files changed

+34
-35
lines changed

lldb/cmake/modules/LLDBFramework.cmake

Lines changed: 30 additions & 35 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,20 +78,42 @@ 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

81+
# Glob all necessary header files from source and place them into a list.
82+
file(GLOB public_headers ${LLDB_SOURCE_DIR}/include/lldb/API/*.h)
83+
set(generated_public_headers ${LLDB_OBJ_DIR}/include/lldb/API/SBLanguages.h)
84+
file(GLOB root_public_headers ${LLDB_SOURCE_DIR}/include/lldb/lldb-*.h)
85+
file(GLOB root_private_headers ${LLDB_SOURCE_DIR}/include/lldb/lldb-private*.h)
86+
list(REMOVE_ITEM root_public_headers ${root_private_headers})
87+
set(lldb_framework_header_list ${public_headers} ${generated_public_headers} ${root_public_headers})
88+
89+
add_custom_target(lldb-framework-fixup-all-headers)
90+
add_dependencies(liblldb lldb-framework-fixup-all-headers)
91+
10892
# Take the headers from the staging directory and fix up their includes for the framework.
109-
# Then write them to the output directory.
93+
# Then write them to the framework itself.
11094
# 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})
95+
foreach(header ${lldb_framework_header_list})
11396

11497
set(input_header ${header})
115-
get_filename_component(header_basename ${input_header} NAME)
98+
get_filename_component(header_basename ${header} NAME)
99+
add_custom_target(lldb-framework-fixup-header-${header_basename} DEPENDS ${header})
100+
add_dependencies(lldb-framework-fixup-all-headers lldb-framework-fixup-header-${header_basename})
116101
set(output_header $<TARGET_FILE_DIR:liblldb>/Headers/${header_basename})
117102

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-
)
103+
# lldb-defines.h needs to have the version fix script run on it before
104+
# the framework fix script is.
105+
if ("${header_basename}" STREQUAL "lldb-defines.h")
106+
add_custom_command(TARGET lldb-framework-fixup-header-${header_basename} POST_BUILD
107+
COMMAND "${Python3_EXECUTABLE}" ${LLDB_SOURCE_DIR}/scripts/version-header-fix.py -i ${input_header} -o ${output_header} -m ${LLDB_VERSION_MAJOR} -n ${LLDB_VERSION_MINOR} -p ${LLDB_VERSION_PATCH}
108+
COMMAND "${Python3_EXECUTABLE}" ${LLDB_SOURCE_DIR}/scripts/framework-header-fix.py -f lldb_main -i ${output_header} -o ${output_header} -p ${unifdef_EXECUTABLE} USWIG
109+
COMMENT "LLDB.framework: Fix up and copy framework headers"
110+
)
111+
else()
112+
add_custom_command(TARGET lldb-framework-fixup-header-${header_basename} POST_BUILD
113+
COMMAND "${Python3_EXECUTABLE}" ${LLDB_SOURCE_DIR}/scripts/framework-header-fix.py -f lldb_main -i ${input_header} -o ${output_header} -p ${unifdef_EXECUTABLE} USWIG
114+
COMMENT "LLDB.framework: Fix up and copy framework headers"
115+
)
116+
endif()
122117
endforeach()
123118

124119
# Copy vendor-specific headers from clang (without staging).

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)

0 commit comments

Comments
 (0)