Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified .clang-format
Binary file not shown.
54 changes: 31 additions & 23 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,14 @@ jobs:
uses: actions/checkout@v2
with:
submodules: recursive

- name: Set up Git safe directory
run: git config --global --add safe.directory /__w/BCSTM-Player/BCSTM-Player

- name: Install tools
run: |
sudo apt-get update
sudo apt-get install p7zip-full g++ cmake -y
sudo apt-get install p7zip-full g++ cmake ninja-build -y
git clone https://github.com/NPI-D7/bannertool
cd bannertool
cmake -B build
Expand All @@ -46,46 +48,50 @@ jobs:
- name: Build
id: build
run: |
make
mkdir -p build
cd build
cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE="/opt/devkitpro/cmake/3DS.cmake"
ninja
cd ..
mkdir -p ~/artifacts
cp BCSTM-Player.3dsx ~/artifacts
cp BCSTM-Player.cia ~/artifacts
echo ::set-output name=commit_tag::$(git describe --abbrev=0 --tags)
echo ::set-output name=commit_hash::$(git log --format=%h -1)
# Webhook info
echo ::set-output name=author_name::$(git log -1 "$GITHUB_SHA" --pretty="%aN")
echo ::set-output name=committer_name::$(git log -1 "$GITHUB_SHA" --pretty="%cN")
echo ::set-output name=commit_subject::$(git log -1 "$GITHUB_SHA" --pretty="%s")
echo ::set-output name=commit_message::$(git log -1 "$GITHUB_SHA" --pretty="%b")
cp bin/BCSTM-Player.3dsx ~/artifacts
cp bin/BCSTM-Player.cia ~/artifacts
cp bin/BCSTM-Player.elf ~/artifacts
echo "commit_tag=$(git describe --abbrev=0 --tags)" >> $GITHUB_OUTPUT
echo "commit_hash=$(git log --format=%h -1)" >> $GITHUB_OUTPUT
echo "author_name=$(git log -1 $GITHUB_SHA --pretty=%aN)" >> $GITHUB_OUTPUT
echo "committer_name=$(git log -1 $GITHUB_SHA --pretty=%cN)" >> $GITHUB_OUTPUT
echo "commit_subject=$(git log -1 $GITHUB_SHA --pretty=%s)" >> $GITHUB_OUTPUT
echo "commit_message=$(git log -1 $GITHUB_SHA --pretty=%b)" >> $GITHUB_OUTPUT

- name: Publish build to GH Actions
uses: actions/upload-artifact@v4
with:
path: ~/artifacts/*
name: build

# Only run this for non-PR jobs.
publish_build:
runs-on: ubuntu-latest
name: Publish build to NPI-D7/nightlys
if: ${{ success() && !startsWith(github.ref, 'refs/pull') }}
needs: build
env:
COMMIT_TAG: ${{ needs.build.outputs.commit_tag }}
COMMIT_HASH: ${{ needs.build.outputs.commit_hash }}
AUTHOR_NAME: ${{ needs.build.outputs.author_name }}
COMMIT_MESSAGE: ${{ needs.build.outputs.commit_message }}
COMMIT_TAG: ${{ needs.build.commit_tag }}
COMMIT_HASH: ${{ needs.build.commit_hash }}
AUTHOR_NAME: ${{ needs.build.author_name }}
COMMIT_MESSAGE: ${{ needs.build.commit_message }}
outputs:
current_date: ${{ steps.commit.outputs.current_date }}
steps:
- name: Install tools
run: |
sudo apt-get update
sudo apt-get install qrencode -y
run: sudo apt-get update && sudo apt-get install qrencode -y

- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: build
path: build

- name: Upload to ${{ github.repository }} release
if: ${{ startsWith(github.ref, 'refs/tags') }}
run: |
Expand All @@ -97,24 +103,26 @@ jobs:
UPLOAD_URL="https://uploads.github.com/repos/${{ github.repository }}/releases/$ID/assets?name=$(basename $file)"
curl -XPOST -H "$AUTH_HEADER" -H "$CONTENT_LENGTH" -H "$CONTENT_TYPE" --upload-file "$file" "$UPLOAD_URL"
done

- name: Commit and push to NPI-D7/nightlys
id: commit
run: |
CURRENT_DATE=$(date +"%Y%m%d-%H%M%S")
echo ::set-output name=current_date::$CURRENT_DATE
echo "current_date=$CURRENT_DATE" >> $GITHUB_OUTPUT
git config --global user.email "tobid7@outlook.de"
git config --global user.name "Tobi-D7"
git config --global user.name "tobid7"
git clone --depth 1 https://${{ secrets.TOKEN }}@github.com/NPI-D7/nightlys.git
cd nightlys
mkdir -p builds/BCSTM-Player/
cd builds/BCSTM-Player/
qrencode -o BCSTM-Player.png https://github.com/NPI-D7/nightlys/raw/v$CURRENT_DATE/builds/BCSTM-Player/BCSTM-Player.cia
qrencode -o BCSTM-Player-release.png https://github.com/NPI-D7/nightlys/releases/download/$COMMIT_TAG/BCSTM-Player.cia
cp ${{ github.workspace }}/build/* .
git stage .
git add .
git commit -m "BCSTM-Player | $COMMIT_HASH"
git tag v$CURRENT_DATE
git push origin master v$CURRENT_DATE

- name: Release to idk
run: |
ls ${{ github.workspace }}/build
Expand All @@ -130,4 +138,4 @@ jobs:
CONTENT_TYPE="Content-Type: application/7z-x-compressed"
UPLOAD_URL="https://uploads.github.com/repos/NPI-D7/nightlys/releases/$ID/assets?name=$(basename $file)"
curl -XPOST -H "$AUTH_HEADER" -H "$CONTENT_LENGTH" -H "$CONTENT_TYPE" --upload-file "$file" "$UPLOAD_URL"
done
done
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
build
BCSTM-Player.*
icon.bin
banner.bin
banner.bin
compile_commands.json
8 changes: 4 additions & 4 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[submodule "D7-Menu-Core"]
path = D7-Menu-Core
url = https://github.com/NPI-D7/D7-Menu-Core.git
[submodule "ctrff"]
path = ctrff
url = https://github.com/tobid7/ctrff
[submodule "palladium"]
path = palladium
url = https://github.com/tobid7/palladium
url = https://dev.npid7.de/tobid7/palladium
12 changes: 11 additions & 1 deletion .vscode/c_cpp_properties.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,22 @@
{
"configurations": [
{
"name": "3DS",
"name": "3DS | Windows",
"includePath": [
"${workspaceFolder}/**",
"${workspaceFolder}/palladium/include/**",
"C:/devkitpro/libctru/include/**",
"C:/devkitpro/portlibs/3ds/include/**",
],
"cStandard": "c17",
"cppStandard": "c++20",
"compileCommands": "${workspaceFolder}/build/compile_commands.json"
},
{
"name": "3DS | Linux/Mac",
"includePath": [
"${workspaceFolder}/**",
"${workspaceFolder}/palladium/include/**",
"/opt/devkitpro/libctru/include/**",
"/opt/devkitpro/portlibs/3ds/include/**"
],
Expand Down
21 changes: 21 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"configurations": [
{
"name": "3DS GDB",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/bin/BCSTM-Player.elf",
"miDebuggerServerAddress": "localhost:4003",
"miDebuggerPath": "C:\\devkitPro\\devkitARM\\bin\\arm-none-eabi-gdb.exe",
"cwd": "${workspaceFolder}",
"externalConsole": true,
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
5 changes: 3 additions & 2 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"editor.formatOnSave": true,
"editor.formatOnSave": false,
"files.associations": {
"*.tcc": "cpp",
"cctype": "cpp",
Expand Down Expand Up @@ -98,6 +98,7 @@
"xlocmes": "cpp",
"xlocmon": "cpp",
"xloctime": "cpp",
"xtree": "cpp"
"xtree": "cpp",
"any": "cpp"
}
}
179 changes: 179 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
cmake_minimum_required(VERSION 3.18)

# Setup Toolchain if not specified
# Could propably avoided by using arm-none-eabi-cmake
if(NOT DEFINED CMAKE_TOOLCHAIN_FILE)
if(DEFINED ENV{DEVKITPRO})
set(CMAKE_TOOLCHAIN_FILE "$ENV{DEVKITPRO}/cmake/3DS.cmake" CACHE PATH "toolchain file")
else()
message(FATAL_ERROR "Please define DEVKITPRO to point to your SDK path!")
endif()
endif()

find_program(MAKEROM makerom)
find_program(BANNERTOOL bannertool)

execute_process(
COMMAND git rev-parse --short HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_SHORT_HASH
OUTPUT_STRIP_TRAILING_WHITESPACE
)

execute_process(
COMMAND git rev-parse --abbrev-ref HEAD
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE GIT_BRANCH
OUTPUT_STRIP_TRAILING_WHITESPACE
)

# Set Result specific Data
set(APP_NAME "BCSTM-Player")
set(APP_DESC "BCSTM Player for the 3ds")
set(APP_AUTHOR "tobid7")
set(APP_ICON "${CMAKE_SOURCE_DIR}/app/icon.png")
set(APP_ROMFS "${CMAKE_SOURCE_DIR}/romfs")

set(APP_BANNER "${CMAKE_SOURCE_DIR}/app/banner.png")
set(APP_BANNERAUDIO "${CMAKE_SOURCE_DIR}/app/BannerAudio.wav")
set(APP_RSF "${CMAKE_SOURCE_DIR}/app/build-cia.rsf")
set(APP_LOGO "${CMAKE_SOURCE_DIR}/app/splash.lz")

# Set 3ds IP for make send
set(3DS_IP "" CACHE STRING "3ds IP (make send)")

# Set Project
project(BCSTM-Player LANGUAGES C CXX VERSION 2.0.0)

# Enable Compile Command Export
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

# Force C++ 20
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)

# Better location to not always crash Citra / Azahar
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)

add_subdirectory(palladium)
add_subdirectory(palladium/backends/3ds)
add_subdirectory(ctrff)

# Set Executable and its sources
add_executable(BCSTM-Player
source/main.cpp
source/pd_ctr_ext.cpp
source/filebrowser.cpp
source/inspector_view.cpp
source/settings.cpp
source/stagemgr.cpp
#ource/app.cpp
#source/config.cpp

source/bcstm/bcstmv2.cpp
source/bcstm/ctrff_decode.cpp

source/flex/objects.cpp
)

# Set dependencies, include dirs and definitions
target_link_libraries(BCSTM-Player PUBLIC m ctrff pd-backend-3ds palladium citro3d ctrud)
target_include_directories(BCSTM-Player PUBLIC
source
${DEVKITPRO}/portlibs/3ds/include
)
target_compile_definitions(BCSTM-Player PUBLIC
-D_GNU_SOURCE=1
-DVERSION="${PROJECT_VERSION}"
-DGIT_COMMIT="${GIT_SHORT_HASH}"
-DGIT_BRANCH="${GIT_BRANCH}"
)
target_compile_options(BCSTM-Player PUBLIC
-Wno-psabi
)

if(${CMAKE_BUILD_TYPE} STREQUAL "Release")
target_compile_options(BCSTM-Player PUBLIC
-fno-rtti
)
endif()

# Command to send to console (make send)
add_custom_target(
send
COMMAND 3dslink -a "${3DS_IP}" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME}.3dsx"
)

# Generate 3DSX
ctr_generate_smdh(
${CMAKE_BINARY_DIR}/${PROJECT_NAME}.smdh
NAME "${APP_NAME}"
DESCRIPTION "${APP_DESC}"
AUTHOR "${APP_AUTHOR}"
ICON "${APP_ICON}"
)
ctr_create_3dsx(
BCSTM-Player
OUTPUT "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME}.3dsx"
SMDH "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.smdh"
ROMFS "${APP_ROMFS}"
)

if(MAKEROM AND BANNERTOOL)
message(STATUS "Found Makerom and Bannertool. Building Cia...")

add_custom_command(
OUTPUT ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.bnr
COMMAND ${BANNERTOOL} makebanner
-i ${APP_BANNER}
-a ${APP_BANNERAUDIO}
-o ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.bnr
DEPENDS ${APP_BANNER} ${APP_BANNERAUDIO}
COMMENT "Creating Banner for cia file..."
VERBATIM
)

add_custom_command(
OUTPUT ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME}.cia
COMMAND ${MAKEROM}
-f cia -target t -exefslogo
-o "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME}.cia"
-elf "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME}.elf"
-rsf ${APP_RSF}
-banner "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.bnr"
-icon "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.smdh"
-logo ${APP_LOGO} -DAPP_ROMFS="${APP_ROMFS}"
-major 1 -minor 0 -micro 0
-DAPP_VERSION_MAJOR=1
DEPENDS ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.elf ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.smdh
COMMENT "Creating Cia file..."
VERBATIM
)

add_custom_target(make_banner ALL
DEPENDS ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.bnr
)

add_custom_target(make_cia ALL
DEPENDS make_banner ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME}.elf ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME}.cia
)
endif()

# Add clang-format target if clang-format was found
find_program(CLANG_FORMAT clang-format)
if(CLANG_FORMAT)
message(STATUS "Clang Format found.")
set(SOURCES ${CMAKE_SOURCE_DIR}/source)
set(COMMENT "Formatting Project Sources")
if(WIN32)
add_custom_target(clang-format
COMMAND powershell.exe -Command "Get-ChildItem '${SOURCES}/*' -Include *.cpp,*.hpp -Recurse | Foreach {&'${CLANG_FORMAT}' -i $_.fullname}"
COMMENT ${CCOMMENT})
else()
add_custom_target(clang-format
COMMAND find ${SOURCES} -iname *.hpp -o -iname *.cpp | xargs ${CLANG_FORMAT} -i
COMMENT ${COMMENT}
)
endif()
unset(COMMENT)
endif()
1 change: 0 additions & 1 deletion D7-Menu-Core
Submodule D7-Menu-Core deleted from 9fc05f
Loading
Loading