# SPDX-License-Identifier: MIT # Copyright (c) 2023 John Watts and the LuminaSensum contributors cmake_minimum_required(VERSION 3.25) # Create mini-gmp library project(mini-gmp) file(GLOB GMP_SRC_FILES "${PROJECT_SOURCE_DIR}/mini-gmp/*.c") add_library(mini-gmp ${GMP_SRC_FILES}) target_include_directories(mini-gmp PUBLIC "${PROJECT_SOURCE_DIR}/mini-gmp/") set_property(TARGET mini-gmp PROPERTY C_STANDARD 11) # Useful options for compiling set(compile_opts -Wall -Wextra -Wpedantic -Werror -fwrapv -fno-strict-aliasing -fsigned-char) # Find and build modules file(GLOB SRC_MODULES "${PROJECT_SOURCE_DIR}/modules/*.txt") set(MODULE_COMPILER ${CMAKE_CURRENT_SOURCE_DIR}/compile.py) set(MODULE_C_FILES "") set(MODULE_IDS "") foreach(MODULE ${SRC_MODULES}) get_filename_component(ID ${MODULE} NAME_WLE) set(MODULE_OUT modules/${ID}.c) add_custom_command( OUTPUT ${MODULE_OUT} COMMAND python ${MODULE_COMPILER} ${MODULE} ${MODULE_OUT} ${ID} DEPENDS ${MODULE} ${MODULE_COMPILER} ) list(APPEND MODULE_C_FILES ${MODULE_OUT}) set(MODULE_IDS "${MODULE_IDS}X(${ID})\n") endforeach() file(CONFIGURE OUTPUT include/module_ids.x CONTENT ${MODULE_IDS}) # Create TardisLang library project(TardisLang) file(GLOB SRC_FILES "${PROJECT_SOURCE_DIR}/*.c") add_library(TardisLang ${SRC_FILES} ${MODULE_C_FILES}) target_include_directories(TardisLang PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}") target_include_directories(TardisLang PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/include") set_property(TARGET TardisLang PROPERTY C_STANDARD 11) target_compile_options(TardisLang PRIVATE ${compile_opts}) target_link_libraries(TardisLang PUBLIC mini-gmp) # Create test app program option(BUILD_TARDISLANG_APP "Build the TardisLang test app" ON) if(BUILD_TARDISLANG_APP) project(TardisLangApp) file(GLOB SRC_FILES "${PROJECT_SOURCE_DIR}/app/*.c") add_executable(TardisLangApp ${SRC_FILES}) set_property(TARGET TardisLangApp PROPERTY C_STANDARD 11) target_compile_options(TardisLangApp PRIVATE ${compile_opts}) target_link_libraries(TardisLangApp PRIVATE TardisLang) endif()