all repos — mgba @ aa9c9c40f7b0851da74710cac4a2bc1226a27535

mGBA Game Boy Advance Emulator

src/platform/3ds/CMakeLists.txt (view raw)

  1set(USE_VFS_3DS ON CACHE BOOL "Use 3DS-specific file support")
  2mark_as_advanced(USE_VFS_3DS)
  3
  4find_program(3DSLINK 3dslink)
  5find_program(3DSXTOOL 3dsxtool)
  6find_program(BANNERTOOL bannertool)
  7find_program(MAKEROM makerom)
  8find_program(PICASSO picasso)
  9find_program(RAW2C raw2c)
 10find_program(STRIP ${cross_prefix}strip)
 11
 12set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-format" PARENT_SCOPE)
 13set(OS_DEFINES COLOR_16_BIT COLOR_5_6_5 IOAPI_NO_64)
 14
 15include_directories(${CMAKE_CURRENT_BINARY_DIR})
 16if(${CMAKE_BUILD_TYPE} STREQUAL Debug OR ${CMAKE_BUILD_TYPE} STREQUAL RelWithDebInfo)
 17	list(APPEND OS_LIB citro3dd ctrud)
 18else()
 19	list(APPEND OS_LIB citro3d ctru)
 20endif()
 21file(GLOB OS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/3ds-*.c ${CMAKE_CURRENT_SOURCE_DIR}/ctru-heap.c ${CMAKE_CURRENT_SOURCE_DIR}/socket.c)
 22set(OS_SRC ${OS_SRC} PARENT_SCOPE)
 23set(OS_LIB ${OS_LIB} PARENT_SCOPE)
 24source_group("3DS-specific code" FILES ${OS_SRC})
 25
 26if(USE_VFS_3DS)
 27	list(APPEND OS_DEFINES USE_VFS_3DS)
 28else()
 29	list(APPEND OS_DEFINES USE_VFS_FILE)
 30	list(APPEND CORE_VFS_SRC ${CMAKE_SOURCE_DIR}/src/util/vfs/vfs-file.c ${CMAKE_SOURCE_DIR}/src/util/vfs/vfs-dirent.c)
 31endif()
 32set(CORE_VFS_SRC ${CORE_VFS_SRC} PARENT_SCOPE)
 33set(OS_DEFINES ${OS_DEFINES} PARENT_SCOPE)
 34
 35list(APPEND GUI_SRC
 36	${CMAKE_CURRENT_BINARY_DIR}/icons.c
 37	${CMAKE_CURRENT_BINARY_DIR}/uishader.c
 38	${CMAKE_CURRENT_BINARY_DIR}/uishader.h
 39	${CMAKE_CURRENT_BINARY_DIR}/uishader.shbin.h
 40
 41	${CMAKE_CURRENT_SOURCE_DIR}/gui-font.c
 42	${CMAKE_CURRENT_SOURCE_DIR}/ctr-gpu.c
 43	${CMAKE_CURRENT_SOURCE_DIR}/ctr-gpu.h)
 44
 45set_source_files_properties(
 46	${CMAKE_CURRENT_BINARY_DIR}/icons.c
 47	${CMAKE_CURRENT_BINARY_DIR}/uishader.c
 48	${CMAKE_CURRENT_BINARY_DIR}/uishader.h
 49	${CMAKE_CURRENT_BINARY_DIR}/uishader.shbin.h
 50	PROPERTIES GENERATED ON)
 51
 52add_executable(${BINARY_NAME}.elf ${GUI_SRC} main.c)
 53set_target_properties(${BINARY_NAME}.elf PROPERTIES COMPILE_DEFINITIONS "${OS_DEFINES};${FEATURE_DEFINES};${FUNCTION_DEFINES}")
 54target_link_libraries(${BINARY_NAME}.elf ${BINARY_NAME} ${M_LIBRARY} ${OS_LIB})
 55
 56add_custom_command(OUTPUT ${BINARY_NAME}.smdh
 57                   COMMAND ${BANNERTOOL} makesmdh -s "${PROJECT_NAME}" -l "${SUMMARY}" -p "endrift" -i ${CMAKE_SOURCE_DIR}/res/mgba-48.png -o ${BINARY_NAME}.smdh
 58                   DEPENDS ${CMAKE_SOURCE_DIR}/res/mgba-48.png)
 59
 60add_custom_command(OUTPUT ${BINARY_NAME}.xml
 61                   COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/hbl.xml ${BINARY_NAME}.xml
 62                   DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/hbl.xml)
 63
 64add_custom_command(OUTPUT ${BINARY_NAME}.bnr
 65                   COMMAND ${BANNERTOOL} makebanner -ci ${CMAKE_CURRENT_SOURCE_DIR}/banner.cgfx -a ${CMAKE_CURRENT_SOURCE_DIR}/bios.wav -o ${BINARY_NAME}.bnr
 66                   DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/banner.cgfx ${CMAKE_CURRENT_SOURCE_DIR}/bios.wav)
 67
 68add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/icons.c
 69                   COMMAND ${RAW2C} ${CMAKE_SOURCE_DIR}/src/platform/3ds/icons.raw
 70                   DEPENDS ${CMAKE_SOURCE_DIR}/src/platform/3ds/icons.raw)
 71
 72add_custom_command(
 73	OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/uishader.shbin ${CMAKE_CURRENT_BINARY_DIR}/uishader.shbin.h
 74	DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/uishader.v.pica ${CMAKE_CURRENT_SOURCE_DIR}/uishader.g.pica
 75	COMMAND ${PICASSO}
 76		-o ${CMAKE_CURRENT_BINARY_DIR}/uishader.shbin
 77		-h ${CMAKE_CURRENT_BINARY_DIR}/uishader.shbin.h
 78		${CMAKE_CURRENT_SOURCE_DIR}/uishader.v.pica
 79		${CMAKE_CURRENT_SOURCE_DIR}/uishader.g.pica
 80	COMMENT "picasso uishader.shbin")
 81
 82add_custom_command(
 83	OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/uishader.c ${CMAKE_CURRENT_BINARY_DIR}/uishader.h
 84	MAIN_DEPENDENCY ${CMAKE_CURRENT_BINARY_DIR}/uishader.shbin
 85	COMMAND ${RAW2C} ${CMAKE_CURRENT_BINARY_DIR}/uishader.shbin
 86	WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
 87	COMMENT "raw2c uishader.shbin")
 88
 89add_custom_command(OUTPUT ${BINARY_NAME}.3dsx
 90                   COMMAND ${3DSXTOOL} ${BINARY_NAME}.elf ${BINARY_NAME}.3dsx --smdh=${BINARY_NAME}.smdh
 91                   DEPENDS ${BINARY_NAME}.elf ${BINARY_NAME}.smdh ${BINARY_NAME}.xml)
 92add_custom_target(${BINARY_NAME}.3dsx ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${BINARY_NAME}.3dsx)
 93
 94add_custom_command(OUTPUT ${BINARY_NAME}.cia
 95                   COMMAND ${STRIP} -o ${BINARY_NAME}-stripped.elf ${BINARY_NAME}.elf
 96                   COMMAND ${MAKEROM} -f cia -o ${BINARY_NAME}.cia -rsf cia.rsf -target t -exefslogo -elf ${BINARY_NAME}-stripped.elf -icon ${BINARY_NAME}.smdh -banner ${BINARY_NAME}.bnr -major ${LIB_VERSION_MAJOR} -minor ${LIB_VERSION_MINOR} -micro ${LIB_VERSION_PATCH}
 97                   DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/cia.rsf ${BINARY_NAME}.elf ${BINARY_NAME}.smdh ${BINARY_NAME}.bnr)
 98add_custom_target(${BINARY_NAME}.cia ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${BINARY_NAME}.cia)
 99
100add_custom_target(run ${3DSLINK} ${CMAKE_CURRENT_BINARY_DIR}/${BINARY_NAME}.3dsx
101                  DEPENDS ${BINARY_NAME}.3dsx)
102
103add_custom_target(install-cia stat -f '0 00000001 %016Xz' '${CMAKE_CURRENT_BINARY_DIR}/${BINARY_NAME}.cia' | xxd -r | cat -- - '${CMAKE_CURRENT_BINARY_DIR}/${BINARY_NAME}.cia' | nc $ENV{N3DS_IP} 5000
104                  DEPENDS ${BINARY_NAME}.cia)
105
106if(BUILD_PERF)
107	add_custom_target(${BINARY_NAME}-perf.3dsx ALL
108	                  ${3DSXTOOL} ../${BINARY_NAME}-perf ${BINARY_NAME}-perf.3dsx --smdh=${BINARY_NAME}.smdh
109	                  DEPENDS ${BINARY_NAME}-perf ${BINARY_NAME}.smdh)
110	install(FILES
111		    ${CMAKE_CURRENT_BINARY_DIR}/${BINARY_NAME}-perf.3dsx
112		    DESTINATION . COMPONENT ${BINARY_NAME}-3ds)
113endif()
114
115configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cia.rsf.in ${CMAKE_CURRENT_BINARY_DIR}/cia.rsf)
116install(FILES
117	    ${CMAKE_CURRENT_BINARY_DIR}/${BINARY_NAME}.3dsx
118	    ${CMAKE_CURRENT_BINARY_DIR}/${BINARY_NAME}.smdh
119	    ${CMAKE_CURRENT_BINARY_DIR}/${BINARY_NAME}.xml
120	    DESTINATION 3dsx COMPONENT ${BINARY_NAME}-3ds)
121install(FILES
122	    ${CMAKE_CURRENT_BINARY_DIR}/${BINARY_NAME}.cia
123	    DESTINATION cia COMPONENT ${BINARY_NAME}-3ds)