blob: 76a553863b6edc070c1c3bbec67f2ae45b768512 [file] [log] [blame] [edit]
# This CMake include defines the following functions:
#
# * ADD_SV2V_TARGET - Converts SystemVerilog sources to Verilog using sv2v
function(ADD_SV2V_TARGET)
# ~~~
# ADD_SV2V_TARGET(
# NAME <name>
# SOURCES <source list>
# FLAGS <flags>
#
# ADD_SV2V_TARGET is used for converting SystemVerilog SOURCES to Verilog.
# FLAGS is a string with the flags that are passed to the sv2v during the conversion.
#
# Targets generated:
# * <name>_sv2v - Output sv2v file in a Verilog format.
#
# Output files:
#
# * <name>_sv2v.v - Output Verilog file
# * <name>_sv2v.v.log - Log file with errors and warnings during the sv2v conversion
#
# Outputs for this target will be located in the ${CMAKE_CURRENT_BINARY_DIR}
# ~~~
set(oneValueArgs NAME)
set(multiValueArgs SOURCES FLAGS)
cmake_parse_arguments(
ADD_SV2V_TARGET
"${options}"
"${oneValueArgs}"
"${multiValueArgs}"
"${ARGN}"
)
# Create a dependency list
set(SOURCES_DEPS "")
foreach(SRC ${ADD_SV2V_TARGET_SOURCES})
append_file_dependency(SOURCES_DEPS ${SRC})
endforeach()
# sv2v conversion
set(NAME ${ADD_SV2V_TARGET_NAME})
set(SOURCES ${ADD_SV2V_TARGET_SOURCES})
set(FLAGS ${ADD_SV2V_TARGET_FLAGS})
set(OUT_FILE ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_sv2v.v)
add_custom_command(
OUTPUT ${OUT_FILE}
DEPENDS ${SOURCES_DEPS}
COMMAND
${CMAKE_COMMAND} -E env
zachjs-sv2v ${FLAGS} ${SOURCES} > ${OUT_FILE} 2> ${OUT_FILE}.log
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
VERBATIM
)
add_custom_target(${NAME}_sv2v DEPENDS ${OUT_FILE})
add_file_target(FILE ${NAME}_sv2v.v GENERATED)
endfunction()