blob: 8f173eb039da5b0c65f9beb0d8ebd015136354e2 [file]
#
# Copyright 2020, Data61, CSIRO (ABN 41 687 119 230)
#
# SPDX-License-Identifier: BSD-2-Clause
#
set(CapDLToolDirectory ${CMAKE_CURRENT_LIST_DIR})
include(make)
include(debug)
# Build and install capDL-tool
# Path of installed tool will be returned in program_path
# This assumes that there are no other dependencies.
function(CapDLToolInstall target program_path)
# Require the parse-capDL tool
create_depfile_by_find(
depfile_commands
"${CMAKE_CURRENT_BINARY_DIR}/capDL-tool/parse-capDL"
"${CMAKE_CURRENT_BINARY_DIR}/capDL-tool/parse-capDL.d"
"${CapDLToolDirectory}/"
)
include(memoize)
# memoize this installation rule which will save the resulting artifact in a cache and reuse it across builds.
# This will rebuild from source if the git directory has changes or has a changed commit hash.
memoize_add_custom_command(
capDL-tool
"${CMAKE_CURRENT_BINARY_DIR}/capDL-tool/"
"${CapDLToolDirectory}"
""
"parse-capDL"
OUTPUT
"${CMAKE_CURRENT_BINARY_DIR}/capDL-tool/parse-capDL"
WORKING_DIRECTORY
${CMAKE_CURRENT_BINARY_DIR}/capDL-tool/
${depfile_commands}
COMMAND
cp
-a
${CapDLToolDirectory}/*
.
COMMAND
${CMAKE_COMMAND}
-E
env
make
${USES_TERMINAL_DEBUG}
)
add_custom_target(${target} DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/capDL-tool/parse-capDL")
set(${program_path} "${CMAKE_CURRENT_BINARY_DIR}/capDL-tool/parse-capDL" PARENT_SCOPE)
endfunction()
# Create target for creating capdl C file from cdl spec
# target: Name of target to Create
# output: Output name of C file
# static_alloc: whether the spec has been statically allocated
# object_sizes: object_sizes file
# input: Input name of capdl spec
# capdl_tool: Path to capdl parse tool
# MAX_IRQS: Named argument for size of IRQ array (Deprecated)
# DEPENDS: Any target or file dependencies that the parse command depends on
function(CapDLToolCFileGen target output static_alloc object_sizes input capdl_tool)
cmake_parse_arguments(PARSE_ARGV 6 CAPDL "" "MAX_IRQS" "DEPENDS")
if(NOT "${CAPDL_UNPARSED_ARGUMENTS}" STREQUAL "")
message(FATAL_ERROR "Unknown arguments to CapDLToolCFileGen")
endif()
if(static_alloc)
set(alloc_type_opt "--code-static-alloc")
set(object_sizes_opt "")
else()
set(alloc_type_opt "--code-dynamic-alloc")
set(object_sizes_opt "--object-sizes=${object_sizes}")
endif()
if(NOT "${CAPDL_MAX_IRQS}" STREQUAL "")
message(WARNING "MAX_IRQS option to CapDLToolCFileGen is no longer used by the tool")
endif()
# Invoke the parse-capDL tool to turn the CDL spec into a C spec
add_custom_command(
OUTPUT ${output}
COMMAND
${capdl_tool}
--code
${output} ${alloc_type_opt} ${object_sizes_opt} "${input}"
DEPENDS "${input}" "${object_sizes}" ${CAPDL_DEPENDS}
)
add_custom_target(${target} DEPENDS ${output} ${object_sizes})
endfunction()