Skip to content
Snippets Groups Projects
PystencilsSfgFunctions.cmake 1.31 KiB
Newer Older

set(PSSFG_GENERATED_SOURCES_DIR "${CMAKE_BINARY_DIR}/pystencils_generated_sources")
file(MAKE_DIRECTORY "${PSSFG_GENERATED_SOURCES_DIR}")
include_directories(${PSSFG_GENERATED_SOURCES_DIR})

function(pystencilssfg_generate_target_sources)
    set(options)
    set(oneValueArgs TARGET SCRIPT)
    set(multiValueArgs DEPENDS)
    cmake_parse_arguments(GENSRC "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})

    set(generatedSourcesDir ${PSSFG_GENERATED_SOURCES_DIR}/gen/${GENSRC_TARGET})

    get_filename_component(basename ${GENSRC_SCRIPT} NAME_WLE)
    cmake_path(ABSOLUTE_PATH GENSRC_SCRIPT OUTPUT_VARIABLE pythonFile)

    set(generatedSourceFiles ${basename}.h ${basename}.cpp)
    set(generatedWithAbsolutePath)
    foreach (filename ${generatedSourceFiles})
        list(APPEND generatedWithAbsolutePath ${generatedSourcesDir}/${filename})
    endforeach ()

    file(MAKE_DIRECTORY "${generatedSourcesDir}")

    # TODO: Get generator arguments via PYSTENCILS_GENERATOR_FLAGS, source file and target properties

    add_custom_command(OUTPUT ${generatedWithAbsolutePath}
            DEPENDS ${pythonFile} ${GENSRC_DEPENDS}
            COMMAND ${Python_EXECUTABLE} ${pythonFile}
            WORKING_DIRECTORY "${generatedSourcesDir}")

    target_sources(${GENSRC_TARGET} PRIVATE ${generatedWithAbsolutePath})
endfunction()