You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.5 KiB
59 lines
1.5 KiB
set(PROJECT "bootdev") |
|
|
|
cmake_minimum_required(VERSION 3.16) |
|
project(${PROJECT} C) |
|
|
|
set(CMAKE_C_STANDARD 11) |
|
set(CMAKE_C_STANDARD_REQUIRED ON) |
|
|
|
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Og -g -pg") |
|
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) |
|
|
|
# ------------------------------------------ |
|
# Library µnit |
|
|
|
file(GLOB_RECURSE LIBRARY_SOURCES "vendor/munit/*.c") |
|
|
|
add_library(munit ${LIBRARY_SOURCES}) |
|
|
|
# ------------------------------------------ |
|
# Executable |
|
|
|
file(GLOB LESSONS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/src/*) |
|
|
|
set(ALL_RUN "") |
|
set(ALL_TARGETS "") |
|
foreach(LESSON ${LESSONS}) |
|
if(NOT IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${LESSON}) |
|
continue() |
|
endif() |
|
|
|
file(GLOB LESSON_SOURCES CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${LESSON}/*.c) |
|
if(NOT LESSON_SOURCES) |
|
continue() |
|
endif() |
|
|
|
# Get last directory name of the path to use as exe |
|
get_filename_component(EXE_NAME ${LESSON} NAME) |
|
|
|
add_executable(${EXE_NAME} ${LESSON_SOURCES}) |
|
target_include_directories(${EXE_NAME} PRIVATE |
|
${CMAKE_CURRENT_SOURCE_DIR}/src |
|
${CMAKE_CURRENT_SOURCE_DIR}/${LESSON}) |
|
target_link_libraries(${EXE_NAME} munit) |
|
|
|
# Collect all the directory names for the run target |
|
list(APPEND ALL_RUN COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${EXE_NAME}) |
|
list(APPEND ALL_TARGETS ${EXE_NAME}) |
|
endforeach() |
|
|
|
# ------------------------------------------ |
|
# Execute target |
|
|
|
add_custom_target(run |
|
${ALL_RUN}) |
|
|
|
foreach(target ${ALL_TARGETS}) |
|
add_dependencies(run ${target}) |
|
endforeach()
|
|
|