blob: dac5c97c4bb56b8145c649cdbf0d5364e694e3b6 [file] [log] [blame] [edit]
if (NOT DEFINED BLIT_ONCE)
set(BLIT_ONCE TRUE)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_EXTENSIONS OFF)
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
set(CMAKE_BUILD_TYPE "Release")
endif()
if(WIN32)
add_definitions("-DWIN32")
endif()
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/32blit 32blit)
find_package(PythonInterp 3 REQUIRED)
# tool paths
set(ASSET_PACKER ${CMAKE_CURRENT_LIST_DIR}/tools/asset-packer)
set(SPRITE_BUILDER ${CMAKE_CURRENT_LIST_DIR}/tools/sprite-builder)
set(MAP_BUILDER ${CMAKE_CURRENT_LIST_DIR}/tools/map-builder)
function(pack_sprites FILENAME TYPE OUT_PATH)
# TODO: this will break if someone passes the same name in different subdirs
get_filename_component(BASE_NAME ${FILENAME} NAME)
add_custom_command(
OUTPUT ${BASE_NAME}.blit
COMMAND ${PYTHON_EXECUTABLE} ${SPRITE_BUILDER} --out ${CMAKE_CURRENT_BINARY_DIR}/${BASE_NAME}.blit ${TYPE} ${FILENAME}
DEPENDS ${FILENAME} ${SPRITE_BUILDER}
)
set(${OUT_PATH} ${CMAKE_CURRENT_BINARY_DIR}/${BASE_NAME}.blit PARENT_SCOPE)
endfunction()
function(pack_map FILENAME TYPE OUT_PATH)
get_filename_component(BASE_NAME ${FILENAME} NAME)
add_custom_command(
OUTPUT ${BASE_NAME}.blit
COMMAND ${PYTHON_EXECUTABLE} ${MAP_BUILDER} ${TYPE} --force --out ${CMAKE_CURRENT_BINARY_DIR}/${BASE_NAME}.blit ${FILENAME}
DEPENDS ${FILENAME} ${MAP_BUILDER} ${TOOL_TILED}
)
set(${OUT_PATH} ${CMAKE_CURRENT_BINARY_DIR}/${BASE_NAME}.blit PARENT_SCOPE)
endfunction()
function (blit_assets_yaml TARGET FILE)
# cause cmake to reconfigure whenever the asset list changes
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${FILE})
# get the inputs/outputs for the asset tool (at configure time)
execute_process(COMMAND ${PYTHON_EXECUTABLE} -m ttblit --debug cmake --config ${CMAKE_CURRENT_SOURCE_DIR}/${FILE} --output ${CMAKE_CURRENT_BINARY_DIR} --cmake ${CMAKE_CURRENT_BINARY_DIR}/assets.cmake)
include(${CMAKE_CURRENT_BINARY_DIR}/assets.cmake)
# do asset packing (at build time)
add_custom_command(
OUTPUT ${ASSET_OUTPUTS}
COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR} && ${PYTHON_EXECUTABLE} -m ttblit --debug pack --force --config ${CMAKE_CURRENT_SOURCE_DIR}/${FILE} --output ${CMAKE_CURRENT_BINARY_DIR}
DEPENDS ${ASSET_DEPENDS} ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}
)
# add the outputs as dependencies of the project (also compile any cpp files)
target_sources(${TARGET} PRIVATE ${ASSET_OUTPUTS})
target_include_directories(${TARGET} PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
endfunction()
function (blit_assets TARGET)
set(ASSET_TYPE "")
set(ASSET_FILES)
foreach(ARG IN LISTS ARGN)
# set asset type
if(ARG STREQUAL "RAW" OR ARG STREQUAL "SPRITE_PACKED" OR ARG STREQUAL "SPRITE_RAW" OR ARG STREQUAL "MAP_TILED2BIN")
set(ASSET_TYPE ${ARG})
continue()
elseif(ASSET_TYPE STREQUAL "")
message(FATAL_ERROR "No asset type specified")
endif()
set(ASSET_PATH ${CMAKE_CURRENT_SOURCE_DIR}/${ARG})
if(ASSET_TYPE STREQUAL "SPRITE_PACKED")
pack_sprites(${ASSET_PATH} packed ASSET_PATH)
elseif(ASSET_TYPE STREQUAL "SPRITE_RAW")
pack_sprites(${ASSET_PATH} raw ASSET_PATH)
elseif(ASSET_TYPE STREQUAL "MAP_TILED2BIN")
pack_map(${ASSET_PATH} tiled2bin ASSET_PATH)
endif()
list(APPEND ASSET_FILES ${ASSET_PATH})
endforeach()
set(PACKER_ARGS)
set(PACKER_OUTPUTS assets.bin assets.cpp assets.hpp)
if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set(PACKER_ARGS --inline-data)
set(PACKER_OUTPUTS assets.cpp assets.hpp)
endif()
add_custom_command(
OUTPUT ${PACKER_OUTPUTS}
COMMAND ${PYTHON_EXECUTABLE} ${ASSET_PACKER} --base-path ${CMAKE_CURRENT_SOURCE_DIR} --base-path ${CMAKE_CURRENT_BINARY_DIR} ${PACKER_ARGS} ${ASSET_FILES}
DEPENDS ${ASSET_FILES} ${ASSET_PACKER}
)
target_sources(${TARGET} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/assets.cpp)
target_include_directories(${TARGET} PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
add_custom_command(
COMMAND ${CMAKE_LINKER} -r -b binary -o assets.bin.o assets.bin
COMMAND ${CMAKE_OBJCOPY} --rename-section .data=.rodata,alloc,load,readonly,data,contents assets.bin.o assets.bin.o
OUTPUT assets.bin.o
DEPENDS assets.bin
)
target_sources(${TARGET} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/assets.bin.o)
endif()
endfunction()
if (${CMAKE_SYSTEM_NAME} STREQUAL Generic)
set(FLASH_PORT "AUTO" CACHE STRING "Port to use for flash")
# attempt to find the upload tool
find_program(32BLIT_TOOL 32Blit PATHS
${CMAKE_CURRENT_BINARY_DIR}/../build/tools/src/
)
if(NOT 32BLIT_TOOL)
message(WARNING "32Blit tool not found. Looking for 32Blit.exe instead")
find_program(32BLIT_TOOL 32Blit.exe PATHS
${CMAKE_CURRENT_BINARY_DIR}/../build.mingw/tools/src/
)
endif()
if(NOT 32BLIT_TOOL)
message(WARNING "32Blit tool not found")
endif()
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/32blit-stm32 32blit-stm32)
else()
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/32blit-sdl 32blit-sdl)
endif()
endif ()