function(kicad_generate_header) set(options IN_SOURCE ALL) set(oneValueArgs OUTPUT NET REF OUTPUT_DIR TEMPLATE TEMPLATE_LIB_LIST TARGET) cmake_parse_arguments(kicad_gen "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) if (NOT kicad_gen_OUTPUT) message(FATAL_ERROR "OUTPUT is required") endif () set(output "${kicad_gen_OUTPUT}") if (NOT kicad_gen_NET) message(FATAL_ERROR "NET is required") endif () set(NET "${CMAKE_CURRENT_SOURCE_DIR}/${kicad_gen_NET}") if (NOT kicad_gen_REF) message(FATAL_ERROR "REF is required") endif () set(REF "${kicad_gen_REF}") if (kicad_gen_OUTPUT_DIR) if (kicad_gen_IN_SOURCE) message(FATAL_ERROR "IN_SOURCE can't be used if OUTPUT_DIR is used") endif () set(output_dir "${kicad_gen_OUTPUT_DIR}") set(output_rel_dir "${output_dir}") else () if (kicad_gen_IN_SOURCE) set(output_dir "${CMAKE_CURRENT_SOURCE_DIR}") set(output_rel_dir "${CMAKE_SOURCE_DIR}") else () set(output_dir "${CMAKE_CURRENT_BINARY_DIR}") set(output_rel_dir "${CMAKE_BINARY_DIR}") endif () endif () if (kicad_gen_TEMPLATE) set(t "-t") set(template "${kicad_gen_TEMPLATE}") endif () if (kicad_gen_TEMPLATE_LIB_LIST) foreach (l IN LISTS kicad_gen_TEMPLATE_LIB_LIST) list(APPEND lib -l "${l}") endforeach () endif () if (KICAD_GEN_TEMPLATE_LIBS) foreach (l IN LISTS KICAD_GEN_TEMPLATE_LIBS) list(APPEND lib -l "${l}") endforeach () endif () set(output_file "${output_dir}/${output}") file(RELATIVE_PATH output_file_rel "${output_rel_dir}" ${output_file}) # message("kicad_generate_header: output_file=${output_file}") # message("kicad_generate_header: output_file_rel=${output_file_rel}") message("kicad_generate_header: kicad_generate_header_cmd=${kicad_generate_header_cmd}") add_custom_command(OUTPUT "${output_file}" COMMAND ${kicad_generate_header_cmd} -n ${NET} -r ${REF} -o ${output_file} ${t} ${template} ${lib} MAIN_DEPENDENCY ${NET} COMMENT "Generating ${output_file_rel}") if (kicad_gen_TARGET) set(target "${kicad_gen_TARGET}") if (kicad_gen_ALL) set(all ALL) endif () add_custom_target("${target}" ${all} DEPENDS ${output_file}) endif () endfunction()