# Build type: FAT (SD/USB via libfat) or ISO (DVD disc via libogc DVD driver) set(DUSK_DOLPHIN_BUILD_TYPE "FAT" CACHE STRING "Dolphin asset source: FAT (SD/USB) or ISO (DVD disc)") set_property(CACHE DUSK_DOLPHIN_BUILD_TYPE PROPERTY STRINGS "FAT" "ISO") # Target definitions target_compile_definitions(${DUSK_LIBRARY_TARGET_NAME} PUBLIC DUSK_DOLPHIN DUSK_INPUT_GAMEPAD DUSK_DISPLAY_WIDTH=640 DUSK_DISPLAY_HEIGHT=480 DUSK_THREAD_PTHREAD DUSK_DOLPHIN_BUILD_TYPE="${DUSK_DOLPHIN_BUILD_TYPE}" ) # Custom compiler flags set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti -fno-exceptions") # Disable all warnings target_compile_options(${DUSK_LIBRARY_TARGET_NAME} PRIVATE -w) # cglm: fetched at source level via Findcglm.cmake (FetchContent, headers only) find_package(cglm REQUIRED) # Pre-create ZLIB::ZLIB so any downstream cmake module that resolves it # (FindZLIB, pkg-config IMPORTED_TARGET Requires processing) gets plain -lz # rather than an unresolvable IMPORTED target that the PPC linker rejects. if(NOT TARGET ZLIB::ZLIB) add_library(ZLIB::ZLIB INTERFACE IMPORTED GLOBAL) set_target_properties(ZLIB::ZLIB PROPERTIES INTERFACE_LINK_LIBRARIES "z") endif() # Mark libzip as found so src/dusk/CMakeLists.txt skips Findlibzip.cmake. # Findlibzip.cmake calls find_package(ZLIB) which can recreate a broken # ZLIB::ZLIB IMPORTED target, bypassing the shim above. set(libzip_FOUND TRUE CACHE BOOL "libzip found (devkitpro portlibs)" FORCE) # Locate zip.h in the devkitpro sysroot (respects CMAKE_FIND_ROOT_PATH). find_path(_dusk_zip_inc NAMES zip.h) if(_dusk_zip_inc) target_include_directories(${DUSK_LIBRARY_TARGET_NAME} PRIVATE "${_dusk_zip_inc}") endif() # Link libraries. # zip/z/lzma use target_link_options (raw flags) to bypass cmake target # resolution — pkg-config-generated targets for these carry ZLIB::ZLIB in # INTERFACE_LINK_LIBRARIES which breaks the PPC link step. target_link_libraries(${DUSK_LIBRARY_TARGET_NAME} PRIVATE cglm m zip bz2 zstd z lzma ) if(DUSK_DOLPHIN_BUILD_TYPE STREQUAL "ISO") target_compile_definitions(${DUSK_LIBRARY_TARGET_NAME} PUBLIC DUSK_DOLPHIN_BUILD_ISO) else() target_link_libraries(${DUSK_LIBRARY_TARGET_NAME} PRIVATE fat) endif() # Postbuild: ELF -> DOL set(DUSK_BINARY_TARGET_NAME_DOL "${DUSK_BUILD_DIR}/Dusk.dol") add_custom_command(TARGET ${DUSK_BINARY_TARGET_NAME} POST_BUILD COMMAND elf2dol "$" "${DUSK_BINARY_TARGET_NAME_DOL}" COMMENT "Generating ${DUSK_BINARY_TARGET_NAME_DOL} from ${DUSK_BINARY_TARGET_NAME}" )