rts/CMakeLists.txt

162 lines
4.9 KiB
CMake
Raw Normal View History

2021-07-03 00:49:03 +02:00
cmake_minimum_required(VERSION 3.13)
option(PS1_BUILD "Build for the original Sony Playstation" OFF)
option(HOST_BUILD "Build for host platform using SDL-1.2" OFF)
option(WIN9X_BUILD "Build for Win9x using SDL-1.2" OFF)
if(NOT PS1_BUILD AND NOT HOST_BUILD AND NOT WIN9X_BUILD)
message(FATAL_ERROR "Please define target platform. Available options:
PS1_BUILD
HOST_BUILD
WIN9X_BUILD
Run CMake again using one of the available platforms e.g.: cmake .. -DPS1_BUILD=1")
endif()
if(PS1_BUILD)
if("$ENV{PSXSDK_PATH}" STREQUAL "")
message(FATAL_ERROR "Please set PSXSDK_PATH env variable first")
endif()
set(CMAKE_C_COMPILER psx-gcc)
set(CMAKE_AR mipsel-unknown-elf-ar)
elseif(WIN9X_BUILD)
set(CMAKE_C_COMPILER i386-mingw32-gcc)
endif()
project(rts)
add_executable(${PROJECT_NAME} "src/main.c")
set(cdroot ${CMAKE_BINARY_DIR}/cdimg)
2021-07-03 00:49:03 +02:00
if(PS1_BUILD)
file(MAKE_DIRECTORY ${cdroot})
target_link_directories(${PROJECT_NAME} PUBLIC $ENV{PSXSDK_PATH}/lib)
target_link_libraries(${PROJECT_NAME} PUBLIC -lpsx -lfixmath)
target_compile_definitions(${PROJECT_NAME} PUBLIC FIXMATH_FAST_SIN PSXSDK_DEBUG)
target_include_directories(${PROJECT_NAME} PRIVATE . $ENV{PSXSDK_PATH}/include)
add_custom_target(exe ALL elf2exe ${PROJECT_NAME}
${cdroot}/${PROJECT_NAME}.exe -mark="A homebrew game created with PSXSDK"
DEPENDS ${PROJECT_NAME})
add_custom_target(iso ALL mkisofs -o ${PROJECT_NAME}.iso -V ${PROJECT_NAME}
-sysid PLAYSTATION ${cdroot} DEPENDS exe)
set(license $ENV{PSXSDK_PATH}/share/licenses/infoeur.dat)
add_custom_target(bin_cue ALL mkpsxiso ${PROJECT_NAME}.iso ${PROJECT_NAME}.bin
${license} -s DEPENDS iso)
# add_custom_target(libpsx ALL DEPENDS $ENV{PSXSDK_PATH}/lib/libpsx.a)
# add_dependencies(${PROJECT_NAME} libpsx)
if(NOT EXISTS "${cdroot}/system.cnf")
file(COPY "src/system.cnf" DESTINATION "${cdroot}")
2021-07-03 00:49:03 +02:00
endif()
elseif(WIN9X_BUILD)
file(MAKE_DIRECTORY ${cdroot})
if("$ENV{SDL_PATH}" STREQUAL "")
message(FATAL_ERROR "please define env variable SDL_PATH")
elseif("$ENV{SDL_TTF_PATH}" STREQUAL "")
message(FATAL_ERROR "please define env variable SDL_TTF_PATH")
elseif("$ENV{FREETYPE_PATH}" STREQUAL "")
message(FATAL_ERROR "please define env variable FREETYPE_PATH")
elseif("$ENV{SDL_MIXER_PATH}" STREQUAL "")
message(FATAL_ERROR "please define env variable SDL_MIXER_PATH")
endif()
2022-02-13 21:28:42 +01:00
add_custom_command(OUTPUT ${cdroot}/${PROJECT_NAME}
COMMAND i386-mingw32-strip ${PROJECT_NAME} -o ${cdroot}/${PROJECT_NAME}
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
DEPENDS ${PROJECT_NAME}
VERBATIM)
add_custom_target(stripped-exe ALL DEPENDS ${cdroot}/${PROJECT_NAME})
2021-07-03 00:49:03 +02:00
target_link_directories(${PROJECT_NAME} PRIVATE $ENV{SDL_PATH}/lib
$ENV{SDL_TTF_PATH}/lib $ENV{FREETYPE_PATH}/lib
$ENV{SDL_MIXER_PATH}/lib)
include_directories($ENV{SDL_PATH}/include
$ENV{SDL_PATH}/include/SDL $ENV{SDL_TTF_PATH}/include
$ENV{FREETYPE_PATH}/include
$ENV{SDL_MIXER_PATH}/include)
add_compile_options(-march=i386)
link_libraries(gdi32 user32 winmm dxguid freetype)
set(SDL1_2_BUILD 1)
elseif(HOST_BUILD)
file(MAKE_DIRECTORY ${cdroot})
find_package(SDL 1.2 REQUIRED)
find_package(SDL_mixer 1.2 REQUIRED)
set(SDL1_2_BUILD 1)
#find_package(SDL_ttf 2.0 REQUIRED)
endif()
# libfixmath is already bundled with PSXSDK.
if(NOT PS1_BUILD)
2022-02-24 23:02:14 +01:00
add_subdirectory(libfixmath)
2021-07-03 00:49:03 +02:00
endif()
add_subdirectory("res")
set(components
building
camera
container
font
game
gfx
gui
header
2021-07-03 00:49:03 +02:00
instance
2022-02-24 17:55:57 +01:00
keyboard
mouse
2021-07-03 00:49:03 +02:00
pad
player
resource
sfx
system
terrain
unit
util
)
set(interfaces
tech
)
# Avoid C11 since it is not supported by the i386-mingw32 toolchain.
set(cflags -Wall -g3 -ffunction-sections -fdata-sections -pedantic -std=c99)
if(WIN9X_BUILD)
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
# i386-mingw32-gcc 3.4.5 does not support -Og.
set(cflags ${cflags} -O0)
else()
set(cflags ${cflags} -O2)
endif()
elseif(PS1_BUILD)
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(cflags ${cflags} -Og)
else()
set(cflags ${cflags} -Os)
endif()
set(cflags ${cflags} -fshort-enums)
else()
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(cflags ${cflags} -Og)
else()
set(cflags ${cflags} -O3)
endif()
endif()
target_compile_options(${PROJECT_NAME} PUBLIC ${cflags})
foreach(c ${components})
add_subdirectory("src/${c}")
target_compile_options(${c} PUBLIC ${cflags})
target_link_libraries(${PROJECT_NAME} PRIVATE ${c})
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)