mirror of
https://github.com/InsightGit/Morpheus.git
synced 2025-06-19 01:05:49 -04:00
299 lines
12 KiB
CMake
299 lines
12 KiB
CMake
function(libgba_fat_patch)
|
|
if(WIN32)
|
|
find_program(PYTHON3 python)
|
|
else()
|
|
find_program(PYTHON3 python3)
|
|
find_program(SUDO sudo)
|
|
endif()
|
|
|
|
if(NOT PYTHON3)
|
|
message(FATAL_ERROR "python3 - not found")
|
|
endif()
|
|
|
|
add_custom_target(libgba_fat_patch_target ALL
|
|
COMMAND ${PYTHON3} ${CMAKE_CURRENT_SOURCE_DIR}/buildtools/gba_fat_patch/gba_fat_patch.py
|
|
VERBATIM)
|
|
endfunction()
|
|
|
|
function(add_gba_executable target)
|
|
get_filename_component(target_name ${target} NAME_WE)
|
|
add_custom_target(${target_name}.gba ALL
|
|
COMMAND ${OBJCOPY} -v -O binary ${target} ${target_name}.gba
|
|
COMMAND ${GBAFIX} ${target_name}.gba
|
|
DEPENDS ${target}
|
|
VERBATIM
|
|
)
|
|
set_target_properties(${target} PROPERTIES LINK_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
|
|
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${target_name}.gba)
|
|
endfunction()
|
|
|
|
function(add_nds_executable target game_icon title subtitle1 subtitle2)
|
|
get_filename_component(target_name ${target} NAME_WE)
|
|
add_custom_target(${target_name}.nds ALL
|
|
COMMAND ${NDSTOOL} -c ${target_name}.nds -9 ${target} -b ${CMAKE_CURRENT_SOURCE_DIR}/${game_icon}
|
|
"${title};${subtitle1};${subtitle2}"
|
|
DEPENDS ${target}
|
|
VERBATIM
|
|
)
|
|
#set_target_properties(${target} PROPERTIES LINK_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
|
|
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${target_name}.nds)
|
|
endfunction()
|
|
|
|
function(add_nds_executable_with_nitrofs_dir target game_icon title subtitle1 subtitle2 nitrofs_dir)
|
|
get_filename_component(target_name ${target} NAME_WE)
|
|
add_custom_target(${target_name}.nds ALL SOURCES
|
|
COMMAND ${NDSTOOL} -c ${target_name}.nds -9 ${target} -b ${CMAKE_CURRENT_SOURCE_DIR}/${game_icon}
|
|
"${title};${subtitle1};${subtitle2}" -d ${nitrofs_dir}
|
|
DEPENDS ${target}
|
|
VERBATIM
|
|
)
|
|
#set_target_properties(${target} PROPERTIES LINK_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
|
|
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${target_name}.nds)
|
|
endfunction()
|
|
|
|
function(execute_grit_sprites png_files png_image_sizes is_4bpp)
|
|
set(png_files ${${png_files}})
|
|
set(png_image_sizes ${${png_image_sizes}})
|
|
|
|
#message(STATUS "execute grit called with png_files: ${png_files}\n with png_image_sizes: ${png_image_sizes}\n and is_4bpp:${is_4bpp}")
|
|
|
|
list(LENGTH png_files png_files_length)
|
|
list(LENGTH png_image_sizes png_image_sizes_length)
|
|
|
|
if(NOT png_files_length EQUAL png_image_sizes_length)
|
|
message(FATAL_ERROR "The length of the png_files list (${png_files_length}) does "
|
|
"NOT equal the length of the PNG4_IMAGE_SIZES list (${png_image_sizes_length})."
|
|
" Are you missing a size or image path argument for a 4bpp PNG?")
|
|
endif()
|
|
|
|
if(is_4bpp)
|
|
set(bpp_flag "4")
|
|
else()
|
|
set(bpp_flag "8")
|
|
endif()
|
|
|
|
math(EXPR png_files_length "${png_files_length} - 1")
|
|
|
|
foreach(iteration RANGE ${png_files_length})
|
|
list(GET png_files ${iteration} png_file)
|
|
list(GET png_image_sizes ${iteration} png_image_size)
|
|
|
|
string(TOUPPER ${png_image_size} png_image_size)
|
|
|
|
string(REPLACE "X" ";" png_image_size ${png_image_size})
|
|
|
|
list(LENGTH png_image_size png_image_size_len)
|
|
|
|
if(NOT png_image_size_len EQUAL 2)
|
|
message(FATAL_ERROR "Invalid image size: ${png_image_size}")
|
|
endif()
|
|
|
|
list(GET png_image_size 0 png_image_width)
|
|
list(GET png_image_size 1 png_image_length)
|
|
|
|
math(EXPR png_image_width_tiles "${png_image_width} / 8")
|
|
math(EXPR png_image_length_tiles "${png_image_length} / 8")
|
|
|
|
#message(STATUS "${png_image_width_tiles}x${png_image_length_tiles}")
|
|
|
|
get_filename_component(png_file_name_path ${png_file} NAME_WLE)
|
|
|
|
add_custom_command(OUTPUT ${png_file_name_path}.o
|
|
COMMAND ${GRIT} ${png_file} -gB${bpp_flag} -Mw ${png_image_width_tiles}
|
|
-Mh ${png_image_length_tiles}
|
|
COMMAND ${CMAKE_AS} ${png_file_name_path}.s -o${png_file_name_path}.o
|
|
VERBATIM)
|
|
endforeach()
|
|
endfunction()
|
|
|
|
function(execute_grit_tilemaps png_files is_4bpp palette_bank_num is_affine)
|
|
foreach(png_file IN ${${png_files}})
|
|
execute_grit_tilemap(png_file ${is_4bpp} ${palette_bank_num} ${is_affine})
|
|
endforeach()
|
|
endfunction()
|
|
|
|
|
|
function(execute_grit_1bpp_font png_file)
|
|
get_filename_component(png_file_name_path ${png_file} NAME_WLE)
|
|
|
|
add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/assets/${png_file_name_path}.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/assets/${png_file_name_path}.h
|
|
COMMAND ${GRIT} ${png_file} -gB1 -ftc -pn2 -o ${CMAKE_CURRENT_SOURCE_DIR}/assets/${png_file_name_path}
|
|
VERBATIM)
|
|
endfunction()
|
|
|
|
function(execute_grit_4bpp_font png_file)
|
|
get_filename_component(png_file_name_path ${png_file} NAME_WLE)
|
|
|
|
add_custom_command(OUTPUT ${png_file_name_path}.o ${png_file_name_path}.h
|
|
COMMAND ${GRIT} ${png_file} -gB4
|
|
COMMAND ${CMAKE_AS} ${png_file_name_path}.s -o${png_file_name_path}.o
|
|
VERBATIM)
|
|
endfunction()
|
|
|
|
function(execute_grit_tilemap png_file is_4bpp palette_bank_num is_affine)
|
|
if(is_4bpp)
|
|
set(bpp_flag "4")
|
|
set(tile_map_flag "tpf")
|
|
else()
|
|
set(bpp_flag "8")
|
|
set(tile_map_flag "tf")
|
|
endif()
|
|
|
|
if(is_affine)
|
|
set(tile_map_flag "t")
|
|
endif()
|
|
|
|
get_filename_component(png_file_name_path ${png_file} NAME_WLE)
|
|
|
|
add_custom_command(OUTPUT ${png_file_name_path}.o
|
|
COMMAND ${GRIT} ${png_file} -gB${bpp_flag} -mR${tile_map_flag} -mp${palette_bank_num}
|
|
COMMAND ${CMAKE_AS} ${png_file_name_path}.s -o${png_file_name_path}.o
|
|
VERBATIM)
|
|
endfunction()
|
|
|
|
function(convert_tilemap_bin_image_file bin_file build_dir width height palette_bank_num image_file is_8bpp is_affine)
|
|
if(WIN32)
|
|
find_program(PYTHON3 python)
|
|
else()
|
|
find_program(PYTHON3 python3)
|
|
endif()
|
|
|
|
if(NOT PYTHON3)
|
|
message(FATAL_ERROR "python3 - not found")
|
|
endif()
|
|
|
|
get_filename_component(bin_file_path_name ${bin_file} NAME)
|
|
string(REPLACE ".bin" "" bin_file_path_name ${bin_file_path_name})
|
|
|
|
#message(STATUS ${CMAKE_CURRENT_SOURCE_DIR}/buildtools/bintileconvert/bintileconvert.py)
|
|
#message(STATUS ${bin_file_path_name})
|
|
#message(STATUS "Palette bank = " ${palette_bank_num})
|
|
|
|
if(is_8bpp)
|
|
set(image_bpp 8)
|
|
else()
|
|
set(image_bpp 4)
|
|
endif()
|
|
|
|
if(is_affine)
|
|
set(image_affine "true")
|
|
else()
|
|
set(image_affine "false")
|
|
endif()
|
|
|
|
add_custom_command(OUTPUT ${build_dir}/${bin_file_path_name}.c ${build_dir}/${bin_file_path_name}.h
|
|
COMMAND ${PYTHON3} ${CMAKE_CURRENT_SOURCE_DIR}/buildtools/bintileconvert/bintileconvert.py
|
|
${CMAKE_CURRENT_SOURCE_DIR}/${bin_file} ${build_dir} ${width} ${height}
|
|
${palette_bank_num} ${CMAKE_CURRENT_SOURCE_DIR}/${image_file} ${image_bpp} ${image_affine}
|
|
VERBATIM)
|
|
|
|
endfunction()
|
|
|
|
function(generate_font ttf_font_file font_character_list_file font_bpp background_color_r background_color_g
|
|
background_color_b font_size make_1d use_utf8)
|
|
if(WIN32)
|
|
find_program(PYTHON3 python)
|
|
else()
|
|
find_program(PYTHON3 python3)
|
|
endif()
|
|
|
|
if(NOT PYTHON3)
|
|
message(FATAL_ERROR "python3 - not found")
|
|
endif()
|
|
|
|
get_filename_component(base_char_list_name ${font_character_list_file} NAME_WE)
|
|
get_filename_component(base_font_name ${ttf_font_file} NAME_WE)
|
|
|
|
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${base_font_name}-${base_char_list_name}.c
|
|
COMMAND ${PYTHON3} ${CMAKE_CURRENT_SOURCE_DIR}/buildtools/generate_fonts/generate_fonts.py ${ttf_font_file}
|
|
${font_character_list_file} ${font_bpp}
|
|
${CMAKE_CURRENT_BINARY_DIR}/${base_font_name}-${base_char_list_name} ${make_1d} ${use_utf8}
|
|
${background_color_r} ${background_color_g} ${background_color_b} ${font_size}
|
|
VERBATIM)
|
|
endfunction()
|
|
|
|
function(generate_maxmod_soundbank is_gba soundbank_name sound_files)
|
|
if(NOT MMUTIL)
|
|
find_program(MMUTIL mmutil ${DEVKITPRO}/tools)
|
|
if(MMUTIL)
|
|
message(STATUS "mmutil: ${MMUTIL} - found")
|
|
else()
|
|
message(FATAL_ERROR "mmutil - not found")
|
|
endif()
|
|
endif()
|
|
|
|
if(NOT BIN2S)
|
|
# message(STATUS "Looking for bin2s...")
|
|
find_program(BIN2S bin2s ${DEVKITARM}/bin)
|
|
if(BIN2S)
|
|
message(STATUS "bin2s: ${BIN2S} - found")
|
|
else()
|
|
message(FATAL_ERROR "bin2s - not found")
|
|
endif()
|
|
endif()
|
|
|
|
# TODO(Bobby): Fix this... mess
|
|
if(is_gba)
|
|
#message(STATUS "using maxmod for gba")
|
|
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${soundbank_name}.bin.o
|
|
COMMAND ${MMUTIL} -o${CMAKE_CURRENT_BINARY_DIR}/${soundbank_name}.bin
|
|
-h${CMAKE_CURRENT_BINARY_DIR}/${soundbank_name}.h ${${sound_files}}
|
|
COMMAND ${BIN2S} ${CMAKE_CURRENT_BINARY_DIR}/${soundbank_name}.bin >
|
|
${CMAKE_CURRENT_BINARY_DIR}/${soundbank_name}.bin.s
|
|
COMMAND ${CMAKE_AS} ${CMAKE_CURRENT_BINARY_DIR}/${soundbank_name}.bin.s -o
|
|
${CMAKE_CURRENT_BINARY_DIR}/${soundbank_name}.bin.o
|
|
VERBATIM)
|
|
else()
|
|
#message(STATUS "using maxmod for nds")
|
|
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${soundbank_name}.bin.o
|
|
COMMAND ${MMUTIL} -d -o${CMAKE_CURRENT_BINARY_DIR}/${soundbank_name}.bin
|
|
-h${CMAKE_CURRENT_BINARY_DIR}/${soundbank_name}.h ${${sound_files}}
|
|
COMMAND ${BIN2S} ${CMAKE_CURRENT_BINARY_DIR}/${soundbank_name}.bin >
|
|
${CMAKE_CURRENT_BINARY_DIR}/${soundbank_name}.bin.s
|
|
COMMAND ${CMAKE_AS} ${CMAKE_CURRENT_BINARY_DIR}/${soundbank_name}.bin.s -o
|
|
${CMAKE_CURRENT_BINARY_DIR}/${soundbank_name}.bin.o
|
|
VERBATIM)
|
|
endif()
|
|
|
|
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${soundbank_name}_bin.h
|
|
"extern const uint8_t ${soundbank_name}_bin_end[];\n"
|
|
"extern const uint8_t ${soundbank_name}_bin[];\n"
|
|
"extern const uint32_t ${soundbank_name}_bin_size;")
|
|
endfunction()
|
|
|
|
function(generate_streaming_background tilemap_bin_to_split asset_dir width height palette_bank_num png_file is_4bpp
|
|
output_files)
|
|
if(WIN32)
|
|
find_program(PYTHON3 python)
|
|
else()
|
|
find_program(PYTHON3 python3)
|
|
endif()
|
|
|
|
if(NOT PYTHON3)
|
|
message(FATAL_ERROR "python3 - not found")
|
|
endif()
|
|
|
|
if(is_4bpp)
|
|
set(bpp_flag "4")
|
|
else()
|
|
set(bpp_flag "8")
|
|
endif()
|
|
|
|
get_filename_component(png_file_name_path ${png_file} NAME_WLE)
|
|
|
|
if(output_files)
|
|
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${png_file_name_path}.c
|
|
COMMAND ${PYTHON3} ${CMAKE_CURRENT_SOURCE_DIR}/buildtools/bintilesplit/bintilesplit.py
|
|
${tilemap_bin_to_split} ${asset_dir} ${width} ${height} ${palette_bank_num}
|
|
COMMAND ${GRIT} ${png_file} -gB${bpp_flag} -o${CMAKE_CURRENT_BINARY_DIR}/${png_file_name_path}.c
|
|
VERBATIM)
|
|
else()
|
|
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${png_file_name_path}.c
|
|
COMMAND ${PYTHON3} ${CMAKE_CURRENT_SOURCE_DIR}/buildtools/bintilesplit/bintilesplit.py
|
|
${tilemap_bin_to_split} ${asset_dir} ${width} ${height} ${palette_bank_num} ${png_file}
|
|
${bpp_flag} ${CMAKE_CURRENT_BINARY_DIR}
|
|
VERBATIM)
|
|
endif()
|
|
endfunction()
|