Refactor project structure and remove unnecessary files

- Deleted generated CMake files and build artifacts from the cmake-build-debug directory.
- Removed the Intellisense header - what was that???
- Cleaned up the melonDS.ini configuration (removed hard path)
This commit is contained in:
2026-03-29 00:44:16 +01:00
parent d9b7544a04
commit 561b99b710
48 changed files with 395 additions and 3546 deletions

View File

@@ -1,16 +1,189 @@
cmake_minimum_required(VERSION 3.15)
project(snakePlus)
cmake_minimum_required(VERSION 3.13)
if("$ENV{DEVKITPRO}" STREQUAL "")
message(FATAL_ERROR "DEVKITPRO is not set. Please export DEVKITPRO to your devkitPro root.")
endif()
set(DEVKITPRO_ROOT "$ENV{DEVKITPRO}")
set(DEVKITPRO_CMAKE "${DEVKITPRO_ROOT}/cmake/NDS.cmake")
if(NOT EXISTS "${DEVKITPRO_CMAKE}")
message(FATAL_ERROR "Could not find NDS.cmake at ${DEVKITPRO_CMAKE}. Check DEVKITPRO.")
endif()
# Ensure re-configure runs in DS context as well.
set(CMAKE_SYSTEM_NAME NintendoDS CACHE INTERNAL "Target system" FORCE)
set(CMAKE_SYSTEM_PROCESSOR armv5te CACHE INTERNAL "Target CPU" FORCE)
include("${DEVKITPRO_CMAKE}")
project(snakePlus LANGUAGES C CXX ASM)
# Export compile_commands.json for tooling (clangd, IntelliSense, static analysis).
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS ON)
include_directories(build)
include_directories(include)
set(TARGET_NAME ${PROJECT_NAME})
add_executable(snakePlus
build/soundbank.h
build/soundbank_bin.h
build/tilemap.h
include/consts.h
include/Intellisense.h
source/main.cpp
Makefile)
set(GAME_TITLE "Snake Plus")
set(GAME_SUBTITLE1 "Snake with a twist")
set(GAME_SUBTITLE2 "Phillip Kuehne")
set(GAME_ICON ${CMAKE_CURRENT_SOURCE_DIR}/icon.bmp)
file(GLOB_RECURSE SRC_C CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/source/*.c)
file(GLOB_RECURSE SRC_CPP CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/source/*.cpp)
file(GLOB_RECURSE SRC_ASM CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/source/*.s)
set(TILEMAP_PNG ${CMAKE_CURRENT_SOURCE_DIR}/gfx/tilemap.png)
set(TILEMAP_GRIT ${CMAKE_CURRENT_SOURCE_DIR}/gfx/tilemap.grit)
set(TILEMAP_S ${CMAKE_CURRENT_BINARY_DIR}/tilemap.s)
set(TILEMAP_H ${CMAKE_CURRENT_BINARY_DIR}/tilemap.h)
add_custom_command(
OUTPUT ${TILEMAP_S} ${TILEMAP_H}
COMMAND ${GRIT_EXE} ${TILEMAP_PNG} -fts -o${CMAKE_CURRENT_BINARY_DIR}/tilemap
DEPENDS ${TILEMAP_PNG} ${TILEMAP_GRIT}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Generating tilemap assets with grit"
VERBATIM
)
add_custom_target(tilemap_assets DEPENDS ${TILEMAP_S} ${TILEMAP_H})
file(GLOB AUDIO_FILES CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/sounds/*.*)
set(SOUNDBANK_BIN ${CMAKE_CURRENT_BINARY_DIR}/soundbank.bin)
set(SOUNDBANK_H ${CMAKE_CURRENT_BINARY_DIR}/soundbank.h)
set(SOUNDBANK_BIN_S ${CMAKE_CURRENT_BINARY_DIR}/soundbank_bin.S)
set(SOUNDBANK_BIN_H ${CMAKE_CURRENT_BINARY_DIR}/soundbank_bin.h)
find_program(MMUTIL_EXE NAMES mmutil HINTS "${DEVKITPRO_ROOT}/tools/bin")
find_program(BIN2S_EXE NAMES bin2s HINTS "${DEVKITPRO_ROOT}/tools/bin")
if(NOT MMUTIL_EXE)
message(FATAL_ERROR "Could not find mmutil")
endif()
if(NOT BIN2S_EXE)
message(FATAL_ERROR "Could not find bin2s")
endif()
add_custom_command(
OUTPUT ${SOUNDBANK_BIN} ${SOUNDBANK_H} ${SOUNDBANK_BIN_S} ${SOUNDBANK_BIN_H}
COMMAND ${MMUTIL_EXE} ${AUDIO_FILES} -d -o${SOUNDBANK_BIN} -h${SOUNDBANK_H}
COMMAND /bin/sh -c "\"${BIN2S_EXE}\" -a 4 -H \"${SOUNDBANK_BIN_H}\" \"${SOUNDBANK_BIN}\" > \"${SOUNDBANK_BIN_S}\""
DEPENDS ${AUDIO_FILES}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Generating maxmod soundbank and embedded binary sources"
VERBATIM
)
add_custom_target(soundbank_assets DEPENDS ${SOUNDBANK_BIN} ${SOUNDBANK_H} ${SOUNDBANK_BIN_S} ${SOUNDBANK_BIN_H})
add_executable(${TARGET_NAME}
${SRC_C}
${SRC_CPP}
${SRC_ASM}
${TILEMAP_S}
${SOUNDBANK_BIN_S}
)
add_dependencies(${TARGET_NAME}
tilemap_assets
soundbank_assets
)
target_include_directories(${TARGET_NAME} PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/include
${CMAKE_CURRENT_BINARY_DIR}
${DEVKITPRO_ROOT}/libnds/include
${DEVKITPRO_ROOT}/portlibs/nds/include
${DEVKITPRO_ROOT}/portlibs/armv5te/include
)
target_link_directories(${TARGET_NAME} PRIVATE
${DEVKITPRO_ROOT}/calico/lib
${DEVKITPRO_ROOT}/libnds/lib
${DEVKITPRO_ROOT}/portlibs/nds/lib
${DEVKITPRO_ROOT}/portlibs/armv5te/lib
)
target_compile_definitions(${TARGET_NAME} PRIVATE
ARM9
__NDS__
)
target_compile_options(${TARGET_NAME} PRIVATE
-g
-Wall
-O3
-marm
-mthumb-interwork
-march=armv5te
-mtune=arm946e-s
-fno-rtti
-fno-exceptions
)
set(DS9_SPECS_FLAG "-specs=${DEVKITPRO_ROOT}/calico/share/ds9.specs")
string(FIND "${CMAKE_EXE_LINKER_FLAGS}" "${DS9_SPECS_FLAG}" _has_ds9_specs)
if(_has_ds9_specs EQUAL -1)
set(EXTRA_DS9_SPECS_FLAG "${DS9_SPECS_FLAG}")
endif()
target_link_options(${TARGET_NAME} PRIVATE
${EXTRA_DS9_SPECS_FLAG}
-marm
-mthumb-interwork
-march=armv5te
-mtune=arm946e-s
-Wl,-Map,${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.map
)
target_link_libraries(${TARGET_NAME} PRIVATE
mm9
)
set_target_properties(${TARGET_NAME} PROPERTIES
OUTPUT_NAME ${PROJECT_NAME}
SUFFIX ".elf"
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
set(NDS_OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.nds)
find_program(NDSTOOL_EXE NAMES ndstool HINTS "${DEVKITPRO_ROOT}/tools/bin")
if(NOT NDSTOOL_EXE)
message(FATAL_ERROR "Could not find ndstool")
endif()
set(ARM7_DEFAULT ${DEVKITPRO_ROOT}/calico/bin/ds7_maine.elf)
if(NOT EXISTS ${ARM7_DEFAULT})
message(FATAL_ERROR "Could not find default ARM7 binary: ${ARM7_DEFAULT}")
endif()
add_custom_command(
OUTPUT ${NDS_OUTPUT}
COMMAND ${NDSTOOL_EXE} -c ${NDS_OUTPUT} -9 $<TARGET_FILE:${TARGET_NAME}> -7 ${ARM7_DEFAULT} -b ${GAME_ICON} "${GAME_TITLE}\;${GAME_SUBTITLE1}\;${GAME_SUBTITLE2}"
DEPENDS ${TARGET_NAME} ${GAME_ICON}
COMMENT "Building NDS ROM image"
VERBATIM
)
add_custom_target(${TARGET_NAME}_nds ALL DEPENDS ${NDS_OUTPUT})
add_custom_target(run
COMMAND melonDS ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.nds
DEPENDS ${TARGET_NAME}_nds
USES_TERMINAL
COMMENT "Running ROM in melonDS"
)
add_custom_target(install_sd
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.nds /run/media/phillip/9016-4EF8/devel/
DEPENDS ${TARGET_NAME}_nds
COMMENT "Copying ROM to SD card"
)