From 282d6a902c4191ccb42e1d4a0ef7e6ebf611d54a Mon Sep 17 00:00:00 2001
From: Oliver Scott <Oliver.Scott@data61.csiro.au>
Date: Tue, 19 Feb 2019 13:16:58 +1100
Subject: [PATCH] serial-refactor: Move kernelDTSList to arm

Currently dts support is only for arm so makes
sense to move into arm config.cmake. Will eventually add RISC-V to
the dts list too.
---
 CMakeLists.txt            | 42 ---------------------------------------
 src/arch/arm/config.cmake | 39 ++++++++++++++++++++++++++++++++++++
 2 files changed, 39 insertions(+), 42 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 83285e223..f131dc2e2 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 0bcb1de49..34595c6e2 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}")
-- 
GitLab