Skip to content
Open
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
30 changes: 12 additions & 18 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ jobs:
run:
shell: ${{ matrix.shell }}
env:
CMAKE_TEST: cmake-build-host-tests
CMAKE_BUILD: build
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
Expand Down Expand Up @@ -135,32 +135,26 @@ jobs:
- name: Build
run: |
chmod +x build.sh
./build.sh
./build.sh --build-dir ${CMAKE_BUILD}

# recursively list all files in build directory
ls -R build
ls -R ${CMAKE_BUILD}

# move artifacts
mkdir -p artifacts
tar -czf ./artifacts/Moonlight.tar.gz ./build/xbe
mv ./Moonlight.iso ./artifacts
tar -czf ./artifacts/Moonlight.tar.gz ./${CMAKE_BUILD}/xbox/xbe
cp ./${CMAKE_BUILD}/xbox/Moonlight.iso ./artifacts

- name: Upload Artifacts
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
with:
name: moonlight-${{ runner.os }}
path: artifacts/

- name: Configure host tests
run: cmake -S . -B ${CMAKE_TEST} -DBUILD_TESTS=ON -DBUILD_DOCS=OFF

- name: Build host tests
run: cmake --build ${CMAKE_TEST} --target test_moonlight

- name: Run tests
id: test
working-directory: ${{ env.CMAKE_TEST }}
run: ./tests/test_moonlight --gtest_color=yes --gtest_output=xml:tests/test_results.xml
working-directory: ${{ env.CMAKE_BUILD }}/tests
run: ./test_moonlight --gtest_color=yes --gtest_output=xml:test_results.xml

- name: Generate gcov report
id: test_report
Expand All @@ -170,20 +164,20 @@ jobs:
(steps.test.outcome == 'success' || steps.test.outcome == 'failure')
run: |
${{ steps.python-path.outputs.python-path }} -m pip install ".[test]"
${{ steps.python-path.outputs.python-path }} -m gcovr ${CMAKE_TEST} -r . \
${{ steps.python-path.outputs.python-path }} -m gcovr ${CMAKE_BUILD} -r . \
--filter src \
--exclude-noncode-lines \
--exclude-throw-branches \
--exclude-unreachable-branches \
--verbose \
--xml-pretty \
-o "${CMAKE_TEST}/coverage.xml"
-o "${CMAKE_BUILD}/coverage.xml"

- name: Debug coverage file
if: >-
always() &&
steps.test_report.outcome == 'success'
run: cat "${CMAKE_TEST}/coverage.xml"
run: cat "${CMAKE_BUILD}/coverage.xml"

- name: Upload coverage
# any except canceled or skipped
Expand All @@ -195,7 +189,7 @@ jobs:
with:
disable_search: true
fail_ci_if_error: true
files: ./${{ env.CMAKE_TEST }}/coverage.xml
files: ./${{ env.CMAKE_BUILD }}/coverage.xml
flags: ${{ runner.os }}
report_type: coverage
token: ${{ secrets.CODECOV_TOKEN }}
Expand All @@ -211,7 +205,7 @@ jobs:
with:
disable_search: true
fail_ci_if_error: true
files: ./${{ env.CMAKE_TEST }}/tests/test_results.xml
files: ./${{ env.CMAKE_BUILD }}/tests/test_results.xml
flags: ${{ runner.os }}
handle_no_reports_found: true
report_type: test_results
Expand Down
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -43,5 +43,5 @@ cmake-*/
.local/
docs/doxyconfig*

# iso file is created in project root
*.iso
# Temporary files
*.cmd~
17 changes: 0 additions & 17 deletions .run/Run Moonlight ISO in xemu.run.xml

This file was deleted.

7 changes: 7 additions & 0 deletions .run/moonlight_xbox.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="moonlight_xbox" type="CMakeRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" WORKING_DIR="file://$CMakeCurrentBuildDir$/xbox" PASS_PARENT_ENVS_2="true" PROJECT_NAME="Moonlight" TARGET_NAME="moonlight_xbox" CONFIG_NAME="nxdk-release (mingw64)" RUN_PATH="$PROJECT_DIR$/scripts/run-xemu.cmd">
<method v="2">
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
</method>
</configuration>
</component>
152 changes: 41 additions & 111 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,139 +1,69 @@
# Configure the host-native top-level build, bootstrap vendored nxdk prerequisites,
# and delegate the Xbox target to an internal child configure that uses the stock nxdk toolchain.

cmake_minimum_required(VERSION 3.18)
# much of this file is borrowed from https://github.com/Ryzee119/Xenium-Tools/blob/master/CMakeLists.txt
# and https://github.com/abaire/nxdk_pgraph_tests/blob/main/CMakeLists.txt

# Allow third-party subdirectories that use cmake_minimum_required < 3.5 (removed in CMake 4.x)
set(CMAKE_POLICY_VERSION_MINIMUM 3.5 CACHE STRING "")

project(Moonlight C CXX)
set(MOONLIGHT_BUILD_KIND "HOST" CACHE STRING "Internal Moonlight build mode")
set_property(CACHE MOONLIGHT_BUILD_KIND PROPERTY STRINGS HOST XBOX)

#
# metadata
#
set(XBE_TITLE ${CMAKE_PROJECT_NAME})
set(NXDK_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third-party/nxdk")
set(XBOX_XBE_DIR "${CMAKE_CURRENT_BINARY_DIR}/xbe")
set(XBOX_ISO "${CMAKE_PROJECT_NAME}.iso")

#
# Options
#
option(BUILD_DOCS "Build documentation" ON)
option(BUILD_TESTS "Build tests" OFF)
if(MOONLIGHT_BUILD_KIND STREQUAL "XBOX")
project(Moonlight C CXX)

# add custom modules
set(CMAKE_MODULE_PATH
${CMAKE_MODULE_PATH}
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/"
)
set(CMAKE_MODULE_PATH
${CMAKE_MODULE_PATH}
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/"
)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(NXDK REQUIRED)
find_package(NXDK_SDL2 REQUIRED)
find_package(NXDK_SDL2_Image REQUIRED)
option(BUILD_DOCS "Build documentation" OFF)
option(MOONLIGHT_SKIP_NXDK_PREP "Skip nxdk bootstrap during the internal Xbox child configure" OFF)

# add the automount_d_drive symbol to the linker flags, this is automatic with nxdk when using the Makefile option
# if this is not used, we must add some code to the main function to automount the D drive
# e.g. https://github.com/abaire/nxdk_pgraph_tests/blob/4b7934e6d612a6d17f9ec229a2d72601a5caefc4/src/main.cpp#L118-L122
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -include:_automount_d_drive")
include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/xbox-build.cmake")
return()
endif()

# create the xbe directory if it doesn't exist
file(MAKE_DIRECTORY ${XBOX_XBE_DIR})
project(Moonlight C CXX)

add_custom_target(sync_xbe_assets ALL
COMMAND "${CMAKE_COMMAND}" -E copy_directory
"${CMAKE_CURRENT_SOURCE_DIR}/xbe"
"${XBOX_XBE_DIR}"
COMMENT "Sync XBE assets"
set(CMAKE_MODULE_PATH
${CMAKE_MODULE_PATH}
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/"
)

include(FindPkgConfig)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
if(CMAKE_HOST_WIN32 AND CMAKE_GENERATOR MATCHES "Makefiles")
set(CMAKE_DEPENDS_USE_COMPILER FALSE CACHE BOOL "Use CMake depfile scanning with Windows makefile generators" FORCE)
endif()
set(CMAKE_CXX_FLAGS_RELEASE "-O2")
set(CMAKE_C_FLAGS_RELEASE "-O2")

file(GLOB_RECURSE MOONLIGHT_SOURCES
"${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp"
)
set(MOONLIGHT_EXTERNAL_LIBRARIES
NXDK::NXDK
NXDK::NXDK_CXX
NXDK::SDL2
NXDK::SDL2_Image
)
set(MOONLIGHT_INCLUDE_DIRS
)
set(MOONLIGHT_COMPILE_OPTIONS "-Wno-builtin-macro-redefined")

# submodules
# moonlight common library
# find_package(OpenSSL REQUIRED)
include(GetOpenSSL REQUIRED)
set(ENET_NO_INSTALL ON CACHE BOOL "Don't install any libraries built for enet")
set(BUILD_SHARED_LIBS OFF)
add_subdirectory("${CMAKE_SOURCE_DIR}/third-party/moonlight-common-c")
if(TARGET moonlight-common-c AND TARGET openssl_external)
add_dependencies(moonlight-common-c openssl_external)
endif()
target_link_libraries(enet PUBLIC NXDK::NXDK NXDK::Net NXDK::ws2_32)
if(TARGET moonlight-common-c)
target_link_libraries(moonlight-common-c PRIVATE NXDK::ws2_32)
endif()
option(BUILD_DOCS "Build documentation" ON)
option(BUILD_TESTS "Build host-native unit tests" ON)
option(BUILD_XBOX "Build the Xbox target through an internal child configure" ON)
option(MOONLIGHT_FORCE_NXDK_DISTCLEAN "Force a fresh nxdk distclean during configure" OFF)

add_executable(${CMAKE_PROJECT_NAME}
${MOONLIGHT_SOURCES}
)
include_directories(SYSTEM
${CMAKE_CURRENT_SOURCE_DIR}
${MOONLIGHT_INCLUDE_DIRS})
target_link_libraries(${CMAKE_PROJECT_NAME} PUBLIC
${MOONLIGHT_EXTERNAL_LIBRARIES}
)
target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE ${MOONLIGHT_COMPILE_OPTIONS})
target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE XBOX NXDK)
add_dependencies(${CMAKE_PROJECT_NAME} moonlight-common-c)
include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/sources.cmake")

#
# documentation
#
if(BUILD_DOCS)
add_subdirectory(third-party/doxyconfig docs)
endif()

#
# tests
#
if(BUILD_TESTS)
enable_testing()
add_subdirectory(tests EXCLUDE_FROM_ALL)
add_subdirectory(tests)
endif()

# Post-build exe to xbe conversion
add_custom_target(cxbe_convert ALL
VERBATIM COMMAND "${CMAKE_COMMAND}" -E env
./tools/cxbe/cxbe
-OUT:${XBOX_XBE_DIR}/default.xbe
-TITLE:${XBE_TITLE}
${CMAKE_CURRENT_BINARY_DIR}/${XBE_TITLE}.exe
WORKING_DIRECTORY ${NXDK_DIR}
COMMENT "CXBE Conversion: [EXE -> XBE]"
)
add_dependencies(cxbe_convert ${CMAKE_PROJECT_NAME})
add_dependencies(cxbe_convert sync_xbe_assets)

# Post-build xbe to xiso conversion
add_custom_target(xbe_iso ALL
VERBATIM COMMAND "${CMAKE_COMMAND}" -E env
${NXDK_DIR}/tools/extract-xiso/build/extract-xiso
-c ${XBOX_XBE_DIR} ${XBOX_ISO}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "CXBE Conversion: [XBE -> XISO]"
)
add_dependencies(xbe_iso cxbe_convert)
if(BUILD_XBOX)
include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/nxdk.cmake")

set_target_properties(cxbe_convert PROPERTIES OUTPUT_QUIET ON)
set_target_properties(xbe_iso PROPERTIES OUTPUT_QUIET ON)
moonlight_resolve_nxdk_dir(MOONLIGHT_NXDK_DIR)
moonlight_prepare_nxdk("${MOONLIGHT_NXDK_DIR}" "${CMAKE_BINARY_DIR}/nxdk-bootstrap")
moonlight_add_xbox_build(
NXDK_DIR "${MOONLIGHT_NXDK_DIR}"
BINARY_DIR "${CMAKE_BINARY_DIR}/xbox"
)
endif()
58 changes: 12 additions & 46 deletions CMakePresets.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,50 +8,32 @@
"configurePresets": [
{
"name": "nxdk-release (mingw64)",
"displayName": "nxdk Release (mingw64)",
"description": "Build for Original Xbox using the nxdk toolchain",
"generator": "MSYS Makefiles",
"cmakeExecutable": "C:/msys64/usr/bin/cmake",
"toolchainFile": "${sourceDir}/cmake/toolchain-nxdk-clion.cmake",
"binaryDir": "${sourceDir}/cmake-build-nxdk-release",
"displayName": "Release (mingw64)",
"description": "Build host tests natively with MinGW Makefiles and drive the Xbox target through an internal nxdk child configure",
"generator": "MinGW Makefiles",
"toolchainFile": "${sourceDir}/cmake/host-mingw64-clang.cmake",
"binaryDir": "${sourceDir}/cmake-build-release",
"environment": {
"CHERE_INVOKING": "1",
"MSYSTEM": "MINGW64",
"NXDK_DIR": "${sourceDir}/third-party/nxdk",
"PATH": "${sourceDir}/cmake;${sourceDir}/third-party/nxdk/bin;C:/msys64/mingw64/bin;C:/msys64/usr/bin;$penv{PATH}"
"MSYSTEM": "MINGW64"
},
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_CXX_COMPILER": "${sourceDir}/cmake/nxdk-cxx.bat",
"CMAKE_C_COMPILER": "${sourceDir}/cmake/nxdk-cc.bat",
"BUILD_DOCS": "ON",
"BUILD_TESTS": "ON",
"BUILD_XBOX": "ON",
"CMAKE_DEPENDS_USE_COMPILER": "FALSE",
"CMAKE_MAKE_PROGRAM": "${sourceDir}/cmake/make.bat",
"CMAKE_TRY_COMPILE_TARGET_TYPE": "STATIC_LIBRARY",
"PKG_CONFIG_EXECUTABLE": "${sourceDir}/cmake/nxdk-pkg-config.bat"
"CMAKE_BUILD_TYPE": "Release"
}
},
{
"name": "nxdk-debug (mingw64)",
"displayName": "nxdk Debug (mingw64)",
"description": "Debug build for Original Xbox using the nxdk toolchain",
"displayName": "Debug (mingw64)",
"description": "Debug host build with the internal nxdk Xbox child configure enabled",
"inherits": "nxdk-release (mingw64)",
"binaryDir": "${sourceDir}/cmake-build-nxdk-debug",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "host-tests (mingw64)",
"displayName": "Host Tests (mingw64)",
"description": "Build host-native googletest targets under MSYS2/mingw64",
"generator": "Unix Makefiles",
"cmakeExecutable": "C:/msys64/usr/bin/cmake",
"binaryDir": "${sourceDir}/cmake-build-host-tests",
"cacheVariables": {
"BUILD_DOCS": "OFF",
"BUILD_TESTS": "ON",
"CMAKE_BUILD_TYPE": "Debug"
}
}
],
"buildPresets": [
Expand All @@ -62,22 +44,6 @@
{
"name": "nxdk-debug (mingw64)",
"configurePreset": "nxdk-debug (mingw64)"
},
{
"name": "host-tests (mingw64)",
"configurePreset": "host-tests (mingw64)",
"targets": [
"test_moonlight"
]
}
],
"testPresets": [
{
"name": "host-tests (mingw64)",
"configurePreset": "host-tests (mingw64)",
"output": {
"outputOnFailure": true
}
}
]
}
Loading
Loading