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
35 changes: 0 additions & 35 deletions .github/actions/canary-ndk/action.yml

This file was deleted.

14 changes: 5 additions & 9 deletions .github/workflows/build-ndk.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ on:
push:
branches:
- 'master'
- 'dev'
paths-ignore:
- '**.yml'
- '!.github/workflows/build-ndk.yml'
Expand Down Expand Up @@ -38,14 +39,9 @@ jobs:

- uses: seanmiddleditch/gha-setup-ninja@v3

# Use canary NDK to avoid lesser known compile bugs
- name: Setup canary NDK
id: setup-ndk
uses: ./.github/actions/canary-ndk

- name: Create ndkpath.txt
run: |
echo ${{ steps.setup-ndk.outputs.ndk-path }} > ${GITHUB_WORKSPACE}/ndkpath.txt
echo $ANDROID_NDK_HOME > ${GITHUB_WORKSPACE}/ndkpath.txt
cat ${GITHUB_WORKSPACE}/ndkpath.txt

# get version from pushed tag
Expand Down Expand Up @@ -79,21 +75,21 @@ jobs:
echo "NAME=${files[0]}" >> $GITHUB_OUTPUT

- name: Upload non-debug artifact
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
with:
name: ${{ steps.libname.outputs.NAME }}
path: ./build/${{ steps.libname.outputs.NAME }}
if-no-files-found: error

- name: Upload debug artifact
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
with:
name: debug_${{ steps.libname.outputs.NAME }}
path: ./build/debug/${{ steps.libname.outputs.NAME }}
if-no-files-found: error

- name: Upload qmod artifact
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
with:
name: ${{env.qmodName}}.qmod
path: ./${{ env.qmodName }}.qmod
Expand Down
7 changes: 1 addition & 6 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,9 @@ jobs:

- uses: seanmiddleditch/gha-setup-ninja@v3

# Use canary NDK to avoid lesser known compile bugs
- name: Setup canary NDK
id: setup-ndk
uses: ./.github/actions/canary-ndk

- name: Create ndkpath.txt
run: |
echo ${{ steps.setup-ndk.outputs.ndk-path }} > ${GITHUB_WORKSPACE}/ndkpath.txt
echo $ANDROID_NDK_HOME > ${GITHUB_WORKSPACE}/ndkpath.txt
cat ${GITHUB_WORKSPACE}/ndkpath.txt

# get version from pushed tag
Expand Down
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
.vs/
.cache/

# Prerequisites
*.d
Expand Down Expand Up @@ -67,4 +68,4 @@ extern.cmake
# QMOD Schema
mod.json.schema

doxygen-build/
doxygen-build/
150 changes: 73 additions & 77 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,38 +1,30 @@
# include some defines automatically made by qpm
include(qpm_defines.cmake)
include(${EXTERN_DIR}/includes/kaleb/shared/cmake/assets.cmake)

add_definitions(-DCP_SDK_BMBF)
add_definitions(-DDEBUG_SCENES)
cmake_minimum_required(VERSION 3.22)
project(${COMPILE_ID})
include(${EXTERN_DIR}/includes/kaleb/shared/cmake/assets.cmake)

# override mod id
set(MOD_ID "ChatPlexSDK-BS")
# c++ standard
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED 20)

# Enable link time optimization
# In my experience, this can be highly unstable but it nets a huge size optimization and likely performance
# However, the instability was seen using Android.mk/ndk-build builds. With Ninja + CMake, this problem seems to have been solved.
# As always, test thoroughly
# - Fern
# set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)

cmake_minimum_required(VERSION 3.21)
project(${COMPILE_ID})

# export compile commands for significantly better intellisense
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

# c++ standard
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED 20)

# define that stores the actual source directory
set(SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
set(INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
set(SHARED_DIR ${CMAKE_CURRENT_SOURCE_DIR}/shared)

# compile options used
add_compile_options(-frtti -fexceptions)
add_compile_options(-O3)
add_compile_options(-frtti -fPIE -fPIC -fexceptions -fdeclspec -fvisibility=hidden -Wno-extra-qualification -O3)

# get git info
execute_process(COMMAND git config user.name OUTPUT_VARIABLE GIT_USER)
Expand All @@ -50,103 +42,107 @@ message(STATUS "GIT_BRANCH: ${GIT_BRANCH}")
message(STATUS "GIT_COMMIT: 0x${GIT_COMMIT}")
message(STATUS "GIT_MODIFIED: ${GIT_MODIFIED}")

# set git defines
add_compile_definitions(GIT_USER=\"${GIT_USER}\")
add_compile_definitions(GIT_BRANCH=\"${GIT_BRANCH}\")
add_compile_definitions(GIT_COMMIT=0x${GIT_COMMIT})
add_compile_definitions(GIT_MODIFIED=${GIT_MODIFIED})

# Check for file presence and read current contents
set(GIT_INFO_H_PATH "${CMAKE_CURRENT_SOURCE_DIR}/include/git_info.h")
if(EXISTS "${GIT_INFO_H_PATH}")
file(READ "${GIT_INFO_H_PATH}" GIT_INFO_H_CURRENT)
else()
set(GIT_INFO_H_CURRENT "")
endif()

# Define new git info content
set(GIT_INFO_H "#pragma once
#define GIT_USER \"${GIT_USER}\"
#define GIT_BRANCH \"${GIT_BRANCH}\"
#define GIT_COMMIT 0x${GIT_COMMIT}
#define GIT_MODIFIED ${GIT_MODIFIED}
")

# Write git info to file if the contents have changed
if(NOT "${GIT_INFO_H}" STREQUAL "${GIT_INFO_H_CURRENT}")
file(WRITE "${GIT_INFO_H_PATH}" "${GIT_INFO_H}")
endif()


# compile definitions used
add_compile_definitions(VERSION=\"${MOD_VERSION}\")
add_compile_definitions(MOD_ID=\"${MOD_ID}\")
add_compile_definitions(UNITY_2021)
add_compile_definitions(CORDL_RUNTIME_FIELD_NULL_CHECKS)
add_compile_definitions(__USE_LARGEFILE64)
add_compile_definitions(BEATSABER_1_29_4_OR_NEWER)

# compile options used
add_compile_definitions(CP_SDK_BMBF)
add_compile_definitions(DEBUG_SCENES)

string(LENGTH "${CMAKE_CURRENT_LIST_DIR}/" FOLDER_LENGTH)
add_compile_definitions("PAPER_ROOT_FOLDER_LENGTH=${FOLDER_LENGTH}")

# recursively get all src files
RECURSE_FILES(h_file_lista ${INCLUDE_DIR}/*.hpp)
RECURSE_FILES(h_file_listb ${SHARED_DIR}/*.hpp)
RECURSE_FILES(hpp_file_lista ${INCLUDE_DIR}/*.hpp)
RECURSE_FILES(hpp_file_listb ${SHARED_DIR}/*.hpp)
RECURSE_FILES(cpp_file_list ${SOURCE_DIR}/*.cpp)
RECURSE_FILES(c_file_list ${SOURCE_DIR}/*.c)
recurse_files(cpp_file_list ${SOURCE_DIR}/*.cpp)
recurse_files(c_file_list ${SOURCE_DIR}/*.c)
list(APPEND c_file_list ${INCLUDE_DIR}/zip/src/zip.c)

recurse_files(inline_hook_c ${EXTERN_DIR}/includes/beatsaber-hook/shared/inline-hook/*.c)
recurse_files(inline_hook_cpp ${EXTERN_DIR}/includes/beatsaber-hook/shared/inline-hook/*.cpp)

# add all src files to compile
add_library(
${COMPILE_ID}
SHARED
${h_file_lista}
${h_file_listb}
${hpp_file_lista}
${hpp_file_listb}
${cpp_file_list}
${c_file_list}
${COMPILE_ID} SHARED ${cpp_file_list} ${c_file_list} ${inline_hook_c} ${inline_hook_cpp}
)

# Add any assets
add_assets(assets_${COMPILE_ID} STATIC ${CMAKE_CURRENT_LIST_DIR}/assets ${INCLUDE_DIR}/assets.hpp)

# get the vcpkg dir from env variables
if(EXISTS $ENV{VCPKG_ROOT})
set(VCPKG_ROOT $ENV{VCPKG_ROOT})
else()
MESSAGE(ERROR "Please define the environment variable VCPKG_ROOT with the root to your vcpkg install!")
endif()

target_include_directories(${COMPILE_ID} PRIVATE .)

# add src dir as include dir
target_include_directories(${COMPILE_ID} PRIVATE ${SOURCE_DIR})
# add include dir as include dir
target_include_directories(${COMPILE_ID} PRIVATE ${INCLUDE_DIR})
# add shared dir as include dir
target_include_directories(${COMPILE_ID} PUBLIC ${SHARED_DIR})
# codegen includes
target_include_directories(${COMPILE_ID} PRIVATE ${EXTERN_DIR}/includes/${CODEGEN_ID}/include)

target_link_libraries(${COMPILE_ID} PRIVATE -llog)
target_link_libraries(${COMPILE_ID} PRIVATE assets_${COMPILE_ID})
# Add any assets
add_assets(${COMPILE_ID}-assets STATIC ${CMAKE_CURRENT_LIST_DIR}/assets ${INCLUDE_DIR}/assets.hpp)
target_link_libraries(${COMPILE_ID} PRIVATE -llog -lz ${COMPILE_ID}-assets)

# add extern stuff like libs and other includes
include(extern.cmake)

add_custom_command(TARGET ${COMPILE_ID} POST_BUILD
COMMAND ${CMAKE_STRIP} -d --strip-all
"lib${COMPILE_ID}.so" -o "stripped_lib${COMPILE_ID}.so"
COMMENT "Strip debug symbols done on final binary.")
COMMAND ${CMAKE_STRIP} -g -S -d --strip-all
"lib${COMPILE_ID}.so" -o "stripped_lib${COMPILE_ID}.so"
COMMENT "Strip debug symbols done on final binary.")

add_custom_command(TARGET ${COMPILE_ID} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory debug
COMMENT "Make directory for debug symbols"
)

add_custom_command(TARGET ${COMPILE_ID} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E rename lib${COMPILE_ID}.so debug/lib${COMPILE_ID}.so
COMMENT "Rename the lib to debug_ since it has debug symbols"
)
COMMAND ${CMAKE_COMMAND} -E rename lib${COMPILE_ID}.so debug/lib${COMPILE_ID}.so
COMMENT "Rename the lib to debug_ since it has debug symbols"
)

# strip debug symbols from the .so and all dependencies
add_custom_command(TARGET ${COMPILE_ID} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E rename stripped_lib${COMPILE_ID}.so lib${COMPILE_ID}.so
COMMENT "Rename the stripped lib to regular"
)
foreach(so_file ${so_list})
cmake_path(GET so_file FILENAME file)
COMMAND ${CMAKE_COMMAND} -E rename stripped_lib${COMPILE_ID}.so lib${COMPILE_ID}.so
COMMENT "Rename the stripped lib to regular"
)

add_custom_command(TARGET ${COMPILE_ID} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${so_file} debug/${file}
COMMENT "Copy so files for ndk stack"
)
foreach(so_file ${so_list})
cmake_path(GET so_file FILENAME file)

add_custom_command(TARGET ${COMPILE_ID} POST_BUILD
COMMAND ${CMAKE_STRIP} -g -S -d --strip-all ${so_file} -o ${file}
COMMENT "Strip debug symbols from the dependencies")
endforeach()
add_custom_command(TARGET ${COMPILE_ID} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${so_file} debug/${file}
COMMENT "Copy so files for ndk stack"
)

foreach(a_file ${a_list})
cmake_path(GET a_file FILENAME file)
add_custom_command(TARGET ${COMPILE_ID} POST_BUILD
COMMAND ${CMAKE_STRIP} -g -S -d --strip-all ${so_file} -o ${file}
COMMENT "Strip debug symbols from the dependencies")
endforeach()

add_custom_command(TARGET ${COMPILE_ID} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${a_file} debug/${file}
COMMENT "Copy a files for ndk stack")
endforeach()
foreach(a_file ${a_list})
cmake_path(GET a_file FILENAME file)

add_custom_command(TARGET ${COMPILE_ID} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${a_file} debug/${file}
COMMENT "Copy a files for ndk stack")
endforeach()
5 changes: 5 additions & 0 deletions include/git_info.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#pragma once
#define GIT_USER "HardCPP"
#define GIT_BRANCH "dev"
#define GIT_COMMIT 0xc20158d
#define GIT_MODIFIED 1
Loading
Loading