Skip to content

Commit 532e942

Browse files
committed
overlay: Import template
* Also move to dynamic cast
1 parent e5c93d9 commit 532e942

File tree

12 files changed

+151
-7
lines changed

12 files changed

+151
-7
lines changed

.github/workflows/nxcord.yml

+5
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ jobs:
3333
with:
3434
name: client.nro
3535
path: build/client.nro
36+
- name: Uploading overlay
37+
uses: actions/[email protected]
38+
with:
39+
name: overlay.ovl
40+
path: build/overlay.ovl
3641
- name: Building other flavors
3742
run: |
3843
export DEVKITPRO=/opt/devkitpro

.gitmodules

+3
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,6 @@
1313
[submodule "externals/wslay/wslay"]
1414
path = externals/wslay/wslay
1515
url = https://github.com/tatsuhiro-t/wslay.git
16+
[submodule "externals/libtesla/libtesla"]
17+
path = externals/libtesla/libtesla
18+
url = https://github.com/WerWolv/libtesla.git

CMakeLists.txt

+7
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@ project(nxcord-all)
44

55
message(STATUS "Using toolchain file: ${CMAKE_TOOLCHAIN_FILE}.")
66

7+
string(TIMESTAMP TODAY "%Y%m%d")
8+
set(VERSION "0.3-${TODAY}")
9+
set_property(GLOBAL PROPERTY NXCORD_VERSION ${VERSION})
10+
add_definitions(-DNXCORD_VERSION="${VERSION}")
11+
712
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMakeModules)
813

914
include(SwitchTools)
@@ -15,11 +20,13 @@ find_package(Sodium REQUIRED)
1520
find_package(Zlib REQUIRED)
1621

1722
include(externals/Atmosphere-libs/CMakeLists.txt)
23+
include(externals/libtesla/CMakeLists.txt)
1824
include(externals/Plutonium/CMakeLists.txt)
1925
include(externals/SimpleIniParser/CMakeLists.txt)
2026
include(externals/sleepy-discord/sleepy_discord/CMakeLists.txt)
2127
include(externals/wslay/CMakeLists.txt)
2228
include(common/CMakeLists.txt)
2329
include(nxcord/CMakeLists.txt)
2430
include(client/CMakeLists.txt)
31+
include(overlay/CMakeLists.txt)
2532
include(sysmodule/CMakeLists.txt)

CMakeModules/SwitchTools.cmake

+62
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,68 @@ function(add_nro_target target)
312312
set_target_properties(${target} PROPERTIES LINK_FLAGS "-specs=${LIBNX}/switch.specs")
313313
endfunction()
314314

315+
function(add_ovl_target target)
316+
get_filename_component(target_we ${target} NAME_WE)
317+
318+
# Extract metadata from the target.
319+
get_target_property(icon ${target} "ICON")
320+
get_target_property(romfs ${target} "ROMFS")
321+
322+
set_app_icon(${icon})
323+
324+
# Construct the `NROFLAGS` to invoke elf2nro with.
325+
set(NROFLAGS "")
326+
327+
# Set icon for the NRO, if given.
328+
if (__HOMEBREW_ICON)
329+
string(APPEND ${NROFLAGS} "--icon=\"${__HOMEBREW_ICON}\"")
330+
endif ()
331+
332+
# Add RomFS to the NRO, if given.
333+
if (NOT "${romfs}" STREQUAL "romfs-NOTFOUND")
334+
if (IS_DIRECTORY ${romfs})
335+
# RomFS is a directory, pass --romfsdir to
336+
# elf2nro and let it build an image for us.
337+
string(APPEND ${NROFLAGS} " --romfsdir=\"${romfs}\"")
338+
else ()
339+
# A RomFS image was provided, which can be
340+
# supplied to the --romfs flag.
341+
if (EXISTS ${romfs})
342+
string(APPEND ${NROFLAGS} " --romfs=\"${romfs}\"")
343+
else ()
344+
message(WARNING "The provided RomFS image at ${romfs} doesn't exist")
345+
endif ()
346+
endif ()
347+
endif ()
348+
349+
# Build the NRO file.
350+
if (NOT NO_NACP)
351+
if (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/${target_we}.nacp)
352+
__generate_nacp(${target})
353+
endif ()
354+
355+
add_custom_command(
356+
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${target_we}.ovl
357+
COMMAND ${elf2nro} $<TARGET_FILE:${target}> ${CMAKE_CURRENT_BINARY_DIR}/${target_we}.ovl --nacp=${CMAKE_CURRENT_BINARY_DIR}/${target_we}.nacp ${NROFLAGS}
358+
DEPENDS ${target} ${CMAKE_CURRENT_BINARY_DIR}/${target_we}.nacp
359+
VERBATIM
360+
)
361+
else ()
362+
message(STATUS "No .nacp file will be generated for ${target_we}.ovl")
363+
364+
add_custom_command(
365+
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${target_we}.ovl
366+
COMMAND ${elf2nro} $<TARGET_FILE:${target}> ${CMAKE_CURRENT_BINARY_DIR}/${target_we}.ovl ${NROFLAGS}
367+
DEPENDS ${target}
368+
VERBATIM
369+
)
370+
endif ()
371+
372+
# Add the respective NRO target and set the required linker flags for the original target.
373+
add_custom_target(${target_we}_ovl ALL SOURCES ${CMAKE_CURRENT_BINARY_DIR}/${target_we}.ovl)
374+
set_target_properties(${target} PROPERTIES LINK_FLAGS "-specs=${LIBNX}/switch.specs")
375+
endfunction()
376+
315377
## Builds a .nso file from a given target.
316378
##
317379
## NSOs are the main executable format on the Switch, however

DevkitA64Libnx.cmake

+1-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ add_definitions(-DSWITCH -D__SWITCH__)
9393

9494
set(ARCH "-march=armv8-a+crc+crypto -mtune=cortex-a57 -mtp=soft -fPIE")
9595
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall -O2 -ffunction-sections ${ARCH}" CACHE STRING "C flags")
96-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_FLAGS} -fno-rtti -fno-exceptions" CACHE STRING "C++ flags")
96+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_FLAGS} -fno-exceptions" CACHE STRING "C++ flags")
9797
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -x assembler-with-cpp ${ARCH}" CACHE STRING "ASM flags")
9898
# These flags are purposefully empty to use the default flags when invoking the
9999
# devkitA64 linker. Otherwise the linker may complain about duplicate flags.

build_release.sh

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@ cmake -DCMAKE_TOOLCHAIN_FILE=../DevkitA64Libnx.cmake ..
99
make -j16
1010
cd ..
1111
mkdir -p release/atmosphere/contents/5600000000000000/flags
12-
mkdir -p release/switch
12+
mkdir -p release/switch/.overlays
1313
cp build/client.nro release/switch/nxcord.nro
1414
cp build/sysmodule.nsp release/atmosphere/contents/5600000000000000/exefs.nsp
1515
cp sysmodule/toolbox.json release/atmosphere/contents/5600000000000000/
1616
touch release/atmosphere/contents/5600000000000000/flags/boot2.flag
17+
cp build/overlay.ovl release/switch/.overlays/nxcord.ovl
1718
cd release
1819
zip -r release.zip *
1920
mv release.zip ../

client/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ if (ENABLE_CLIENT_STANDALONE)
1818
target_compile_definitions(client PRIVATE STANDALONE)
1919
endif ()
2020

21-
string(TIMESTAMP TODAY "%Y%m%d")
21+
get_property(version GLOBAL PROPERTY NXCORD_VERSION)
2222
set_target_properties(client PROPERTIES
2323
APP_TITLE "NXCord"
2424
APP_AUTHOR "Grarak"
25-
APP_VERSION "0.3-${TODAY}")
25+
APP_VERSION "${version}")
2626

2727
target_link_libraries(client plutonium nxcord)
2828

externals/libtesla/CMakeLists.txt

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
cmake_minimum_required(VERSION 3.1)
2+
3+
project(libtesla)
4+
5+
set(CMAKE_CXX_STANDARD 17)
6+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
7+
8+
add_library(libtesla STATIC ${CMAKE_CURRENT_LIST_DIR}/libtesla/include/tesla.hpp)
9+
set_target_properties(libtesla PROPERTIES LINKER_LANGUAGE CXX)
10+
11+
target_include_directories(libtesla
12+
PUBLIC
13+
${CMAKE_CURRENT_LIST_DIR}/libtesla/include)
14+
target_link_libraries(libtesla switch::libnx)

externals/libtesla/libtesla

Submodule libtesla added at 9fb6567

nxcord/src/discord_client.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -141,12 +141,12 @@ void DiscordClient::onError(SleepyDiscord::ErrorCode errorCode,
141141

142142
SleepyDiscord::Timer DiscordClient::schedule(SleepyDiscord::TimedTask code,
143143
const time_t milliseconds) {
144-
return static_cast<DiscordScheduleHandler &>(getScheduleHandler())
144+
return dynamic_cast<DiscordScheduleHandler &>(getScheduleHandler())
145145
.schedule(std::move(code), milliseconds);
146146
}
147147

148148
void DiscordClient::stopClient() {
149-
static_cast<DiscordScheduleHandler &>(getScheduleHandler()).clear();
149+
dynamic_cast<DiscordScheduleHandler &>(getScheduleHandler()).clear();
150150
}
151151

152152
bool DiscordClient::setLoginCredentials(const std::string &email,
@@ -286,5 +286,5 @@ void DiscordClient::tick() {
286286
}
287287
}
288288

289-
static_cast<DiscordScheduleHandler &>(getScheduleHandler()).tick();
289+
dynamic_cast<DiscordScheduleHandler &>(getScheduleHandler()).tick();
290290
}

overlay/CMakeLists.txt

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
cmake_minimum_required(VERSION 3.1)
2+
3+
project(overlay)
4+
5+
set(CMAKE_CXX_STANDARD 17)
6+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
7+
8+
file(GLOB overlay_src ${CMAKE_CURRENT_LIST_DIR}/src/*.cpp)
9+
10+
add_executable(overlay ${overlay_src})
11+
12+
target_link_libraries(overlay libtesla)
13+
14+
get_property(version GLOBAL PROPERTY NXCORD_VERSION)
15+
set_target_properties(overlay PROPERTIES
16+
APP_TITLE "NXCord"
17+
APP_AUTHOR "Grarak"
18+
APP_VERSION "${version}")
19+
20+
add_ovl_target(overlay)

overlay/src/main.cpp

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#define TESLA_INIT_IMPL
2+
#include <tesla.hpp>
3+
4+
class NXCordGui : public tsl::Gui {
5+
public:
6+
tsl::elm::Element* createUI() override {
7+
auto rootFrame = new tsl::elm::OverlayFrame("NXCord", NXCORD_VERSION);
8+
return rootFrame;
9+
}
10+
11+
void update() override {}
12+
13+
bool handleInput(u64 keysDown, u64 keysHeld, touchPosition touchInput,
14+
JoystickPosition leftJoyStick,
15+
JoystickPosition rightJoyStick) override {
16+
return false;
17+
}
18+
};
19+
20+
class NXCordOverlay : public tsl::Overlay<NXCordGui> {
21+
public:
22+
void initServices() override {}
23+
void exitServices() override {}
24+
25+
void onShow() override {}
26+
void onHide() override {}
27+
};
28+
29+
int main(int argc, char* argv[]) {
30+
return tsl::loop<NXCordOverlay>(argc, argv);
31+
}

0 commit comments

Comments
 (0)