From a88215a95be35185cd5fefe120c67bb03a76f4c4 Mon Sep 17 00:00:00 2001 From: rjindael Date: Mon, 17 Jul 2023 23:18:01 -0700 Subject: [PATCH] Linux CI builds --- .github/workflows/build.yml | 67 ++++++++++++++++++++++++-- CMakeLists.txt | 8 ++- Content/linux_plugins.cfg | 2 +- Projects/CMakeLists.txt | 1 + Projects/Client/Player/CMakeLists.txt | 2 + Projects/Client/Player/Source/main.cpp | 5 ++ Projects/Client/Server/CMakeLists.txt | 4 +- Projects/Client/Studio/CMakeLists.txt | 2 + Projects/Client/Studio/Source/main.cpp | 5 ++ 9 files changed, 89 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ed1f8ea..9c2d1d9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,6 +2,63 @@ name: Build on: [ push ] jobs: + linux: + strategy: + matrix: + configuration: [ Release, Debug ] + + name: Linux + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + name: Clone repository + with: + submodules: recursive + + - name: Install required packages + run: apt install -y + git + + clang + cmake + ninja-build + libboost-dev + libogre-1.12-dev + libpugixml-dev + qt6-base-dev + + - name: Generate Ninja build files + run: cmake -G Ninja -B build -D CI -D CMAKE_BUILD_TYPE=${{ matrix.configuration == 'Release' && 'MinSizeRel' || matrix.configuration }} . + + - name: Build (Ninja) + run: ninja -C build + + # ouch - unless and until we start using CMake's install command, these next few steps are a necessary evil + - name: Organize binaries + run: mkdir build/dist && find build -perm /a+x -exec mv {} build/dist \; + + - name: Add OGRE plugins + run: cp -R build/plugins build/dist && cp Content/linux_plugins.cfg build/dist/plugins.cfg + + - name: Add OGRE shaders + run: cp -R build/shaders build/dist + + - name: Add resources + run: cp -R Content/RNR build/dist/content && cp LICENSE build/dist + + - name: Set output variables + id: vars + run: | + echo "configuration=${{ matrix.configuration }}" | awk '{print tolower($0)}' >> $GITHUB_OUTPUT + echo "hash=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT + + - name: Upload + uses: actions/upload-artifact@v3 + with: + name: rnr-${{ steps.vars.outputs.hash }}-linux_x64-${{ steps.vars.outputs.configuration }} + path: build/dist + windows: strategy: matrix: @@ -27,6 +84,8 @@ jobs: with: msystem: ${{ matrix.sys }} install: >- + git + mingw-w64-${{ matrix.env }}-${{ matrix.sys == 'clang64' && 'clang' || 'gcc' }} mingw-w64-${{ matrix.env }}-cmake mingw-w64-${{ matrix.env }}-ninja @@ -36,14 +95,14 @@ jobs: mingw-w64-${{ matrix.env }}-qt6 - name: Generate Ninja build files - run: cmake -G Ninja -B build -DCMAKE_BUILD_TYPE=${{ matrix.configuration == 'Release' && 'MinSizeRel' || matrix.configuration }} . + run: cmake -G Ninja -B build -D CMAKE_BUILD_TYPE=${{ matrix.configuration == 'Release' && 'MinSizeRel' || matrix.configuration }} . - name: Build (Ninja) run: ninja -C build # ouch - unless and until we start using CMake's install command, these next few steps are a necessary evil - name: Organize binaries - run: mkdir build/dist && mv build/*.exe build/dist && cd build/dist && for x in *.exe; do mv $x "RNR.$x"; done + run: mkdir build/dist && mv build/*.exe build/dist - name: Add Qt dependencies run: windeployqt6 build/dist/*.exe @@ -55,7 +114,7 @@ jobs: run: cp Content/win32_plugins.cfg build/dist/plugins.cfg && mkdir build/dist/plugins/ && cat build/dist/plugins.cfg | grep "Plugin=" | sed -e "s/Plugin=//" | xargs -I '{}' cp -v '/${{ matrix.sys }}/bin/{}.dll' build/dist/plugins/ - name: Add OGRE shaders - run: mkdir build/dist/ShaderCache && mkdir build/dist/shaders && cp -R /${{ matrix.sys }}/share/OGRE/Media/Main build/dist/shaders && cp -R /${{ matrix.sys }}/share/OGRE/Media/RTShaderLib build/dist/shaders + run: mkdir build/dist/shaders && cp -R /${{ matrix.sys }}/share/OGRE/Media/Main/* build/dist/shaders && cp -R /${{ matrix.sys }}/share/OGRE/Media/RTShaderLib/* build/dist/shaders - name: Add resources run: cp -R Content/RNR build/dist/content && cp LICENSE build/dist @@ -69,5 +128,5 @@ jobs: - name: Upload uses: actions/upload-artifact@v3 with: - name: rnr-win_x64-${{ steps.vars.outputs.configuration }}-${{ steps.vars.outputs.hash }} + name: rnr-${{ steps.vars.outputs.hash }}-win_x64-${{ steps.vars.outputs.configuration }} path: build/dist \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index d52826e..9525950 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,4 +17,10 @@ find_package(Boost REQUIRED) find_package(OGRE REQUIRED COMPONENTS Bites CONFIG) find_package(pugixml REQUIRED) -add_subdirectory(Projects) \ No newline at end of file +add_subdirectory(Projects) + +if(CI AND UNIX) + file(COPY ${OGRE_MEDIA_DIR}/Main/ DESTINATION ${CMAKE_BINARY_DIR}/shaders) + file(COPY ${OGRE_MEDIA_DIR}/RTShaderLib/ DESTINATION ${CMAKE_BINARY_DIR}/shaders) + file(COPY ${OGRE_PLUGIN_DIR}/ DESTINATION ${CMAKE_BINARY_DIR}/plugins) +endif() \ No newline at end of file diff --git a/Content/linux_plugins.cfg b/Content/linux_plugins.cfg index 8bb32f8..f47303d 100644 --- a/Content/linux_plugins.cfg +++ b/Content/linux_plugins.cfg @@ -1,4 +1,4 @@ -PluginFolder=/usr/lib/OGRE +PluginFolder=plugins Plugin=RenderSystem_GL Plugin=RenderSystem_GL3Plus diff --git a/Projects/CMakeLists.txt b/Projects/CMakeLists.txt index 05096f1..2855485 100644 --- a/Projects/CMakeLists.txt +++ b/Projects/CMakeLists.txt @@ -6,6 +6,7 @@ add_subdirectory(${DEPENDENCIES_DIR}/Luau ${CMAKE_BINARY_DIR}/Dependencies/Luau) # RNR add_link_options(-static) +link_libraries(-static-libgcc -static-libstdc++) add_subdirectory(Engine) add_subdirectory(Client) \ No newline at end of file diff --git a/Projects/Client/Player/CMakeLists.txt b/Projects/Client/Player/CMakeLists.txt index 798c405..2639461 100644 --- a/Projects/Client/Player/CMakeLists.txt +++ b/Projects/Client/Player/CMakeLists.txt @@ -22,6 +22,8 @@ target_include_directories(Player PRIVATE Header) target_link_libraries(Player PRIVATE Common Engine) set_target_properties(Player PROPERTIES + OUTPUT_NAME "RNR.Player" + WIN32_EXECUTABLE ON MACOSX_BUNDLE ON ) \ No newline at end of file diff --git a/Projects/Client/Player/Source/main.cpp b/Projects/Client/Player/Source/main.cpp index 641001a..61650fe 100644 --- a/Projects/Client/Player/Source/main.cpp +++ b/Projects/Client/Player/Source/main.cpp @@ -1,4 +1,5 @@ #include +#include #include @@ -6,6 +7,10 @@ int main(int argc, char** argv) { + if (!fs::is_directory("ShaderCache") || !fs::exists("ShaderCache")) + fs::create_directory("ShaderCache"); + } + QApplication app(argc, argv); MainWindow window = MainWindow(); diff --git a/Projects/Client/Server/CMakeLists.txt b/Projects/Client/Server/CMakeLists.txt index 9b42ddc..9c72693 100644 --- a/Projects/Client/Server/CMakeLists.txt +++ b/Projects/Client/Server/CMakeLists.txt @@ -10,4 +10,6 @@ endif() add_executable(Server ${SOURCE} ${HEADER}) target_include_directories(Server PRIVATE Header) -target_link_libraries(Server PRIVATE Engine) \ No newline at end of file +target_link_libraries(Server PRIVATE Engine) + +set_target_properties(Server PROPERTIES OUTPUT_NAME "RNR.Server") \ No newline at end of file diff --git a/Projects/Client/Studio/CMakeLists.txt b/Projects/Client/Studio/CMakeLists.txt index d484964..7ca8ff9 100644 --- a/Projects/Client/Studio/CMakeLists.txt +++ b/Projects/Client/Studio/CMakeLists.txt @@ -24,6 +24,8 @@ target_include_directories(Studio PRIVATE Header) target_link_libraries(Studio PRIVATE Common Engine) set_target_properties(Studio PROPERTIES + OUTPUT_NAME "RNR.Studio" + WIN32_EXECUTABLE ON MACOSX_BUNDLE ON ) \ No newline at end of file diff --git a/Projects/Client/Studio/Source/main.cpp b/Projects/Client/Studio/Source/main.cpp index 43b1983..2ca4372 100644 --- a/Projects/Client/Studio/Source/main.cpp +++ b/Projects/Client/Studio/Source/main.cpp @@ -1,4 +1,5 @@ #include +#include #include #include @@ -9,6 +10,10 @@ int main(int argc, char** argv) { + if (!fs::is_directory("ShaderCache") || !fs::exists("ShaderCache")) + fs::create_directory("ShaderCache"); + } + QSurfaceFormat format; format.setSwapBehavior(QSurfaceFormat::DoubleBuffer);