cmake_minimum_required(VERSION 3.13) set(TOOLS_PREFIX ${CMAKE_BINARY_DIR}/tools) include(ExternalProject) ExternalProject_Add(tools SOURCE_DIR ${CMAKE_SOURCE_DIR}/tools CMAKE_ARGS -D CMAKE_INSTALL_PREFIX=${TOOLS_PREFIX}) project(rts) if(CMAKE_TOOLCHAIN_FILE MATCHES "ps1") set(PS1_BUILD 1) elseif(CMAKE_TOOLCHAIN_FILE MATCHES "win9x") set(WIN9X_BUILD 1) else() set(HOST_BUILD 1) endif() add_executable(${PROJECT_NAME} "src/main.c") set(cdroot ${CMAKE_BINARY_DIR}/cdimg) # Avoid C11 since it is not supported by the i386-mingw32 toolchain. set(cflags -Wall -g3 -ffunction-sections -fdata-sections -pedantic -std=c99) if(PS1_BUILD) include("cmake/ps1.cmake") elseif(WIN9X_BUILD) include("cmake/win9x.cmake") elseif(HOST_BUILD) include("cmake/host.cmake") endif() add_subdirectory("res") set(components building button camera container font game gfx gui header instance keyboard mouse pad peripheral player resource sfx system terrain unit util ) set(interfaces tech ) target_compile_options(${PROJECT_NAME} PUBLIC ${cflags}) # Dependencies for main.c target_link_libraries(${PROJECT_NAME} PRIVATE system game) foreach(c ${components}) add_subdirectory("src/${c}") target_compile_options(${c} PUBLIC ${cflags}) endforeach() foreach(i ${interfaces}) add_subdirectory("src/${i}") target_compile_options(${i} INTERFACE ${cflags}) target_link_libraries(${PROJECT_NAME} PRIVATE ${c}) endforeach() target_link_options(${PROJECT_NAME} PRIVATE -Wl,--gc-sections)