- CMake (3.25 minimum)
- Arm compiler toolchain (Arm GNU Toolchain, devkitPro)
gba-toolchain provides a CMake toolchain file "cmake/gba.toolchain.cmake" that sets up compilers & tools for GBA development.
For more information on CMake toolchains see: cmake-toolchains cross-compiling
CMake toolchains can be used with CMake on the command line as such:
cmake -S . -B build/ --toolchain=/path/to/cmake/gba.toolchain.cmakeFor more information on CMake presets files see: cmake-presets configure-preset
Objects of configurePresets has the member toolchainFile:
{
"version": 3,
"cmakeMinimumRequired": {
"major": 3,
"minor": 25,
"patch": 1
},
"configurePresets": [
{
"name": "gba-toolchain",
"generator": "Unix Makefiles",
"toolchainFile": "/path/to/cmake/gba.toolchain.cmake",
"binaryDir": "${sourceDir}/build",
"cacheVariables": {
"CMAKE_BUILD_TYPE": {
"type": "STRING",
"value": "Debug"
}
}
}
]
}cmake_minimum_required(VERSION 3.25.1)
project(my_project LANGUAGES C VERSION 1.0.0)
find_package(librom REQUIRED)
find_package(tonclib REQUIRED)
find_package(grit REQUIRED)
add_executable(my_executable
main.c
)
# ROM header info
set_target_properties(my_executable PROPERTIES
ROM_TITLE "my game"
ROM_VERSION 1
)
# Sprite graphics
add_grit_library(sprite
GRAPHICS_BIT_DEPTH 4
AREA_RIGHT 64
graphics/metr.png
)
# Map graphics
add_grit_library(map
GRAPHICS_BIT_DEPTH 4
MAP_LAYOUT REGULAR_SBB
graphics/brin.png
)
target_link_libraries(my_executable PRIVATE
librom tonclib
sprite map
)
# Install to .gba
install_rom(my_executable)add_asset_library(<target> [PREFIX <symbol-prefix>] [SUFFIX_START <start-symbol-suffix>] [SUFFIX_END <end-symbol-suffix>] [SUFFIX_SIZE <size-symbol-suffix>] [WORKING_DIRECTORY <working-directory-path>] <file-path>...)
Compiles assets into a binary object file for linking.
Example:
add_asset_library(my_assets
hello.txt
image.bin
palette.pal
)
target_link_libraries(my_executable PRIVATE my_assets)
# hello_txt, image_bin, palette_pal symbols now available via `my_assets.h`CMake modules are made available with the find_package function.
For more information on CMake find_package see: cmake-commands find_package
Library functions optimized for the GBA (more info)
Butano engine (more info)
add_butano_library(<target> [GRAPHICS <file-path>...] [AUDIO <file-path>...] [DMG_AUDIO <file-path>...])
C++20 GBA development library (more info)
Archive format for the GBA (more info)
add_gbfs_library(<target> <file-path>...)
Game Boy music player library and converter kit (more info)
add_s3msplit_command(<input-s3m> <PSG output-psg> <DMA output-dma>)
add_gbt_library(<target> <file-path>...)
Bitmap and Tile graphics converter (more info)
List of expected outputs are returned via GRIT_COMMAND_OUTPUTS, suitable for passing to other library commands as inputs (such as add_asset_library or add_gbfs_library).
add_grit_command([PALETTE_SHARED] [GRAPHICS_SHARED] [FLAGS <flags-string>] [FLAGS_FILE <flags-path>] [TILESET_FILE <tileset-path>]
[PALETTE|NO_PALETTE]
[PALETTE_COMPRESSION <OFF|LZ77|HUFF|RLE|FAKE>]
[PALETTE_RANGE_START <integer>]
[PALETTE_RANGE_END <integer>]
[PALETTE_COUNT <integer>]
[PALETTE_TRANSPARENT_INDEX <integer>]
[GRAPHICS|NO_GRAPHICS]
[GRAPHICS_COMPRESSION <OFF|LZ77|HUFF|RLE|FAKE>]
[GRAPHICS_PIXEL_OFFSET <integer>]
[GRAPHICS_FORMAT <BITMAP|TILE>]
[GRAPHICS_BIT_DEPTH <integer>]
[GRAPHICS_TRANSPARENT_COLOR <hex-code>]
[AREA_LEFT <integer>]
[AREA_RIGHT <integer>]
[AREA_WIDTH <integer>]
[AREA_TOP <integer>]
[AREA_BOTTOM <integer>]
[AREA_HEIGHT <integer>]
[MAP|NO_MAP]
[MAP_COMPRESSION <OFF|LZ77|HUFF|RLE|FAKE>]
[<MAP_TILE_REDUCTION <TILES|PALETTES|FLIPPED>...>|MAP_NO_TILE_REDUCTION]
[MAP_LAYOUT <REGULAR_FLAT|REGULAR_SBB|AFFINE>]
[METATILE_HEIGHT <integer>]
[METATILE_WIDTH <integer>]
[METATILE_REDUCTION]
<file-path>...
)The library version of this command produces a linkable output.
add_grit_library(<target> [PALETTE_SHARED] [GRAPHICS_SHARED] [FLAGS <flags-string>] [FLAGS_FILE <flags-path>] [TILESET_FILE <tileset-path>]
[PALETTE|NO_PALETTE]
[PALETTE_COMPRESSION <OFF|LZ77|HUFF|RLE|FAKE>]
[PALETTE_RANGE_START <integer>]
[PALETTE_RANGE_END <integer>]
[PALETTE_COUNT <integer>]
[PALETTE_TRANSPARENT_INDEX <integer>]
[GRAPHICS|NO_GRAPHICS]
[GRAPHICS_COMPRESSION <OFF|LZ77|HUFF|RLE|FAKE>]
[GRAPHICS_PIXEL_OFFSET <integer>]
[GRAPHICS_FORMAT <BITMAP|TILE>]
[GRAPHICS_BIT_DEPTH <integer>]
[GRAPHICS_TRANSPARENT_COLOR <hex-code>]
[AREA_LEFT <integer>]
[AREA_RIGHT <integer>]
[AREA_WIDTH <integer>]
[AREA_TOP <integer>]
[AREA_BOTTOM <integer>]
[AREA_HEIGHT <integer>]
[MAP|NO_MAP]
[MAP_COMPRESSION <OFF|LZ77|HUFF|RLE|FAKE>]
[<MAP_TILE_REDUCTION <TILES|PALETTES|FLIPPED>...>|MAP_NO_TILE_REDUCTION]
[MAP_LAYOUT <REGULAR_FLAT|REGULAR_SBB|AFFINE>]
[METATILE_HEIGHT <integer>]
[METATILE_WIDTH <integer>]
[METATILE_REDUCTION]
<file-path>...
)C GBA development library from devkitPro (more info)
Multiboot runtime library for executables transferred via GBA MultiBoot
ROM runtime library for standard .gba ROMs.
install_rom(<target> [CONCAT [ALIGN <byte-alignment>] <artifact>...])
A library to access various backup media in GBA cartridges (more info)
GBA music and sound solution (more info)
add_maxmod_library(<target> <file-path>...)
Partial implementation of sprintf optimized for the GBA (more info)
Modern GBA SDK (more info)
add_gbafix_target(<target> <executable-target>)
Provides sdk-seven::minrt and sdk-seven::minrt_mb runtime libraries.
Provides sdk-seven::libseven C development library.
Provides sdk-seven::libutil support library.
Tile graphics converter (more info)
add_superfamiconv_library(<target> [PALETTE] [TILES] [MAP]
[PALETTE_SPRITE_MODE]
[PALETTE_COUNT <integer>]
[PALETTE_COLORS <integer>]
[PALETTE_COLOR_ZERO <hex-code>]
[TILES_NO_DISCARD]
[TILES_NO_FLIP]
[TILES_SPRITE_MODE]
[TILES_BPP <integer>]
[TILES_MAX <integer>]
[MAP_NO_FLIP]
[MAP_COLUMN_ORDER]
[MAP_BPP <integer>]
[MAP_TILE_BASE <integer>]
[MAP_PALETTE_BASE <integer>]
[MAP_WIDTH <integer>]
[MAP_HEIGHT <integer>]
[MAP_SPLIT_WIDTH <tiles>]
[MAP_SPLIT_HEIGHT <tiles>]
<file-path>...
)Classic C GBA development library from Coranac (more info)
Universal GBA Library (more info)
Some of my (Xilefian's) utility libraries (more info)