mtl/CMakeLists.txt
2024-03-27 00:31:15 -06:00

67 lines
2.3 KiB
CMake

cmake_minimum_required(VERSION 3.5)
project(mtl LANGUAGES CXX C ASM)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
message("Compiling MTL for ${CMAKE_SYSTEM_PROCESSOR}")
# Adds the sources to the target if there is not already a source with the
# same filename (ie. no clobber/noc). (Note, the files can be in different directories)
function(target_sources_noc target linkage sources)
get_target_property(cur_sources ${target} SOURCES)
foreach(src_fq ${sources})
cmake_path(GET src_fq FILENAME src)
set(already_exists false)
# Check if the source already exists
foreach (csrc_fq ${cur_sources})
cmake_path(GET csrc_fq FILENAME csrc)
if (src STREQUAL csrc)
set(already_exists true)
break()
endif()
endforeach()
if (NOT already_exists)
target_sources(${target} ${linkage} "${src_fq}")
endif()
endforeach()
endfunction()
# CONFIGURE_DEPENDS option was added in CMake v3.12. This option allows the
# build system to automatically re-run CMake if the glob changes, solving the
# major issue with globbing. May have a performance impact, but it should be
# negligible compared to the time spent building.
file(GLOB mtl_sources_common LIST_DIRECTORIES false CONFIGURE_DEPENDS src/*.cpp src/*.c src/*.s)
file(GLOB mtl_sources_debug LIST_DIRECTORIES false CONFIGURE_DEPENDS src/debug/*.cpp src/debug/*.c src/debug/*.s)
file(GLOB mtl_sources_armv4t LIST_DIRECTORIES false CONFIGURE_DEPENDS src/armv4t/*.cpp src/armv4t/*.c src/armv4t/*.s)
file(GLOB mtl_sources_gba LIST_DIRECTORIES false CONFIGURE_DEPENDS src/gba/*.cpp src/gba/*.c src/gba/*.s)
set(mtl_include_common "include")
set(mtl_include_debug "include/debug")
add_library(${PROJECT_NAME} STATIC)
set(mtl_processor_generic true)
set(mtl_platform_generic true)
if (CMAKE_SYSTEM_NAME STREQUAL "NintendoGBA")
target_sources_noc(${PROJECT_NAME} PRIVATE "${mtl_sources_gba}")
endif()
if (CMAKE_SYSTEM_PROCESSOR STREQUAL "armv4t")
target_sources_noc(${PROJECT_NAME} PRIVATE "${mtl_sources_armv4t}")
endif()
target_sources_noc(${PROJECT_NAME} PRIVATE "${mtl_sources_common}")
target_include_directories(${PROJECT_NAME} PUBLIC "${mtl_include_common}")
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
target_sources_noc(${PROJECT_NAME} PRIVATE "${mtl_sources_debug}")
target_include_directories(${PROJECT_NAME} PUBLIC "${mtl_include_debug}")
endif()
# TODO: Support installing library