diff --git a/CMakeLists.txt b/CMakeLists.txt index 672bad8a9..b926a19f3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -147,32 +147,6 @@ elseif(UNIX) list(APPEND VFS_SRC ${CMAKE_SOURCE_DIR}/src/util/vfs/vfs-fd.c ${CMAKE_SOURCE_DIR}/src/util/vfs/vfs-dirent.c) file(GLOB OS_SRC ${CMAKE_SOURCE_DIR}/src/platform/posix/*.c) source_group("POSIX-specific code" FILES ${OS_SRC}) -elseif(WII) - set(M_LIBRARY m) - list(APPEND VFS_SRC ${CMAKE_SOURCE_DIR}/src/util/vfs/vfs-file.c ${CMAKE_SOURCE_DIR}/src/util/vfs/vfs-dirent.c) - add_definitions(-DCOLOR_16_BIT -DCOLOR_5_6_5 -DUSE_VFS_FILE) - include_directories(${CMAKE_BINARY_DIR}) - file(GLOB OS_SRC ${CMAKE_SOURCE_DIR}/src/platform/wii/*.c) - list(APPEND OS_LIB wiiuse bte fat ogc) - source_group("Wii-specific code" FILES ${OS_SRC}) -elseif(3DS) - set(M_LIBRARY m) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-format") - add_definitions(-DCOLOR_16_BIT -DCOLOR_5_6_5) - if (${CMAKE_SOURCE_DIR}/src/platform/3ds/font.raw IS_NEWER_THAN ${CMAKE_BINARY_DIR}/font.c) - execute_process(COMMAND ${RAW2C} ${CMAKE_SOURCE_DIR}/src/platform/3ds/font.raw) - endif() - include_directories(${CMAKE_BINARY_DIR}) - list(APPEND OS_LIB sf2d ctru) - file(GLOB OS_SRC ${CMAKE_SOURCE_DIR}/src/platform/3ds/*.c ${CMAKE_BINARY_DIR}/font.c) - set(USE_VFS_3DS ON) - if(USE_VFS_3DS) - add_definitions(-DUSE_VFS_3DS) - else() - add_definitions(-DUSE_VFS_FILE) - list(APPEND VFS_SRC ${CMAKE_SOURCE_DIR}/src/util/vfs/vfs-file.c ${CMAKE_SOURCE_DIR}/src/util/vfs/vfs-dirent.c) - endif() - source_group("3DS-specific code" FILES ${OS_SRC}) endif() if(APPLE) @@ -181,8 +155,9 @@ if(APPLE) endif() if(NOT HAIKU AND NOT MSVC AND NOT PSP2) - list(APPEND OS_LIB m) + set(M_LIBRARY m) endif() +list(APPEND OS_LIB ${M_LIBRARY}) if(APPLE OR CMAKE_C_COMPILER_ID STREQUAL "GNU" AND BUILD_LTO) set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -flto") @@ -196,13 +171,6 @@ if(BUILD_BBB OR BUILD_RASPI OR BUILD_PANDORA) endif() endif() -if(WII) - add_definitions(-U__STRICT_ANSI__) - if (${CMAKE_SOURCE_DIR}/src/platform/wii/font.tpl IS_NEWER_THAN ${CMAKE_BINARY_DIR}/font.c) - execute_process(COMMAND ${RAW2C} ${CMAKE_SOURCE_DIR}/src/platform/wii/font.tpl OUTPUT_QUIET ERROR_QUIET) - endif() -endif() - if(BUILD_RASPI) set(BUILD_GL OFF CACHE BOOL "OpenGL not supported" FORCE) endif() @@ -262,9 +230,6 @@ if(HAVE_SETLOCALE) add_definitions(-DHAVE_SETLOCALE) endif() -if(DISABLE_DEPS) -endif() - # Feature dependencies set(FEATURES) if(CMAKE_SYSTEM_NAME MATCHES .*BSD) @@ -373,6 +338,7 @@ if(USE_MAGICK) endif() if(WANT_ZLIB AND NOT USE_ZLIB) + set(SKIP_INSTALL_ALL ON) add_subdirectory(${CMAKE_SOURCE_DIR}/src/third-party/zlib zlib) set_property(TARGET zlibstatic PROPERTY INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/zlib;${CMAKE_SOURCE_DIR}/src/third-party/zlib) set_property(TARGET zlib PROPERTY EXCLUDE_FROM_ALL ON) @@ -448,15 +414,27 @@ if (USE_LZMA) list(APPEND FEATURES LZMA) endif() -set(FEATURE_DEFINES) foreach(FEATURE IN LISTS FEATURES) - list(APPEND FEATURE_DEFINES "USE_${FEATURE}") + add_definitions("-DUSE_${FEATURE}") endforeach() source_group("Virtual files" FILES ${VFS_SRC}) source_group("Extra features" FILES ${FEATURE_SRC}) source_group("Third-party code" FILES ${THIRD_PARTY_SRC}) +# Platform binaries +if(3DS) + add_subdirectory(${CMAKE_SOURCE_DIR}/src/platform/3ds ${CMAKE_BINARY_DIR}/3ds) +endif() + +if(WII) + add_subdirectory(${CMAKE_SOURCE_DIR}/src/platform/wii ${CMAKE_BINARY_DIR}/wii) +endif() + +if(PSP2) + add_subdirectory(${CMAKE_SOURCE_DIR}/src/platform/psp2 ${CMAKE_BINARY_DIR}/psp2) +endif() + # Binaries set(CORE_SRC ${ARM_SRC} @@ -490,7 +468,7 @@ if(BUILD_SHARED) set_target_properties(${BINARY_NAME} PROPERTIES SOVERSION ${LIB_VERSION_ABI}) if(BUILD_STATIC) add_library(${BINARY_NAME}-static STATIC ${SRC}) - set_target_properties(${BINARY_NAME}-static PROPERTIES COMPILE_DEFINITIONS "${FEATURE_DEFINES}") + set_target_properties(${BINARY_NAME}-static PROPERTIES COMPILE_DEFINITIONS "${OS_DEFINES}") install(TARGETS ${BINARY_NAME}-static DESTINATION ${LIBDIR} COMPONENT lib${BINARY_NAME}) add_dependencies(${BINARY_NAME}-static version-info) endif() @@ -513,7 +491,7 @@ if(UNIX AND NOT APPLE) install(FILES ${CMAKE_SOURCE_DIR}/res/mgba-256.png DESTINATION share/icons/hicolor/256x256/apps RENAME mgba.png COMPONENT lib${BINARY_NAME}) install(FILES ${CMAKE_SOURCE_DIR}/res/mgba-512.png DESTINATION share/icons/hicolor/512x512/apps RENAME mgba.png COMPONENT lib${BINARY_NAME}) endif() -set_target_properties(${BINARY_NAME} PROPERTIES VERSION ${LIB_VERSION_STRING} SOVERSION ${LIB_VERSION_ABI} COMPILE_DEFINITIONS "${FEATURE_DEFINES}") +set_target_properties(${BINARY_NAME} PROPERTIES VERSION ${LIB_VERSION_STRING} SOVERSION ${LIB_VERSION_ABI} COMPILE_DEFINITIONS "${OS_DEFINES}") if(BUILD_GL) add_definitions(-DBUILD_GL) @@ -544,18 +522,6 @@ if(BUILD_QT) add_subdirectory(${CMAKE_SOURCE_DIR}/src/platform/qt ${CMAKE_BINARY_DIR}/qt) endif() -if(WII) - add_subdirectory(${CMAKE_SOURCE_DIR}/src/platform/wii ${CMAKE_BINARY_DIR}) -endif() - -if(PSP2) - add_subdirectory(${CMAKE_SOURCE_DIR}/src/platform/psp2 ${CMAKE_BINARY_DIR}) -endif() - -if(3DS) - add_subdirectory(${CMAKE_SOURCE_DIR}/src/platform/3ds ${CMAKE_BINARY_DIR}) -endif() - if(BUILD_PERF) set(PERF_SRC ${CMAKE_SOURCE_DIR}/src/platform/test/perf-main.c) if(UNIX AND NOT APPLE) diff --git a/src/platform/3ds/CMakeLists.txt b/src/platform/3ds/CMakeLists.txt index 102518650..52e64740f 100644 --- a/src/platform/3ds/CMakeLists.txt +++ b/src/platform/3ds/CMakeLists.txt @@ -1,5 +1,42 @@ -add_executable(${BINARY_NAME}.elf ${GUI_SRC}) -set_target_properties(${BINARY_NAME}.elf PROPERTIES COMPILE_DEFINITIONS "${FEATURE_DEFINES}") -target_link_libraries(${BINARY_NAME}.elf ${BINARY_NAME} m ${OS_LIB}) -add_custom_command(TARGET ${BINARY_NAME}.elf POST_BUILD COMMAND ${3DSXTOOL} ${BINARY_NAME}.elf ${BINARY_NAME}.3dsx) -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${BINARY_NAME}.3dsx DESTINATION . COMPONENT ${BINARY_NAME}-3ds) +set(USE_VFS_3DS ON CACNE BOOL "Use 3DS-specific file support") +mark_as_advanced(USE_VFS_3DS) + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-format" PARENT_SCOPE) +set(OS_DEFINES COLOR_16_BIT COLOR_5_6_5) + +include_directories(${CMAKE_CURRENT_BINARY_DIR}) +list(APPEND OS_LIB sf2d ctru) +file(GLOB OS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/3ds-*.c) +set(OS_SRC ${OS_SRC} PARENT_SCOPE) +source_group("3DS-specific code" FILES ${OS_SRC}) + +if(USE_VFS_3DS) + list(APPEND OS_DEFINES USE_VFS_3DS) +else() + list(APPEND OS_DEFINES USE_VFS_FILE) + list(APPEND VFS_SRC ${CMAKE_SOURCE_DIR}/src/util/vfs/vfs-file.c ${CMAKE_SOURCE_DIR}/src/util/vfs/vfs-dirent.c) +endif() +set(VFS_SRC ${VFS_SRC} PARENT_SCOPE) +set(OS_DEFINES ${OS_DEFINES} PARENT_SCOPE) + +list(APPEND GUI_SRC ${CMAKE_CURRENT_BINARY_DIR}/font.c ${CMAKE_CURRENT_SOURCE_DIR}/gui-font.c) + +set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/font.c PROPERTIES GENERATED ON) +add_executable(${BINARY_NAME}.elf ${GUI_SRC} main.c ctru-heap.c) +set_target_properties(${BINARY_NAME}.elf PROPERTIES COMPILE_DEFINITIONS "${OS_DEFINES}") +target_link_libraries(${BINARY_NAME}.elf ${BINARY_NAME} ${M_LIBRARY} ${OS_LIB}) + +add_custom_command(OUTPUT ${BINARY_NAME}.smdh + COMMAND ${SMDHTOOL} --create "${PROJECT_NAME}" "${SUMMARY}" "endrift" ${CMAKE_SOURCE_DIR}/res/mgba-48.png ${BINARY_NAME}.smdh) + +add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/font.c + COMMAND ${RAW2C} ${CMAKE_SOURCE_DIR}/src/platform/3ds/font.raw) + +add_custom_target(${BINARY_NAME}.3dsx ALL + ${3DSXTOOL} ${BINARY_NAME}.elf ${BINARY_NAME}.3dsx --smdh=${BINARY_NAME}.smdh + DEPENDS ${BINARY_NAME}.elf ${BINARY_NAME}.smdh) + +add_custom_target(run ${3DSLINK} ${CMAKE_CURRENT_BINARY_DIR}/${BINARY_NAME}.3dsx + DEPENDS ${BINARY_NAME}.3dsx) + +install(FILES ${BINARY_NAME}.3dsx ${BINARY_NAME}.smdh DESTINATION . COMPONENT ${BINARY_NAME}-3ds) diff --git a/src/platform/3ds/CMakeToolchain.txt b/src/platform/3ds/CMakeToolchain.txt index 66e768cfc..fb22e7723 100644 --- a/src/platform/3ds/CMakeToolchain.txt +++ b/src/platform/3ds/CMakeToolchain.txt @@ -35,8 +35,10 @@ set(CMAKE_EXE_LINKER_FLAGS ${link_flags} CACHE INTERNAL "exe link flags") set(CMAKE_MODULE_LINKER_FLAGS ${link_flags} CACHE INTERNAL "module link flags") set(CMAKE_SHARED_LINKER_FLAGS ${link_flags} CACHE INTERNAL "shared link flags") +set(3DSLINK ${toolchain_bin_dir}/3dslink) set(3DSXTOOL ${toolchain_bin_dir}/3dsxtool) set(RAW2C ${toolchain_bin_dir}/raw2c) +set(SMDHTOOL ${toolchain_bin_dir}/smdhtool) set(3DS ON) add_definitions(-D_3DS -DARM11) diff --git a/src/platform/psp2/CMakeLists.txt b/src/platform/psp2/CMakeLists.txt index 1562b0831..72295d5b6 100644 --- a/src/platform/psp2/CMakeLists.txt +++ b/src/platform/psp2/CMakeLists.txt @@ -1,18 +1,30 @@ -file(GLOB PLATFORM_SRC ${CMAKE_SOURCE_DIR}/src/platform/psp2/*.c) +file(GLOB OS_SRC ${CMAKE_SOURCE_DIR}/src/platform/psp2/psp2-*.c) +set(OS_SRC ${OS_SRC} PARENT_SCOPE) +source_group("PS Vita-specific code" FILES ${OS_SRC}) -if (${CMAKE_SOURCE_DIR}/res/font.png IS_NEWER_THAN ${CMAKE_BINARY_DIR}/font.o) - execute_process(COMMAND ${OBJCOPY} -I binary -O elf32-littlearm -B arm font.png ${CMAKE_BINARY_DIR}/font.o WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/res) -endif() +list(APPEND VFS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/sce-vfs.c) +set(VFS_SRC ${VFS_SRC} PARENT_SCOPE) -if (${CMAKE_SOURCE_DIR}/res/backdrop.png IS_NEWER_THAN ${CMAKE_BINARY_DIR}/backdrop.o) - execute_process(COMMAND ${OBJCOPY} -I binary -O elf32-littlearm -B arm backdrop.png ${CMAKE_BINARY_DIR}/backdrop.o WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) -endif() +set(OS_LIB -lvita2d -lSceCtrl_stub -lSceRtc_stub -lSceGxm_stub -lSceDisplay_stub -lSceAudio_stub -lSceMotion_stub -lScePower_stub -lpng -lz -l${M_LIBRARY}) +set(OBJCOPY_CMD ${OBJCOPY} -I binary -O elf32-littlearm -B arm) -set(PLATFORM_LIBRARY -lvita2d -lSceCtrl_stub -lSceRtc_stub -lSceGxm_stub -lSceDisplay_stub -lSceAudio_stub -lSceMotion_stub -lScePower_stub -lpng -lz -l${M_LIBRARY}) +list(APPEND GUI_SRC ${CMAKE_CURRENT_SOURCE_DIR}/gui-font.c) -add_executable(${BINARY_NAME}.elf ${PLATFORM_SRC} ${GUI_SRC} ${CMAKE_BINARY_DIR}/font.o ${CMAKE_BINARY_DIR}/backdrop.o) -target_link_libraries(${BINARY_NAME}.elf ${BINARY_NAME} ${PLATFORM_LIBRARY}) -set_target_properties(${BINARY_NAME}.elf PROPERTIES COMPILE_DEFINITIONS "${FEATURE_DEFINES}") -set_target_properties(${BINARY_NAME}.elf PROPERTIES OUTPUT_NAME ${BINARY_NAME}.elf) -add_custom_command(TARGET ${BINARY_NAME}.elf POST_BUILD COMMAND ${FIXUP} ${BINARY_NAME}.elf ${BINARY_NAME}.velf ${NIDDB} MAIN_DEPENDENCY ${BINARY_NAME}.elf) -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${BINARY_NAME}.velf DESTINATION . COMPONENT ${BINARY_NAME}-psp2) +set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/font.c ${CMAKE_CURRENT_BINARY_DIR}/backdrop.c PROPERTIES GENERATED ON) +add_executable(${BINARY_NAME}.elf ${PLATFORM_SRC} ${GUI_SRC} ${CMAKE_BINARY_DIR}/font.o ${CMAKE_BINARY_DIR}/backdrop.o main.c) +set_target_properties(${BINARY_NAME}.elf PROPERTIES COMPILE_DEFINITIONS "${OS_DEFINES}") +target_link_libraries(${BINARY_NAME}.elf ${BINARY_NAME} ${OS_LIB}) + +add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/font.c + COMMAND ${OBJCOPY_CMD} font.png ${CMAKE_CURRENT_BINARY_DIR}/font.o + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/res) + +add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/backdrop.c + COMMAND ${OBJCOPY_CMD} backdrop.png ${CMAKE_CURRENT_BINARY_DIR}/backdrop.o + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/res) + +add_custom_target(${BINARY_NAME}.velf ALL + ${FIXUP} ${BINARY_NAME}.elf ${BINARY_NAME}.velf ${NIDDB} + DEPENDS ${BINARY_NAME}.elf) + +install(FILES ${BINARY_NAME}.velf DESTINATION . COMPONENT ${BINARY_NAME}-psp2) diff --git a/src/platform/psp2/memory.c b/src/platform/psp2/psp2-memory.c similarity index 100% rename from src/platform/psp2/memory.c rename to src/platform/psp2/psp2-memory.c diff --git a/src/platform/wii/CMakeLists.txt b/src/platform/wii/CMakeLists.txt index 20412feb2..1ef6e6df0 100644 --- a/src/platform/wii/CMakeLists.txt +++ b/src/platform/wii/CMakeLists.txt @@ -1,7 +1,33 @@ -add_executable(${BINARY_NAME}.elf ${GUI_SRC} ${CMAKE_BINARY_DIR}/font.c) -set_target_properties(${BINARY_NAME}.elf PROPERTIES COMPILE_DEFINITIONS "${FEATURE_DEFINES}") +set(OS_DEFINES COLOR_16_BIT COLOR_5_6_5 USE_VFS_FILE) +list(APPEND VFS_SRC ${CMAKE_SOURCE_DIR}/src/util/vfs/vfs-file.c ${CMAKE_SOURCE_DIR}/src/util/vfs/vfs-dirent.c) + +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + +file(GLOB OS_SRC ${CMAKE_SOURCE_DIR}/src/platform/wii/wii-*.c) +list(APPEND OS_LIB wiiuse bte fat ogc) +set(OS_SRC ${OS_SRC} PARENT_SCOPE) +source_group("Wii-specific code" FILES ${OS_SRC}) +set(VFS_SRC ${VFS_SRC} PARENT_SCOPE) +set(OS_DEFINES ${OS_DEFINES} PARENT_SCOPE) + +list(APPEND GUI_SRC ${CMAKE_CURRENT_BINARY_DIR}/font.c ${CMAKE_CURRENT_SOURCE_DIR}/gui-font.c) + +set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/font.c PROPERTIES GENERATED ON) +add_executable(${BINARY_NAME}.elf ${GUI_SRC} main.c) +set_target_properties(${BINARY_NAME}.elf PROPERTIES COMPILE_DEFINITIONS "${OS_DEFINES}") target_link_libraries(${BINARY_NAME}.elf ${BINARY_NAME} ${OS_LIB}) -add_custom_command(TARGET ${BINARY_NAME}.elf POST_BUILD COMMAND ${ELF2DOL} ${BINARY_NAME}.elf ${BINARY_NAME}.dol) + +add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/font.c + COMMAND ${RAW2C} ${CMAKE_SOURCE_DIR}/src/platform/wii/font.tpl + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + +add_custom_target(${BINARY_NAME}.dol ALL + ${ELF2DOL} ${BINARY_NAME}.elf ${BINARY_NAME}.dol + DEPENDS ${BINARY_NAME}.elf) + +add_custom_target(run ${WIILOAD} ${CMAKE_CURRENT_BINARY_DIR}/${BINARY_NAME}.dol + DEPENDS ${BINARY_NAME}.dol) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/meta.xml.in ${CMAKE_CURRENT_BINARY_DIR}/meta.xml) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/icon.png ${CMAKE_CURRENT_BINARY_DIR}/meta.xml DESTINATION . COMPONENT ${BINARY_NAME}-wii) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${BINARY_NAME}.dol DESTINATION . RENAME boot.dol COMPONENT ${BINARY_NAME}-wii) diff --git a/src/platform/wii/CMakeToolchain.txt b/src/platform/wii/CMakeToolchain.txt index 8d6b061ae..26ecd3fa7 100644 --- a/src/platform/wii/CMakeToolchain.txt +++ b/src/platform/wii/CMakeToolchain.txt @@ -37,6 +37,7 @@ set(CMAKE_SHARED_LINKER_FLAGS ${link_flags} CACHE INTERNAL "shared link flags") set(ELF2DOL ${toolchain_bin_dir}/elf2dol) set(GXTEXCONV ${toolchain_bin_dir}/gxtexconv) set(RAW2C ${toolchain_bin_dir}/raw2c) +set(WIILOAD ${toolchain_bin_dir}/wiiload) set(WII ON) add_definitions(-DGEKKO) diff --git a/version.cmake b/version.cmake index 22bc5e7b5..5ae523ab4 100644 --- a/version.cmake +++ b/version.cmake @@ -6,6 +6,7 @@ set(LIB_VERSION_MINOR 4) set(LIB_VERSION_PATCH 0) set(LIB_VERSION_ABI 0.4) set(LIB_VERSION_STRING ${LIB_VERSION_MAJOR}.${LIB_VERSION_MINOR}.${LIB_VERSION_PATCH}) +set(SUMMARY "${PROJECT_NAME} Game Boy Advance Emulator") execute_process(COMMAND git describe --always --abbrev=40 --dirty OUTPUT_VARIABLE GIT_COMMIT ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) execute_process(COMMAND git describe --always --dirty OUTPUT_VARIABLE GIT_COMMIT_SHORT ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)