2020-12-20 00:00:00 +00:00
|
|
|
cmake_minimum_required(VERSION 3.18)
|
|
|
|
|
|
|
|
project(biner C)
|
|
|
|
|
|
|
|
include(CTest)
|
|
|
|
|
|
|
|
set(CMAKE_C_STANDARD_REQUIRED ON)
|
|
|
|
set(CMAKE_C_STANDARD "11")
|
|
|
|
add_compile_options(
|
|
|
|
-Wall -Wextra -pedantic -Werror -Wno-missing-field-initializers
|
|
|
|
)
|
2020-12-20 00:00:00 +00:00
|
|
|
|
|
|
|
set(BINER_GENRATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated")
|
|
|
|
|
|
|
|
find_package(BISON REQUIRED)
|
|
|
|
find_package(FLEX REQUIRED)
|
|
|
|
|
|
|
|
file(MAKE_DIRECTORY ${BINER_GENRATED_DIR})
|
|
|
|
bison_target(biner-parser biner.y ${BINER_GENRATED_DIR}/biner.y.c)
|
|
|
|
flex_target(biner-scanner biner.l ${BINER_GENRATED_DIR}/biner.l.c)
|
|
|
|
add_flex_bison_dependency(biner-scanner biner-parser)
|
|
|
|
|
|
|
|
add_executable(biner)
|
|
|
|
target_sources(biner
|
|
|
|
PRIVATE
|
|
|
|
main.c
|
2020-12-29 00:00:00 +00:00
|
|
|
transpile_c.c
|
2020-12-20 00:00:00 +00:00
|
|
|
tree.c
|
|
|
|
${BISON_biner-parser_OUTPUTS}
|
|
|
|
${FLEX_biner-scanner_OUTPUTS}
|
|
|
|
PUBLIC
|
2020-12-31 00:00:00 +00:00
|
|
|
c/pack.h
|
|
|
|
c/unpack.h
|
2020-12-29 00:00:00 +00:00
|
|
|
c/zone.h
|
2020-12-20 00:00:00 +00:00
|
|
|
)
|
|
|
|
target_include_directories(biner PRIVATE . ${CMAKE_CURRENT_BINARY_DIR})
|
2020-12-31 00:00:00 +00:00
|
|
|
|
|
|
|
function(target_biner_sources target)
|
|
|
|
cmake_parse_arguments("FUNC" "" "OUTPUT" "SOURCES" ${ARGN})
|
|
|
|
file(MAKE_DIRECTORY "${FUNC_OUTPUT}")
|
|
|
|
|
|
|
|
foreach(path ${FUNC_SOURCES})
|
|
|
|
get_filename_component(basename "${path}" NAME)
|
|
|
|
set(in "${CMAKE_CURRENT_SOURCE_DIR}/${path}")
|
|
|
|
set(out "${FUNC_OUTPUT}/${basename}.h")
|
|
|
|
add_custom_command(
|
|
|
|
OUTPUT "${out}"
|
|
|
|
COMMAND $<TARGET_FILE:biner> < "${in}" > "${out}"
|
|
|
|
DEPENDS "${in}" biner
|
|
|
|
COMMENT "transpiling ${in} to C"
|
|
|
|
VERBATIM)
|
|
|
|
target_sources(${target} PRIVATE "${out}")
|
|
|
|
endforeach()
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
if (BUILD_TESTING)
|
|
|
|
add_subdirectory(test)
|
|
|
|
endif()
|