100 lines
2.9 KiB
CMake
100 lines
2.9 KiB
CMake
|
|
cmake_minimum_required(VERSION 4.0)
|
|
project(factorygame C)
|
|
|
|
set(CMAKE_C_STANDARD 23)
|
|
|
|
find_package(PkgConfig REQUIRED)
|
|
pkg_check_modules(SDL2 REQUIRED sdl2)
|
|
|
|
# Allow setting the target platform manually
|
|
if (NOT DEFINED TARGET_PLATFORM)
|
|
if (WIN32)
|
|
set(TARGET_PLATFORM windows)
|
|
elseif (UNIX)
|
|
set(TARGET_PLATFORM linux)
|
|
else ()
|
|
message(FATAL_ERROR "Unsupported platform. Please set TARGET_PLATFORM manually.")
|
|
endif ()
|
|
endif ()
|
|
|
|
|
|
set(SOURCE_FILES
|
|
tiles/tile.c
|
|
tiles/tile.h
|
|
util/font.c
|
|
util/font.h
|
|
util/audio.c
|
|
util/audio.h
|
|
util/util.c
|
|
util/util.h
|
|
items/item.c
|
|
items/item.h
|
|
tiles/belt.c
|
|
tiles/belt.h
|
|
tiles/furnace.c
|
|
tiles/furnace.h
|
|
player/player.c
|
|
player/player.h # Ensure the target is defined before linking
|
|
tiles/tilecallbacks.c
|
|
tiles/tilecallbacks.h
|
|
main.c
|
|
util/perlin.c
|
|
util/perlin.h
|
|
util/atlas.c
|
|
util/atlas.h
|
|
tiles/miner.c
|
|
tiles/miner.h
|
|
)
|
|
|
|
add_executable(factorygame ${SOURCE_FILES})
|
|
|
|
|
|
message(STATUS "Target platform: ${TARGET_PLATFORM}")
|
|
|
|
# Detect build type and configure SDL2 paths accordingly
|
|
if (TARGET_PLATFORM STREQUAL "windows")
|
|
find_package(SDL2 REQUIRED)
|
|
find_package(SDL2_ttf REQUIRED)
|
|
include_directories(${SDL2_INCLUDE_DIRS})
|
|
link_directories(${SDL2_LIBRARY_DIRS})
|
|
add_definitions(${SDL2_CFLAGS_OTHER})
|
|
|
|
elseif (TARGET_PLATFORM STREQUAL "mingw")
|
|
# Cross-compile dynamically linked Windows build
|
|
set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc)
|
|
set(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres)
|
|
find_package(SDL2 REQUIRED)
|
|
find_package(SDL2_ttf REQUIRED)
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -mwindows")
|
|
target_link_libraries(factorygame mingw32 SDL2main SDL2 SDL2_ttf SDL2_image m)
|
|
include_directories(${SDL2_INCLUDE_DIRS})
|
|
link_directories(${SDL2_LIBRARY_DIRS})
|
|
add_definitions(${SDL2_CFLAGS_OTHER})
|
|
|
|
elseif (TARGET_PLATFORM STREQUAL "linux")
|
|
pkg_check_modules(SDL2 REQUIRED sdl2)
|
|
pkg_check_modules(SDL2_TTF REQUIRED SDL2_ttf)
|
|
pkg_check_modules(SDL2_IMAGE REQUIRED SDL2_image)
|
|
target_link_libraries(factorygame SDL2 SDL2_ttf SDL2_image m)
|
|
include_directories(${SDL2_INCLUDE_DIRS})
|
|
add_definitions(${SDL2_CFLAGS_OTHER})
|
|
|
|
else ()
|
|
message(FATAL_ERROR "Unsupported TARGET_PLATFORM: ${TARGET_PLATFORM}")
|
|
endif ()
|
|
|
|
# Define the path to the assets folder
|
|
set(ASSETS_SOURCE_DIR "${CMAKE_SOURCE_DIR}/assets")
|
|
set(ASSETS_BINARY_DIR "${CMAKE_BINARY_DIR}/assets")
|
|
|
|
# Copy assets directory always
|
|
add_custom_target(copy_assets ALL
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
"${ASSETS_SOURCE_DIR}" "${ASSETS_BINARY_DIR}"
|
|
COMMENT "Copying assets directory to build output..."
|
|
)
|
|
|
|
# Make sure factorygame depends on the assets being copied
|
|
add_dependencies(factorygame copy_assets)
|