diff --git a/CMakeLists.txt b/CMakeLists.txt index 83285e2232f8b72fd4fa8cb7911a7cdcc6612807..f131dc2e22828514e1afa000b6a8df2880ebf84d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -276,48 +276,6 @@ add_custom_target(xml_headers_target DEPENDS ${xml_headers}) add_dependencies(kernel_headers xml_headers_target) include_directories("${CMAKE_CURRENT_BINARY_DIR}/gen_headers") -if (DEFINED KernelDTSList) - find_program(DTC_TOOL dtc) - if ("${DTC_TOOL}" STREQUAL "DTC_TOOL-NOTFOUND") - message(FATAL_ERROR "Cannot find 'dtc' program.") - endif() - - foreach(entry ${KernelDTSList}) - get_absolute_source_or_binary(dts_tmp ${entry}) - list(APPEND dts_list ${dts_tmp}) - endforeach() - - # Generate final DTS based on Linux DTS + seL4 overlay[s] - set(KernelDTSIntermediate "kernel.dts") - add_custom_command(OUTPUT ${KernelDTSIntermediate} - COMMAND cat ${dts_list} > "${KernelDTSIntermediate}" - COMMENT "Generate kernel DTS" - DEPENDS ${dts_list}) - - # Compile DTS to DTB - set(KernelDTBPath "kernel.dtb") - add_custom_command(OUTPUT ${KernelDTBPath} - COMMAND ${DTC_TOOL} -q -I dts -O dtb -o ${KernelDTBPath} ${KernelDTSIntermediate} - DEPENDS ${KernelDTSIntermediate}) - - # Generate devices_gen header based on DTB - set(device_dest "gen_headers/plat/machine/devices_gen.h") - set(config_file "${CMAKE_CURRENT_SOURCE_DIR}/tools/hardware.yml") - set(config_schema "${CMAKE_CURRENT_SOURCE_DIR}/tools/hardware_schema.yml") - add_custom_command(OUTPUT ${device_dest} - COMMAND ${PYTHON} "${HARDWARE_GEN_PATH}" --dtb "${KernelDTBPath}" --output "${device_dest}" --config "${config_file}" --schema "${config_schema}" - DEPENDS "${HARDWARE_GEN_PATH}" "${KernelDTBPath}" "${config_file}" "${config_schema}" - COMMENT "Generate hardware description" - VERBATIM - ) - - # Construct target for the generated hardware header - add_custom_target(hardware_gen_target DEPENDS "${device_dest}") - # Add the hardware header to all the kernel headers - add_dependencies(kernel_headers hardware_gen_target) - list(APPEND gen_files_list "${device_dest}") -endif() - ####################### # Prune list generation ####################### diff --git a/src/arch/arm/config.cmake b/src/arch/arm/config.cmake index 0bcb1de4931fe6acc29bdf962bfb7da8fd11abfb..34595c6e280d1f36a0f9150f2f88faff83d37c34 100644 --- a/src/arch/arm/config.cmake +++ b/src/arch/arm/config.cmake @@ -96,6 +96,45 @@ include(src/plat/tx2/config.cmake) include(src/plat/zynq7000/config.cmake) include(src/plat/zynqmp/config.cmake) +if (DEFINED KernelDTSList) + set(KernelDTSIntermediate "${CMAKE_CURRENT_BINARY_DIR}/kernel.dts") + set(KernelDTBPath "${CMAKE_CURRENT_BINARY_DIR}/kernel.dtb") + set(device_dest "${CMAKE_CURRENT_BINARY_DIR}/gen_headers/plat/machine/devices_gen.h") + set(config_file "${CMAKE_CURRENT_SOURCE_DIR}/tools/hardware.yml") + set(config_schema "${CMAKE_CURRENT_SOURCE_DIR}/tools/hardware_schema.yml") + + find_program(DTC_TOOL dtc) + if ("${DTC_TOOL}" STREQUAL "DTC_TOOL-NOTFOUND") + message(FATAL_ERROR "Cannot find 'dtc' program.") + endif() + + foreach(entry ${KernelDTSList}) + get_absolute_source_or_binary(dts_tmp ${entry}) + set(dts_list "${dts_list} ${dts_tmp}") + endforeach() + + # Generate final DTS based on Linux DTS + seL4 overlay[s] + execute_process( + COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/gen_headers/plat/machine/" + ) + execute_process( + COMMAND bash -c "cat ${dts_list} > ${KernelDTSIntermediate}" + ) + + # Compile DTS to DTB + execute_process( + COMMAND ${DTC_TOOL} -q -I dts -O dtb -o ${KernelDTBPath} ${KernelDTSIntermediate} + ) + + # Generate devices_gen header based on DTB + execute_process( + COMMAND ${PYTHON} "${HARDWARE_GEN_PATH}" --dtb "${KernelDTBPath}" --output "${device_dest}" --config "${config_file}" --schema "${config_schema}" + OUTPUT_VARIABLE compatibility_strings + ) + + include(src/drivers/serial/config.cmake) +endif() + # Now enshrine all the common variables in the config config_set(KernelArmCortexA7 ARM_CORTEX_A7 "${KernelArmCortexA7}") config_set(KernelArmCortexA8 ARM_CORTEX_A8 "${KernelArmCortexA8}")