Newer
Older
Tardis / lang / CMakeLists.txt
# 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()