51 lines
2.2 KiB
CMake
51 lines
2.2 KiB
CMake
# Generate flow modulemap
|
|
|
|
function(generate_modulemap out module target)
|
|
cmake_parse_arguments(ARG "" "" "OMIT;HEADERS" ${ARGN})
|
|
|
|
set(MODULE_NAME "${module}")
|
|
string(TOLOWER ${module} module_lower)
|
|
string(TOLOWER ${target} target_lower)
|
|
get_target_property(MODULE_HEADERS ${target} HEADER_FILES)
|
|
if(ARG_HEADERS)
|
|
set(MODULE_HEADERS ${ARG_HEADERS})
|
|
endif()
|
|
foreach(header ${MODULE_HEADERS})
|
|
get_filename_component(fname ${header} NAME)
|
|
if(NOT ${fname} IN_LIST ARG_OMIT)
|
|
get_filename_component(headerdir ${header} DIRECTORY)
|
|
get_filename_component(dirname ${headerdir} NAME)
|
|
set(topdirname ${dirname})
|
|
# FIXME: we need to account for headers in subdirectories.
|
|
# THIS is a hack for single level directory.
|
|
if (NOT ${dirname} MATCHES ${module_lower} AND
|
|
NOT ${dirname} MATCHES ${target_lower})
|
|
get_filename_component(headerdir2 ${headerdir} DIRECTORY)
|
|
get_filename_component(dirname2 ${headerdir2} NAME)
|
|
set(topdirname ${dirname2})
|
|
set(dirname "${dirname2}/${dirname}")
|
|
if (NOT ${dirname2} MATCHES ${module_lower} AND
|
|
NOT ${dirname2} MATCHES ${target_lower})
|
|
get_filename_component(headerdir3 ${headerdir2} DIRECTORY)
|
|
get_filename_component(dirname3 ${headerdir3} NAME)
|
|
set(topdirname ${dirname3})
|
|
set(dirname "${dirname3}/${dirname}")
|
|
endif()
|
|
endif()
|
|
if(ARG_HEADERS)
|
|
set(header_list "${header_list} header \"include/${dirname}/${fname}\"\n")
|
|
else()
|
|
set(header_list "${header_list} header \"${dirname}/${fname}\"\n")
|
|
endif()
|
|
cmake_path(IS_PREFIX CMAKE_BINARY_DIR ${headerdir} NORMALIZE isGenerated)
|
|
if (NOT ${isGenerated})
|
|
set(vfs_roots "${vfs_roots} {\"type\": \"file\", \"name\": \"${CMAKE_BINARY_DIR}/${topdirname}/include/${dirname}/${fname}\", \"external-contents\": \"${header}\"},\n")
|
|
endif()
|
|
endif()
|
|
endforeach()
|
|
set(MODULE_HEADERS "${header_list}")
|
|
configure_file("${CMAKE_SOURCE_DIR}/swift_build_support/empty.modulemap" "${out}/module.modulemap" @ONLY)
|
|
set(VFS_ROOTS "${vfs_roots}")
|
|
configure_file("${CMAKE_SOURCE_DIR}/swift_build_support/headeroverlay.yaml" "${out}/headeroverlay.yaml" @ONLY)
|
|
endfunction()
|