Skip to content

Commit

Permalink
cmake: cleanup CMakeLists
Browse files Browse the repository at this point in the history
  • Loading branch information
moodyhunter committed Jul 23, 2024
1 parent 5d416a2 commit baa6065
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 67 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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 :)")
Expand Down
23 changes: 14 additions & 9 deletions cmake/configure_summary.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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()

Expand Down Expand Up @@ -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()
2 changes: 1 addition & 1 deletion cmake/create_bootable_kernel_binary.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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()
2 changes: 1 addition & 1 deletion kernel/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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}
Expand Down
89 changes: 34 additions & 55 deletions userspace/cmake/userspace.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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}
Expand All @@ -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})
Expand Down

0 comments on commit baa6065

Please sign in to comment.