From baa6065f6121ea3994b95c827cb7e3f8800be0ed Mon Sep 17 00:00:00 2001 From: Moody Liu Date: Tue, 23 Jul 2024 23:17:42 +0100 Subject: [PATCH] cmake: cleanup CMakeLists --- CMakeLists.txt | 2 +- cmake/configure_summary.cmake | 23 +++--- cmake/create_bootable_kernel_binary.cmake | 2 +- kernel/CMakeLists.txt | 2 +- userspace/cmake/userspace.cmake | 89 +++++++++-------------- 5 files changed, 51 insertions(+), 67 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c8dc61c6..7464c18a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -104,7 +104,7 @@ install( ) add_custom_target(mos_print_summary COMMAND ${CMAKE_COMMAND} -E cat ${CMAKE_BINARY_DIR}/summary.txt USES_TERMINAL) -add_summary_item(UTILITY "mos_print_summary" "" "Print Configuration Summary") +add_summary_item(UTILITY "mos_print_summary" "Print Configuration Summary") message("") message("MOS is now configured :)") diff --git a/cmake/configure_summary.cmake b/cmake/configure_summary.cmake index 80e182f1..c0d87e0e 100644 --- a/cmake/configure_summary.cmake +++ b/cmake/configure_summary.cmake @@ -12,12 +12,12 @@ macro(add_summary_section SECTION_ID NAME) set(_MOS_SUMMARY_SECTION_CONTENT_${SECTION_ID} "" CACHE INTERNAL "" FORCE) endmacro() -macro(add_summary_item SECTION_ID VARIABLE VALUE DESCRIPTION) +macro(add_summary_item SECTION_ID VALUE DESCRIPTION) if(NOT DEFINED _MOS_SUMMARY_SECTION_${SECTION_ID}) message(FATAL_ERROR "Unknown summary section '${SECTION_ID}'") endif() - string(LENGTH ${VARIABLE} NAME_LEN) + string(LENGTH ${VALUE} NAME_LEN) math(EXPR padding "${MOS_SUMMARY_NAME_LENGTH} - ${NAME_LEN} - 2") if(padding LESS 0) @@ -34,13 +34,7 @@ macro(add_summary_item SECTION_ID VARIABLE VALUE DESCRIPTION) endif() string(REPEAT "." ${padding} PADDING_STRING_DESC) - - if (NOT "${VALUE}" STREQUAL "") - set(PRETTY_VALUE " = ${VALUE}") - else() - set(PRETTY_VALUE "") - endif() - list(APPEND _MOS_SUMMARY_SECTION_CONTENT_${SECTION_ID} "${DESCRIPTION} ${PADDING_STRING_DESC}${PADDING_STRING_NAME} ${VARIABLE}${PRETTY_VALUE}") + list(APPEND _MOS_SUMMARY_SECTION_CONTENT_${SECTION_ID} "${DESCRIPTION} ${PADDING_STRING_DESC}${PADDING_STRING_NAME} ${VALUE}") set(_MOS_SUMMARY_SECTION_CONTENT_${SECTION_ID} "${_MOS_SUMMARY_SECTION_CONTENT_${SECTION_ID}}" CACHE INTERNAL "" FORCE) endmacro() @@ -73,4 +67,15 @@ function(save_summary) file(APPEND ${SUMMARY_FILE} "\n") endforeach() + + file(APPEND ${SUMMARY_FILE} "\n") + file(APPEND ${SUMMARY_FILE} "All CMake properties:\n") + + get_cmake_property(ALL_PROPERTIES VARIABLES) + foreach(prop ${ALL_PROPERTIES}) + # if in KCONFIG_EXTRA_OPTIONS_BLACKLIST, skip + if (prop MATCHES "^MOS_.*") + file(APPEND ${SUMMARY_FILE} " ${prop} = ${${prop}}\n") + endif() + endforeach() endfunction() diff --git a/cmake/create_bootable_kernel_binary.cmake b/cmake/create_bootable_kernel_binary.cmake index c1d3cd1e..a9b5e28f 100644 --- a/cmake/create_bootable_kernel_binary.cmake +++ b/cmake/create_bootable_kernel_binary.cmake @@ -104,5 +104,5 @@ function(create_bootable_kernel_binary) # link mos::kernel explicitly to ensure that all symbols from the kernel are # included in the final binary (linker may strip unused symbols in ${TARGET_NAME}_loader) target_link_libraries(${ARGS_TARGET} PRIVATE ${ARGS_TARGET}_loader mos::kernel) - add_summary_item(BOOTABLE ${ARGS_TARGET} "" "${ARGS_COMMENT}") + add_summary_item(BOOTABLE ${ARGS_TARGET} "${ARGS_COMMENT}") endfunction() diff --git a/kernel/CMakeLists.txt b/kernel/CMakeLists.txt index e4903849..dce23789 100644 --- a/kernel/CMakeLists.txt +++ b/kernel/CMakeLists.txt @@ -23,7 +23,7 @@ add_custom_command( ) add_custom_target(mos_syscall_decl DEPENDS ${MOS_SYSCALL_FILES}) -add_summary_item(UTILITY mos_syscall_decl "" "Generate syscall headers") +add_summary_item(UTILITY mos_syscall_decl "Generate syscall headers") install( FILES ${MOS_SYSCALL_FILES} diff --git a/userspace/cmake/userspace.cmake b/userspace/cmake/userspace.cmake index 48401418..fcd260df 100644 --- a/userspace/cmake/userspace.cmake +++ b/userspace/cmake/userspace.cmake @@ -18,24 +18,19 @@ add_custom_target(mos_initrd COMMENT "Creating initrd at ${CMAKE_BINARY_DIR}/initrd.cpio" BYPRODUCTS ${CMAKE_BINARY_DIR}/initrd.cpio ) -add_summary_item(UTILITY mos_initrd "${CMAKE_BINARY_DIR}/initrd.cpio" "Create Initrd") +add_summary_item(UTILITY mos_initrd "Create Initrd") add_custom_target(mos_cleanup_initrd COMMAND ${CMAKE_COMMAND} -E rm -rf ${INITRD_DIR} && ${CMAKE_COMMAND} -E make_directory ${INITRD_DIR} COMMENT "Cleaning up initrd" ) -add_summary_item(UTILITY mos_cleanup_initrd "" "Cleanup Initrd") +add_summary_item(UTILITY mos_cleanup_initrd "Cleanup Initrd") macro(add_to_initrd ITEM_TYPE SOURCE_ITEM PATH) set(OUTPUT_DIR "${INITRD_DIR}${PATH}/") make_directory(${OUTPUT_DIR}) - # append a slash to the path if there's none - string(REGEX REPLACE "(.*[^\\/])$" "\\1/" OUTPUT_DIR_PRETTY "${PATH}") - if("${ITEM_TYPE}" STREQUAL "TARGET") - set(SOURCE_ITEM_SUPPLIMENTARY_INFO "${SOURCE_ITEM}") - set(OUTPUT_DIR_PRETTY "${OUTPUT_DIR_PRETTY}${SOURCE_ITEM}") set(TARGET_NAME _mos_initrd_target_${SOURCE_ITEM}) add_custom_target(${TARGET_NAME} @@ -45,55 +40,39 @@ macro(add_to_initrd ITEM_TYPE SOURCE_ITEM PATH) DEPENDS ${SOURCE_ITEM} BYPRODUCTS ${OUTPUT_DIR}/${SOURCE_ITEM} ) + elseif("${ITEM_TYPE}" STREQUAL "FILE") + get_filename_component(FILE_NAME ${SOURCE_ITEM} NAME) + set(TARGET_NAME _mos_initrd_file_${SOURCE_ITEM}) + string(REPLACE "/" "_" TARGET_NAME ${TARGET_NAME}) + add_custom_target(${TARGET_NAME} + WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} + COMMAND cp --remove-destination --preserve=mode,timestamps -d -r ${SOURCE_ITEM} ${OUTPUT_DIR} || true + VERBATIM + COMMENT "Copying file ${SOURCE_ITEM} to initrd" + DEPENDS ${SOURCE_ITEM} + BYPRODUCTS ${OUTPUT_DIR}/${FILE_NAME} + ) + elseif("${ITEM_TYPE}" STREQUAL "DIRECTORY") + set(SOURCE_DIR_FULL ${CMAKE_CURRENT_LIST_DIR}/${SOURCE_ITEM}) + file(GLOB ALL_FILES RELATIVE ${SOURCE_DIR_FULL} "${SOURCE_DIR_FULL}/*") + + # create a list of all files in the target directory + set(DEST_FILES "") # the files to be used by the BYPRODUCTS property + foreach(FILE ${ALL_FILES}) + list(APPEND DEST_FILES "${OUTPUT_DIR}/${FILE}") + endforeach() + + set(TARGET_NAME _mos_initrd_directory_${SOURCE_ITEM}_to_${PATH}) + string(REPLACE "/" "_" TARGET_NAME ${TARGET_NAME}) + add_custom_target(${TARGET_NAME} + WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} + COMMAND cp --remove-destination -rT ${SOURCE_ITEM} ${OUTPUT_DIR} # see https://gitlab.kitware.com/cmake/cmake/-/issues/14609 + COMMENT "Copying directory ${SOURCE_ITEM} to initrd" + DEPENDS ${SOURCE_ITEM} + BYPRODUCTS ${DEST_FILES} + ) else() - # replace files and directories with their full path, then replace with a pretty prefix - file(REAL_PATH ${SOURCE_ITEM} SOURCE_ITEM_FULL BASE_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) - - string(REPLACE "${CMAKE_BINARY_DIR}/" "@build/" SOURCE_ITEM_PRETTY "${SOURCE_ITEM_FULL}") - string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "@/" SOURCE_ITEM_PRETTY "${SOURCE_ITEM_PRETTY}") - string(REPLACE "${CMAKE_SOURCE_DIR}/" "#/" SOURCE_ITEM_PRETTY "${SOURCE_ITEM_PRETTY}") - set(SOURCE_ITEM_SUPPLIMENTARY_INFO "${SOURCE_ITEM_PRETTY}") - - if("${ITEM_TYPE}" STREQUAL "FILE") - get_filename_component(FILE_NAME ${SOURCE_ITEM} NAME) - set(OUTPUT_DIR_PRETTY "${OUTPUT_DIR_PRETTY}${FILE_NAME}") - - set(TARGET_NAME _mos_initrd_file_${SOURCE_ITEM}) - string(REPLACE "/" "_" TARGET_NAME ${TARGET_NAME}) - add_custom_target(${TARGET_NAME} - WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} - COMMAND cp --remove-destination --preserve=mode,timestamps -d -r ${SOURCE_ITEM} ${OUTPUT_DIR} || true - VERBATIM - COMMENT "Copying file ${SOURCE_ITEM} to initrd" - DEPENDS ${SOURCE_ITEM} - BYPRODUCTS ${OUTPUT_DIR}/${FILE_NAME} - ) - elseif("${ITEM_TYPE}" STREQUAL "DIRECTORY") - set(SOURCE_DIR_FULL ${CMAKE_CURRENT_LIST_DIR}/${SOURCE_ITEM}) - file(GLOB ALL_FILES RELATIVE ${SOURCE_DIR_FULL} "${SOURCE_DIR_FULL}/*") - - # create a list of all files in the target directory - set(DEST_FILES "") # the files to be used by the BYPRODUCTS property - set(FILES) # the files to be used by the configuration summary - foreach(FILE ${ALL_FILES}) - list(APPEND DEST_FILES "${OUTPUT_DIR}/${FILE}") - list(APPEND FILES "${FILE}") - endforeach() - list(JOIN FILES ", " PRETTY_FILES) - set(SOURCE_ITEM_SUPPLIMENTARY_INFO "${SOURCE_ITEM_SUPPLIMENTARY_INFO}/{${PRETTY_FILES}}") - - set(TARGET_NAME _mos_initrd_directory_${SOURCE_ITEM}_to_${PATH}) - string(REPLACE "/" "_" TARGET_NAME ${TARGET_NAME}) - add_custom_target(${TARGET_NAME} - WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} - COMMAND cp --remove-destination -rT ${SOURCE_ITEM} ${OUTPUT_DIR} # see https://gitlab.kitware.com/cmake/cmake/-/issues/14609 - COMMENT "Copying directory ${SOURCE_ITEM} to initrd" - DEPENDS ${SOURCE_ITEM} - BYPRODUCTS ${DEST_FILES} - ) - else() - message(FATAL_ERROR "Unknown initrd item type: ${ITEM_TYPE}") - endif() + message(FATAL_ERROR "Unknown initrd item type: ${ITEM_TYPE}") endif() add_dependencies(mos_initrd ${TARGET_NAME})