|  | # 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() |