# Copyright (c) 2025 Dominic Masters # # This software is released under the MIT License. # https://opensource.org/licenses/MIT # Setup cmake_minimum_required(VERSION 3.13) set(CMAKE_C_STANDARD 99) set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules) if(NOT DEFINED DUSK_TARGET_SYSTEM) set(DUSK_TARGET_SYSTEM "linux") # set(DUSK_TARGET_SYSTEM "psp") endif() # Prep cache set(DUSK_CACHE_TARGET "dusk-target") # Build variables set(DUSK_ROOT_DIR "${CMAKE_SOURCE_DIR}") set(DUSK_BUILD_DIR "${CMAKE_BINARY_DIR}") set(DUSK_SOURCES_DIR "${DUSK_ROOT_DIR}/src") set(DUSK_TEMP_DIR "${DUSK_BUILD_DIR}/temp") set(DUSK_TOOLS_DIR "${DUSK_ROOT_DIR}/tools") set(DUSK_DATA_DIR "${DUSK_ROOT_DIR}/data") set(DUSK_ASSETS_DIR "${DUSK_ROOT_DIR}/assets") set(DUSK_BUILT_ASSETS_DIR "${DUSK_BUILD_DIR}/built_assets" CACHE INTERNAL ${DUSK_CACHE_TARGET}) set(DUSK_GENERATED_HEADERS_DIR "${DUSK_BUILD_DIR}/generated") set(DUSK_TARGET_NAME "Dusk" CACHE INTERNAL ${DUSK_CACHE_TARGET}) set(DUSK_BUILD_BINARY ${DUSK_BUILD_DIR}/Dusk CACHE INTERNAL ${DUSK_CACHE_TARGET}) set(DUSK_ASSETS "" CACHE INTERNAL ${DUSK_CACHE_TARGET}) # Create directories file(MAKE_DIRECTORY ${DUSK_GENERATED_HEADERS_DIR}) # Find packages find_package(Python3 COMPONENTS Interpreter REQUIRED) # Toolchains if(DUSK_TARGET_SYSTEM STREQUAL "psp") find_package(pspsdk REQUIRED) endif() # Init Project project(${DUSK_TARGET_NAME} VERSION 1.0.0 LANGUAGES C ) # Executable add_executable(${DUSK_TARGET_NAME}) # Add tools add_subdirectory(tools) # Assets add_subdirectory(assets) # Add libraries if(DUSK_TARGET_SYSTEM STREQUAL "linux") find_package(SDL2 REQUIRED) find_package(OpenGL REQUIRED) target_link_libraries(${DUSK_TARGET_NAME} PRIVATE SDL2 OpenGL::GL GL ) elseif(DUSK_TARGET_SYSTEM STREQUAL "psp") find_package(SDL2 REQUIRED) find_package(OpenGL REQUIRED) target_link_libraries(${DUSK_TARGET_NAME} PUBLIC ${SDL2_LIBRARIES} SDL2 OpenGL::GL zip bz2 z mbedtls mbedcrypto lzma ) target_include_directories(${DUSK_TARGET_NAME} PRIVATE ${SDL2_INCLUDE_DIRS} ) endif() # Add code add_subdirectory(src) # Include generated headers target_include_directories(${DUSK_TARGET_NAME} PUBLIC ${DUSK_GENERATED_HEADERS_DIR} ) # Build assets # message(FATAL_ERROR "Building assets for game: ${DUSK_ASSETS}") add_custom_target(DUSK_ASSETS_BUILT ALL COMMAND ${Python3_EXECUTABLE} ${DUSK_TOOLS_DIR}/assetstool/main.py --assets ${DUSK_GAME_ASSETS_DIR} --build-type wad --output-assets ${DUSK_BUILT_ASSETS_DIR} --output-file ${DUSK_BUILD_DIR}/dusk.dsk --output-headers ${DUSK_GENERATED_HEADERS_DIR}/asset/assetbundle.h --headers-dir ${DUSK_GENERATED_HEADERS_DIR} --input ${DUSK_ASSETS} ) add_dependencies(${DUSK_TARGET_NAME} DUSK_ASSETS_BUILT) # Postbuild if(DUSK_TARGET_SYSTEM STREQUAL "psp") create_pbp_file( TARGET "${DUSK_TARGET_NAME}" ICON_PATH NULL BACKGROUND_PATH NULL PREVIEW_PATH NULL TITLE "${DUSK_TARGET_NAME}" VERSION 01.00 ) endif()