cmake_minimum_required(VERSION 3.5) project(kicad_utils) find_package(Antlr4) antlr4_add_target(TARGET KicadNet LEXER KicadNetLexer.g4 PARSER KicadNetParser.g4 STATIC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") set(SOURCE_FILES main.cpp kicad.cpp include/trygvis/kicad.h) add_executable(kicad_utils ${SOURCE_FILES}) target_include_directories(kicad_utils PUBLIC include) target_link_libraries(kicad_utils KicadNet Antlr4::antlr4_shared) target_compile_options(kicad_utils PUBLIC --std=c++14) target_compile_options(kicad_utils PUBLIC -Wall -Wextra) add_custom_target(all_examples) function(kicad_gen) set(options IN_SOURCE) set(oneValueArgs TARGET NET REF OUTPUT_DIR) cmake_parse_arguments(kicad_gen "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) if (NOT kicad_gen_TARGET) message(FATAL_ERROR "TARGET is required") endif () set(TARGET "${kicad_gen_TARGET}") 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}") else () message("IN_SOURCE=${kicad_gen_IN_SOURCE}") if (kicad_gen_IN_SOURCE) set(OUTPUT_DIR "${CMAKE_CURRENT_SOURCE_DIR}") else () set(OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}") endif () endif () set(OUTPUT_FILE "${OUTPUT_DIR}/${TARGET}") message("OUTPUT_FILE=${OUTPUT_FILE}") message("NET=${NET}") add_custom_command(OUTPUT ${OUTPUT_FILE} COMMAND kicad_utils -f ${NET} -r ${REF} > kicad-${TARGET}.tmp COMMAND cmake -E make_directory -p ${OUTPUT_DIR} COMMAND cmake -E rename kicad-${TARGET}.tmp ${OUTPUT_FILE} MAIN_DEPENDENCY ${NET} DEPENDS kicad_utils COMMENT "Generating ${TARGET}") endfunction() add_subdirectory(examples)