#pragma once #include #include struct NpiProject { std::string name; std::string author; std::string description; int vmajor; int vminor; int vbuild; std::vector source_dirs; std::vector include_dirs; std::vector libraries; std::vector lib_dirs; std::string icon_path; std::string banner_path; // depends ctr_type std::string banner_a_path; // depends ctr_type std::string rsf_path; // depends ctr_type std::string logo_lz11_path; // depends ctr_type std::string dir_gfx; std::string dir_gfxbuild; std::string dir_romfs; std::string unique_id; // depends ctr_type std::string prod; // depends ctr_type std::string platform; // Platforms: 3ds, desktop bool ctr_type; // depends platform std::vector arch_flags; std::vector c_flags; std::vector cxx_flags; std::vector as_flags; std::vector linker_flags; std::string cxx_compiler; std::string c_compiler; std::string linker; std::string asm_compiler; }; inline void Prj_InitDefault(NpiProject &project, bool cia) { project.name = "Sample"; project.author = "Sample"; project.description = "Description"; project.vmajor = 1; project.vminor = 0; project.vbuild = 0; project.source_dirs.push_back("source"); project.include_dirs.push_back("include"); project.libraries.push_back("m"); project.libraries.push_back("stdc++"); project.libraries.push_back("citro2d"); project.libraries.push_back("citro3d"); project.libraries.push_back("ctru"); project.arch_flags.push_back("march=armv6k"); project.arch_flags.push_back("mtune=mpcore"); project.arch_flags.push_back("mfloat-abi=hard"); project.arch_flags.push_back("mtp=soft"); project.c_flags.push_back("g"); project.c_flags.push_back("Wall"); project.c_flags.push_back("Wno-psabi"); project.c_flags.push_back("O2"); project.c_flags.push_back("mword-relocations"); project.c_flags.push_back("fomit-frame-pointer"); project.c_flags.push_back("ffunction-sections"); project.c_flags.push_back("[arch_flags]"); project.c_flags.push_back("D__3DS__"); project.c_flags.push_back("D_GNU_SOURCE=1"); project.cxx_flags.push_back("[c_flags]"); project.cxx_flags.push_back("fno-rtti"); project.cxx_flags.push_back("fno-exceptions"); project.cxx_flags.push_back("std=gnu++20"); project.as_flags.push_back("g"); project.as_flags.push_back("[arch_flags]"); project.linker_flags.push_back("specs=3dsx.specs"); project.linker_flags.push_back("g"); project.linker_flags.push_back("[arch_flags]"); project.linker_flags.push_back("Wl,-Map,./build/code.map"); project.lib_dirs.push_back("{DEVKITPRO}/portlibs/3ds/"); project.lib_dirs.push_back("{DEVKITPRO}/libctru/"); project.cxx_compiler = "{DEVKITPRO}/devkitARM/bin/arm-none-eabi-g++"; project.linker = "{DEVKITPRO}/devkitARM/bin/arm-none-eabi-g++"; project.c_compiler = "{DEVKITPRO}/devkitARM/bin/arm-none-eabi-gcc"; project.asm_compiler = "{DEVKITPRO}/devkitARM/bin/arm-none-eabi-gcc"; project.icon_path = "app/icon.png"; if (cia) { project.banner_path = "app/banner.png"; project.banner_a_path = "app/banner_audio.wav"; project.rsf_path = "app/build-cia.rsf"; project.logo_lz11_path = "app/logo.lz11"; } project.dir_gfx = "gfx/"; project.dir_gfxbuild = "romfs/gfx/"; project.dir_romfs = "romfs/"; if (cia) { project.unique_id = "0xff3ff"; project.prod = "NPI7"; } project.platform = "3ds"; project.ctr_type = cia; }