mirror of
https://github.com/encounter/cpp3ds.git
synced 2026-03-30 11:04:22 -07:00
Update gateway example with CMake
This commit is contained in:
+207
-15
@@ -1,17 +1,209 @@
|
||||
ENTRY(_start)
|
||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
|
||||
OUTPUT_ARCH(arm)
|
||||
/*ENTRY(_start_cpp3ds)*/
|
||||
STARTUP(cpp3ds-crt0.S.o)
|
||||
|
||||
MEMORY {
|
||||
memregion : ORIGIN = 0x00100000, LENGTH = 2395K
|
||||
}
|
||||
|
||||
__memregion_start = ORIGIN(memregion);
|
||||
__memregion_top = ORIGIN(memregion)+ LENGTH(memregion);
|
||||
|
||||
PHDRS
|
||||
{
|
||||
text PT_LOAD FLAGS(5);
|
||||
rodata PT_LOAD FLAGS(4);
|
||||
data PT_LOAD FLAGS(6);
|
||||
bss PT_LOAD;
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
. = 0x080C3EE0;
|
||||
.text : {
|
||||
*cpp3ds-crt0.o (.text)
|
||||
*(.text)
|
||||
}
|
||||
.data : { *(.data) }
|
||||
.bss : { *(.bss COMMON) }
|
||||
. = . + 0x4000; /* 64kB of Heap memory */
|
||||
_end = .;
|
||||
. = ALIGN(4);
|
||||
. = . + 0x1000; /* 4kB of stack memory */
|
||||
stack_top = .;
|
||||
}
|
||||
PROVIDE(__HEAP_START = _end );
|
||||
.init : ALIGN(0x1000)
|
||||
{
|
||||
__text_start = . ;
|
||||
KEEP (*(.init))
|
||||
/*. = ALIGN(4); REQUIRED. LD is flaky without it. */
|
||||
} >memregion :text
|
||||
|
||||
.plt :
|
||||
{
|
||||
*(.plt)
|
||||
} >memregion = 0xff
|
||||
|
||||
.text : ALIGN (0x1000)
|
||||
{
|
||||
|
||||
*(.text*)
|
||||
*(.stub)
|
||||
/* .gnu.warning sections are handled specially by elf32.em. */
|
||||
*(.gnu.warning)
|
||||
*(.gnu.linkonce.t*)
|
||||
*(.glue_7)
|
||||
*(.glue_7t)
|
||||
/*. = ALIGN(4); REQUIRED. LD is flaky without it. */
|
||||
} >memregion
|
||||
|
||||
.fini :
|
||||
{
|
||||
KEEP (*(.fini))
|
||||
. = ALIGN(0x1000);
|
||||
} >memregion
|
||||
|
||||
__text_end = . ;
|
||||
|
||||
.rodata :
|
||||
{
|
||||
*(.rodata)
|
||||
*all.rodata*(*)
|
||||
*(.roda)
|
||||
*(.rodata.*)
|
||||
*(.gnu.linkonce.r*)
|
||||
SORT(CONSTRUCTORS)
|
||||
. = ALIGN(0x1000); /* REQUIRED. LD is flaky without it. */
|
||||
} >memregion :rodata
|
||||
|
||||
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >memregion
|
||||
__exidx_start = .;
|
||||
.ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >memregion
|
||||
__exidx_end = .;
|
||||
|
||||
/* Ensure the __preinit_array_start label is properly aligned. We
|
||||
could instead move the label definition inside the section, but
|
||||
the linker would then create the section even if it turns out to
|
||||
be empty, which isn't pretty. */
|
||||
. = ALIGN(32 / 8);
|
||||
PROVIDE (__preinit_array_start = .);
|
||||
.preinit_array : { KEEP (*(.preinit_array)) } >memregion :data
|
||||
PROVIDE (__preinit_array_end = .);
|
||||
PROVIDE (__init_array_start = .);
|
||||
.init_array : { KEEP (*(.init_array)) } >memregion :data
|
||||
PROVIDE (__init_array_end = .);
|
||||
PROVIDE (__fini_array_start = .);
|
||||
.fini_array : { KEEP (*(.fini_array)) } >memregion = 0xff
|
||||
PROVIDE (__fini_array_end = .);
|
||||
|
||||
.ctors : ALIGN(0x1000)
|
||||
{
|
||||
/* gcc uses crtbegin.o to find the start of the constructors, so
|
||||
we make sure it is first. Because this is a wildcard, it
|
||||
doesn't matter if the user does not actually link against
|
||||
crtbegin.o; the linker won't look for a file to match a
|
||||
wildcard. The wildcard also means that it doesn't matter which
|
||||
directory crtbegin.o is in. */
|
||||
KEEP (*crtbegin.o(.ctors))
|
||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
||||
KEEP (*(SORT(.ctors.*)))
|
||||
KEEP (*(.ctors))
|
||||
/*. = ALIGN(4); REQUIRED. LD is flaky without it. */
|
||||
} >memregion = 0xff
|
||||
|
||||
.dtors : ALIGN(0x1000)
|
||||
{
|
||||
KEEP (*crtbegin.o(.dtors))
|
||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
||||
KEEP (*(SORT(.dtors.*)))
|
||||
KEEP (*(.dtors))
|
||||
/*. = ALIGN(4); REQUIRED. LD is flaky without it. */
|
||||
} >memregion = 0xff
|
||||
|
||||
.eh_frame : ALIGN(0x1000)
|
||||
{
|
||||
KEEP (*(.eh_frame))
|
||||
/*. = ALIGN(4); REQUIRED. LD is flaky without it. */
|
||||
} >memregion = 0xff
|
||||
|
||||
.gcc_except_table : ALIGN(0x1000)
|
||||
{
|
||||
*(.gcc_except_table)
|
||||
/*. = ALIGN(4); REQUIRED. LD is flaky without it. */
|
||||
} >memregion = 0xff
|
||||
.jcr : { KEEP (*(.jcr)) } >memregion = 0
|
||||
|
||||
.got :
|
||||
{
|
||||
__got_start = ABSOLUTE(.);
|
||||
*(.got.plt) *(.got)
|
||||
} >memregion = 0
|
||||
__got_end = . ;
|
||||
|
||||
.memregion ALIGN(4) :
|
||||
{
|
||||
__memregion_start = ABSOLUTE(.) ;
|
||||
*(.memregion)
|
||||
*memregion.*(.text)
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
__memregion_end = ABSOLUTE(.) ;
|
||||
} >memregion = 0xff
|
||||
|
||||
|
||||
.data ALIGN(4) : {
|
||||
__data_start = ABSOLUTE(.);
|
||||
*(.data)
|
||||
*(.data.*)
|
||||
*(.gnu.linkonce.d*)
|
||||
CONSTRUCTORS
|
||||
. = ALIGN(0x1000);
|
||||
__data_end = ABSOLUTE(.) ;
|
||||
} >memregion :data
|
||||
|
||||
/*.data : {
|
||||
*(.data)
|
||||
*(.data.*)
|
||||
} >memregion :data*/
|
||||
|
||||
.bss ALIGN(0x1000) :
|
||||
{
|
||||
__bss_start = ABSOLUTE(.);
|
||||
__bss_start__ = ABSOLUTE(.);
|
||||
*(.dynbss)
|
||||
*(.gnu.linkonce.b*)
|
||||
*(.bss*)
|
||||
*(COMMON)
|
||||
/*. = ALIGN(4); REQUIRED. LD is flaky without it. */
|
||||
} >memregion :bss
|
||||
|
||||
__bss_end = . ;
|
||||
__bss_end__ = . ;
|
||||
|
||||
_end = . ;
|
||||
__end__ = . ;
|
||||
PROVIDE (end = _end);
|
||||
|
||||
/* Stabs debugging sections. */
|
||||
.stab 0 : { *(.stab) }
|
||||
.stabstr 0 : { *(.stabstr) }
|
||||
.stab.excl 0 : { *(.stab.excl) }
|
||||
.stab.exclstr 0 : { *(.stab.exclstr) }
|
||||
.stab.index 0 : { *(.stab.index) }
|
||||
.stab.indexstr 0 : { *(.stab.indexstr) }
|
||||
.comment 0 : { *(.comment) }
|
||||
/* DWARF debug sections.
|
||||
Symbols in the DWARF debugging sections are relative to the beginning
|
||||
of the section so we begin them at 0. */
|
||||
/* DWARF 1 */
|
||||
.debug 0 : { *(.debug) }
|
||||
.line 0 : { *(.line) }
|
||||
/* GNU DWARF 1 extensions */
|
||||
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
||||
.debug_sfnames 0 : { *(.debug_sfnames) }
|
||||
/* DWARF 1.1 and DWARF 2 */
|
||||
.debug_aranges 0 : { *(.debug_aranges) }
|
||||
.debug_pubnames 0 : { *(.debug_pubnames) }
|
||||
/* DWARF 2 */
|
||||
.debug_info 0 : { *(.debug_info) }
|
||||
.debug_abbrev 0 : { *(.debug_abbrev) }
|
||||
.debug_line 0 : { *(.debug_line) }
|
||||
.debug_frame 0 : { *(.debug_frame) }
|
||||
.debug_str 0 : { *(.debug_str) }
|
||||
.debug_loc 0 : { *(.debug_loc) }
|
||||
.debug_macinfo 0 : { *(.debug_macinfo) }
|
||||
/* SGI/MIPS DWARF 2 extensions */
|
||||
.debug_weaknames 0 : { *(.debug_weaknames) }
|
||||
.debug_funcnames 0 : { *(.debug_funcnames) }
|
||||
.debug_typenames 0 : { *(.debug_typenames) }
|
||||
.debug_varnames 0 : { *(.debug_varnames) }
|
||||
.stack 0x80000 : { _stack = .; *(.stack) }
|
||||
/* These must appear regardless of . */
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
cmake_minimum_required(VERSION 2.8)
|
||||
|
||||
# project name
|
||||
set(PROJECT "cpp3ds-gateway")
|
||||
project(${PROJECT})
|
||||
|
||||
find_package(Qt5Widgets REQUIRED)
|
||||
|
||||
include_directories(
|
||||
"${PROJECT_SOURCE_DIR}/../../include"
|
||||
"${PROJECT_SOURCE_DIR}/../../../tween-engine/include"
|
||||
"${PROJECT_SOURCE_DIR}/../../../ctrulib/libctru/include"
|
||||
)
|
||||
|
||||
link_directories(
|
||||
"${PROJECT_SOURCE_DIR}/../../lib"
|
||||
"${PROJECT_SOURCE_DIR}/../../../tween-engine/lib"
|
||||
"${PROJECT_SOURCE_DIR}/../../../ctrulib/libctru/lib"
|
||||
)
|
||||
|
||||
# C++11 support
|
||||
include(CheckCXXCompilerFlag)
|
||||
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
|
||||
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
|
||||
if(COMPILER_SUPPORTS_CXX11)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
||||
elseif(COMPILER_SUPPORTS_CXX0X)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
|
||||
else()
|
||||
message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
|
||||
endif()
|
||||
|
||||
set(SOURCE_FILES
|
||||
src/gateway.cpp
|
||||
)
|
||||
|
||||
add_executable(${PROJECT} ${SOURCE_FILES})
|
||||
qt5_use_modules(${PROJECT} Core Gui Widgets)
|
||||
|
||||
target_link_libraries(${PROJECT} cpp3ds-sim tween-test sfml-graphics sfml-window sfml-system)
|
||||
|
||||
set_target_properties(${PROJECT} PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS} -Wall -pedantic -O3")
|
||||
set_target_properties(${PROJECT} PROPERTIES COMPILE_DEFINITIONS "SIMULATION")
|
||||
#set_target_properties(${PROJECT} PROPERTIES LINK_FLAGS "${CMAKE_CXX_FLAGS} ${CPP3DS_SIM_FLAGS}")
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
using namespace cpp3ds;
|
||||
|
||||
extern "C" int main() {
|
||||
void cpp3ds_main() {
|
||||
BottomScreen bottom_screen;
|
||||
TopScreen top_screen;
|
||||
Stage stage;
|
||||
@@ -28,6 +28,4 @@ extern "C" int main() {
|
||||
top_screen.draw(stage);
|
||||
|
||||
display(top_screen, bottom_screen);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user