Skip to content

Commit 18a6eba

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 18a6eba

File tree

3 files changed

+34
-37
lines changed

3 files changed

+34
-37
lines changed

lldb/cmake/modules/LLDBFramework.cmake

Lines changed: 27 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,18 +78,37 @@ 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+
set(lldb_framework_header_basename_list)
90+
foreach(header ${lldb_framework_header_list})
91+
get_filename_component(header_basename ${header} NAME)
92+
list(APPEND lldb_framework_header_basename_list ${header_basename})
93+
endforeach()
94+
95+
add_custom_target(lldb-framework-fixup-all-headers)
96+
add_dependencies(lldb-framework-fixup-all-headers liblldb-header-staging)
97+
add_dependencies(liblldb lldb-framework-fixup-all-headers)
98+
10899
# Take the headers from the staging directory and fix up their includes for the framework.
109-
# Then write them to the output directory.
100+
# Then write them to the framework itself.
110101
# 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})
102+
foreach(header ${lldb_framework_header_basename_list})
113103

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})
104+
set(input_header ${CMAKE_BINARY_DIR}/include/lldb/${header})
105+
set(output_header $<TARGET_FILE_DIR:liblldb>/Headers/${header})
117106

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
107+
add_custom_target(lldb-framework-fixup-header-${header} DEPENDS ${input_header})
108+
add_dependencies(lldb-framework-fixup-all-headers lldb-framework-fixup-header-${header})
109+
110+
add_custom_command(TARGET lldb-framework-fixup-header-${header} POST_BUILD
111+
COMMAND "${Python3_EXECUTABLE}" ${LLDB_SOURCE_DIR}/scripts/framework-header-fix.py -f lldb_main -i ${input_header} -o ${output_header} -p ${unifdef_EXECUTABLE} USWIG
120112
COMMENT "LLDB.framework: Fix up and copy framework headers"
121113
)
122114
endforeach()

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: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,7 @@ endif()
295295
# Stage all headers in the include directory in the build dir.
296296
file(GLOB public_headers ${LLDB_SOURCE_DIR}/include/lldb/API/*.h)
297297
set(lldb_header_staging_dir ${CMAKE_BINARY_DIR}/include/lldb)
298+
set(generated_public_headers ${LLDB_OBJ_DIR}/include/lldb/API/SBLanguages.h)
298299
file(GLOB root_public_headers ${LLDB_SOURCE_DIR}/include/lldb/lldb-*.h)
299300
file(GLOB root_private_headers ${LLDB_SOURCE_DIR}/include/lldb/lldb-private*.h)
300301
list(REMOVE_ITEM root_public_headers ${root_private_headers})
@@ -325,10 +326,10 @@ foreach(header
325326
list(APPEND lldb_staged_headers ${staged_header})
326327
endforeach()
327328

328-
add_custom_command(TARGET liblldb POST_BUILD
329+
add_custom_target(liblldb-header-staging DEPENDS ${lldb_staged_headers})
330+
add_custom_command(TARGET liblldb-header-staging POST_BUILD
329331
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}
330332
)
331-
add_custom_target(liblldb-header-staging DEPENDS ${lldb_staged_headers})
332333
add_dependencies(liblldb liblldb-header-staging)
333334

334335
if(LLDB_BUILD_FRAMEWORK)

0 commit comments

Comments
 (0)