From f29ccc94e76b7c36b7a26feddc0287854986ba71 Mon Sep 17 00:00:00 2001 From: Ciprian Date: Wed, 8 Dec 2021 22:42:41 -0800 Subject: [PATCH] + Set up a CI for Windows builds. --- .../workflows/build-windows_fmod_steam.yml | 69 +++++++++++++++++++ CMakeLists.txt | 30 ++++++++ cmake/Modules/FindFMOD.cmake | 8 +++ cmake/Modules/FindPNG.cmake | 42 ++++++++--- cmake/Modules/FindPhysFS.cmake | 2 + cmake/Modules/FindRapidJson.cmake | 3 + cmake/Modules/FindSDL2.cmake | 10 ++- cmake/Modules/FindSDL2_image.cmake | 4 +- cmake/Modules/FindSDL2_net.cmake | 6 +- cmake/Modules/FindSDL2_ttf.cmake | 2 + cmake/Modules/FindSTEAMWORKS.cmake | 4 ++ cmake/Modules/FindZLIB.cmake | 55 +++++++++++++++ 12 files changed, 219 insertions(+), 16 deletions(-) create mode 100644 .github/workflows/build-windows_fmod_steam.yml create mode 100644 cmake/Modules/FindZLIB.cmake diff --git a/.github/workflows/build-windows_fmod_steam.yml b/.github/workflows/build-windows_fmod_steam.yml new file mode 100644 index 000000000..f974e193d --- /dev/null +++ b/.github/workflows/build-windows_fmod_steam.yml @@ -0,0 +1,69 @@ +# This is a basic workflow to help you get started with Actions + +name: Windows-CI_fmod_steam + +# Controls when the action will run. Triggers the workflow on push or pull request +# events but only for the master branch +on: + push: + branches: [ master, develop ] + pull_request: + branches: [ master, develop ] + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: windows-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v2 + + # Install the dependencies + - name: Add MSBuild to PATH + uses: microsoft/setup-msbuild@v1.0.2 + + # Fetch the dependencies + - name: Fetch encrypted dependencies zip + env: + DEPENDENCIES_ZIP_KEY: ${{ secrets.DEPENDENCIES_ZIP_KEY }} + DEPENDENCIES_ZIP_IV: ${{ secrets.DEPENDENCIES_ZIP_IV }} + run: | + echo "Downloading dependencies!" + curl -L https://github.com/TurningWheel/Barony/releases/download/ci_deps_1.2/dependencies_windows_x64.zip.enc --output dependencies_windows_x64.zip.enc + openssl aes-256-ctr -d -in dependencies_windows_x64.zip.enc -out dependencies_windows_x64.zip -K $DEPENDENCIES_ZIP_KEY -iv $DEPENDENCIES_ZIP_IV + unzip dependencies_windows_x64.zip -d dependencies + shell: bash + + # Actually does the build... + - name: Generate Visual Studio project via CMake + run: | + echo "Generating Visual Studio project" + mkdir build + cd build + cmake .. -DSTEAMWORKS_ENABLED=1 -DEOS_ENABLED=0 -DFMOD_ENABLED=ON -DBARONY_WIN32_LIBRARIES="$(pwd)/../dependencies/gamelibs/" + shell: bash + + - name: Compile + # Add additional options to the MSBuild command line here (like platform or verbosity level). + # See https://docs.microsoft.com/visualstudio/msbuild/msbuild-command-line-reference + run: msbuild /m build/Barony.sln /property:Configuration=Release + + - name: Upload Game Build Artifact + uses: actions/upload-artifact@v2 + with: + # Artifact name + name: barony.exe # optional + # A file, directory or wildcard pattern that describes what to upload + path: build/Release/barony.exe + + - name: Upload Editor Build Artifact + uses: actions/upload-artifact@v2 + with: + # Artifact name + name: editor.exe # optional + # A file, directory or wildcard pattern that describes what to upload + path: build/Release/editor.exe diff --git a/CMakeLists.txt b/CMakeLists.txt index 7edc78369..fcd9bc505 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -89,6 +89,36 @@ endif() if (NOT "${BARONY_WIN32_LIBRARIES}" STREQUAL "") list(APPEND CMAKE_PREFIX_PATH $ENV{BARONY_WIN32_LIBRARIES}) + + # If not specified, set library search paths to look here. + if ("${SDL2DIR}" STREQUAL "") + set (SDL2DIR "${BARONY_WIN32_LIBRARIES}") + message("SETTING SDL2 DIRECTORY! SET to: ${SDL2DIR}") + endif() + if ("${PHYSFSDIR}" STREQUAL "") + set (PHYSFSDIR "${BARONY_WIN32_LIBRARIES}") + message("SETTING PHYSFSDIR DIRECTORY! SET to: ${PHYSFSDIR}") + endif() + if ("${RAPID_JSONROOT}" STREQUAL "" AND "${RAPID_JSON_ROOT}" STREQUAL "" AND "${RAPID_JSON_DIR}" STREQUAL "") + set (RAPID_JSON_DIR "${BARONY_WIN32_LIBRARIES}") + message("SETTING RAPID_JSON_DIR DIRECTORY! SET to: ${RAPID_JSON_DIR}") + endif() + if ("${FMOD_DIR}" STREQUAL "") + set (FMOD_DIR "${BARONY_WIN32_LIBRARIES}") + message("SETTING FMOD_DIR DIRECTORY! SET to: ${FMOD_DIR}") + endif() + if ("${ZLIB_DIR}" STREQUAL "") + set (ZLIB_DIR "${BARONY_WIN32_LIBRARIES}") + message("SETTING ZLIB_DIR DIRECTORY! SET to: ${ZLIB_DIR}") + endif() + if ("${PNG_DIR}" STREQUAL "") + set (PNG_DIR "${BARONY_WIN32_LIBRARIES}") + message("SETTING PNG_DIR DIRECTORY! SET to: ${PNG_DIR}") + endif() + if ("${STEAMWORKS_ROOT}" STREQUAL "") + set (STEAMWORKS_ROOT "${BARONY_WIN32_LIBRARIES}") + message("SETTING STEAMWORKS_ROOT DIRECTORY! SET to: ${STEAMWORKS_ROOT}") + endif() endif(NOT "${BARONY_WIN32_LIBRARIES}" STREQUAL "") if (DEFINED ENV{BARONY_DATADIR}) # Used by visual studio to set the current working directory when debugging the barony executables. diff --git a/cmake/Modules/FindFMOD.cmake b/cmake/Modules/FindFMOD.cmake index cfa9a6265..9643d62da 100644 --- a/cmake/Modules/FindFMOD.cmake +++ b/cmake/Modules/FindFMOD.cmake @@ -15,6 +15,10 @@ FIND_PATH(FMOD_INCLUDE_DIR fmod.hpp PATHS $ENV{FMOD_DIR}/api/core/inc/ + ${FMOD_DIR}/api/core/inc/ + IF (WIN32) + ${FMOD_DIR}/include/ + ENDIF (WIN32) /usr/local/include/ /usr/local/include/fmodstudio/ /usr/include/ @@ -32,7 +36,11 @@ FIND_LIBRARY(FMOD_LIBRARY $ENV{FMOD_DIR}/api/core/lib/ ELSE (APPLE) $ENV{FMOD_DIR}/api/core/lib/x86_64/ + ${FMOD_DIR}/api/core/lib/x86_64/ ENDIF (APPLE) + IF (WIN32) + ${FMOD_DIR}/lib/ + ENDIF (WIN32) /usr/local/lib64 /usr/local/lib /usr/lib64 diff --git a/cmake/Modules/FindPNG.cmake b/cmake/Modules/FindPNG.cmake index 260181fbc..00603719f 100644 --- a/cmake/Modules/FindPNG.cmake +++ b/cmake/Modules/FindPNG.cmake @@ -12,16 +12,40 @@ INCLUDE(FindZLIB) IF(ZLIB_FOUND) - FIND_PATH(PNG_PNG_INCLUDE_DIR png.h - /usr/local/include/libpng # OpenBSD - ) + + find_path(PNG_INCLUDE_DIR zlib.h + HINTS + ENV PNG_DIR + ${PNG_DIR} + PATH_SUFFIXES include + PATHS + ~/Library/Frameworks + /Library/Frameworks + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave + /opt + ) SET(PNG_NAMES ${PNG_NAMES} png libpng libpng16) - FIND_LIBRARY(PNG_LIBRARY NAMES ${PNG_NAMES} ) + find_library(PNG_LIBRARY + NAMES ${PNG_NAMES} + HINTS + ENV PNG_DIR + ${PNG_DIR} + PATH_SUFFIXES lib + PATHS + ~/Library/Frameworks + /Library/Frameworks + /sw + /opt/local + /opt/csw + /opt + ) - IF (PNG_LIBRARY AND PNG_PNG_INCLUDE_DIR) + IF (PNG_LIBRARY AND PNG_INCLUDE_DIR) # png.h includes zlib.h. Sigh. - SET(PNG_INCLUDE_DIR ${PNG_PNG_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR} ) + SET(PNG_INCLUDE_DIR ${PNG_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR} ) SET(PNG_LIBRARIES ${PNG_LIBRARY} ${ZLIB_LIBRARY}) IF (CYGWIN) @@ -32,13 +56,13 @@ IF(ZLIB_FOUND) ENDIF(BUILD_SHARED_LIBS) ENDIF (CYGWIN) - ENDIF (PNG_LIBRARY AND PNG_PNG_INCLUDE_DIR) + ENDIF (PNG_LIBRARY AND PNG_INCLUDE_DIR) ENDIF(ZLIB_FOUND) # handle the QUIETLY and REQUIRED arguments and set PNG_FOUND to TRUE if # all listed variables are TRUE INCLUDE(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(PNG DEFAULT_MSG PNG_LIBRARY PNG_PNG_INCLUDE_DIR) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(PNG DEFAULT_MSG PNG_LIBRARY PNG_INCLUDE_DIR) -MARK_AS_ADVANCED(PNG_PNG_INCLUDE_DIR PNG_LIBRARY ) +MARK_AS_ADVANCED(PNG_INCLUDE_DIR PNG_LIBRARY ) diff --git a/cmake/Modules/FindPhysFS.cmake b/cmake/Modules/FindPhysFS.cmake index 45c7524bf..561972aaf 100644 --- a/cmake/Modules/FindPhysFS.cmake +++ b/cmake/Modules/FindPhysFS.cmake @@ -19,6 +19,7 @@ find_path(PHYSFS_INCLUDE_DIR physfs.h HINTS ENV PHYSFSDIR + ${PHYSFSDIR} PATH_SUFFIXES include/physfs include PATHS ~/Library/Frameworks @@ -33,6 +34,7 @@ find_library(PHYSFS_LIBRARY NAMES physfs HINTS ENV PHYSFSDIR + ${PHYSFSDIR} PATH_SUFFIXES lib PATHS ~/Library/Frameworks diff --git a/cmake/Modules/FindRapidJson.cmake b/cmake/Modules/FindRapidJson.cmake index c187cc536..c8b1a02e3 100644 --- a/cmake/Modules/FindRapidJson.cmake +++ b/cmake/Modules/FindRapidJson.cmake @@ -7,8 +7,11 @@ if (NOT RAPID_JSON_INCLUDE_DIR OR NOT RAPID_JSON_LIBRARIES) set(LIB_SEARCH_PATHS $ENV{RAPID_JSONROOT}/ + ${RAPID_JSONROOT}/ $ENV{RAPID_JSON_ROOT}/ + ${RAPID_JSON_ROOT}/ $ENV{RAPID_JSON_DIR}/ + ${RAPID_JSON_DIR}/ ~/Library/Frameworks /Library/Frameworks /usr/lib diff --git a/cmake/Modules/FindSDL2.cmake b/cmake/Modules/FindSDL2.cmake index 7e052e3e4..64891dbf7 100644 --- a/cmake/Modules/FindSDL2.cmake +++ b/cmake/Modules/FindSDL2.cmake @@ -67,6 +67,7 @@ SET(SDL2_SEARCH_PATHS ${SDL2_SEARCH_PATHS} + ${SDL2DIR} ~/Library/Frameworks /Library/Frameworks /usr/local @@ -79,15 +80,18 @@ SET(SDL2_SEARCH_PATHS FIND_PATH(SDL2_INCLUDE_DIR SDL.h HINTS - $ENV{SDL2DIR} + ${SDL2DIR} PATH_SUFFIXES include/SDL2 include SDL2 PATHS ${SDL2_SEARCH_PATHS} ) +message("searchdir for sdl SET to: ${SDL2DIR}") +message("search paths for sdl SET to: ${SDL2_SEARCH_PATHS}") + FIND_LIBRARY(SDL2_LIBRARY_TEMP NAMES SDL2 HINTS - $ENV{SDL2DIR} + ${SDL2DIR} PATH_SUFFIXES lib64 lib libs64 libs libs/Win32 libs/Win64 PATHS ${SDL2_SEARCH_PATHS} ) @@ -101,7 +105,7 @@ IF(NOT SDL2_BUILDING_LIBRARY) FIND_LIBRARY(SDL2MAIN_LIBRARY NAMES SDL2main HINTS - $ENV{SDL2DIR} + ${SDL2DIR} PATH_SUFFIXES lib64 lib PATHS ${SDL2_SEARCH_PATHS} ) diff --git a/cmake/Modules/FindSDL2_image.cmake b/cmake/Modules/FindSDL2_image.cmake index b5696c4b9..6eecd7f8c 100644 --- a/cmake/Modules/FindSDL2_image.cmake +++ b/cmake/Modules/FindSDL2_image.cmake @@ -45,7 +45,7 @@ find_path(SDL2_IMAGE_INCLUDE_DIR SDL_image.h HINTS ENV SDL2IMAGEDIR - ENV SDL2DIR + ${SDL2DIR} PATH_SUFFIXES SDL2 # path suffixes to search inside ENV{SDLDIR} include/SDL2 include @@ -61,7 +61,7 @@ find_library(SDL2_IMAGE_LIBRARY NAMES SDL2_image HINTS ENV SDL2IMAGEDIR - ENV SDL2DIR + ${SDL2DIR} PATH_SUFFIXES lib ${VC_LIB_PATH_SUFFIX} ) diff --git a/cmake/Modules/FindSDL2_net.cmake b/cmake/Modules/FindSDL2_net.cmake index 54dfe86df..bb7b3779a 100644 --- a/cmake/Modules/FindSDL2_net.cmake +++ b/cmake/Modules/FindSDL2_net.cmake @@ -34,7 +34,8 @@ find_path(SDL2_NET_INCLUDE_DIR HINTS ${PC_SDL2_NET_INCLUDEDIR} ${PC_SDL2_NET_INCLUDE_DIRS} - PATH_SUFFIXES SDL2 + ${SDL2DIR} + PATH_SUFFIXES SDL2 include ) find_library(SDL2_NET_LIBRARY @@ -42,7 +43,8 @@ find_library(SDL2_NET_LIBRARY HINTS ${PC_SDL2_NET_LIBDIR} ${PC_SDL2_NET_LIBRARY_DIRS} - PATH_SUFFIXES x64 x86 + ${SDL2DIR} + PATH_SUFFIXES lib x64 x86 ) if(SDL2_NET_INCLUDE_DIR AND EXISTS "${SDL2_NET_INCLUDE_DIR}/SDL_net.h") diff --git a/cmake/Modules/FindSDL2_ttf.cmake b/cmake/Modules/FindSDL2_ttf.cmake index c3be4a969..0e80ac653 100644 --- a/cmake/Modules/FindSDL2_ttf.cmake +++ b/cmake/Modules/FindSDL2_ttf.cmake @@ -33,6 +33,7 @@ find_path(SDL2_TTF_INCLUDE_DIR SDL_ttf.h HINTS ENV SDLTTFDIR ENV SDLDIR + ${SDL2DIR} PATH_SUFFIXES include/SDL2 include SDL2 ) @@ -45,6 +46,7 @@ find_library(SDL2_TTF_LIBRARY HINTS ENV SDLTTFDIR ENV SDLDIR + ${SDL2DIR} PATH_SUFFIXES lib ) diff --git a/cmake/Modules/FindSTEAMWORKS.cmake b/cmake/Modules/FindSTEAMWORKS.cmake index a06540fcc..e835cb28b 100644 --- a/cmake/Modules/FindSTEAMWORKS.cmake +++ b/cmake/Modules/FindSTEAMWORKS.cmake @@ -15,6 +15,7 @@ if (NOT STEAMWORKS_INCLUDE_DIR OR NOT STEAMWORKS_LIBRARIES) /usr/local/lib64 $ENV{STEAMWORKSROOT}/sdk/redistributable_bin/linux64 #I don't like this. TODO: Make it determine 64/32 bit automatically. $ENV{STEAMWORKS_ROOT}/sdk/redistributable_bin/linux64 + ${STEAMWORKS_ROOT} $ENV{STEAMWORKS_DIR}/sdk/redistributable_bin/linux64 #$ENV{STEAMWORKSROOT}/sdk/redistributable_bin/linux32 #$ENV{STEAMWORKS_ROOT}/sdk/redistributable_bin/linux32 @@ -25,6 +26,7 @@ if (NOT STEAMWORKS_INCLUDE_DIR OR NOT STEAMWORKS_LIBRARIES) /usr/local/include $ENV{STEAMWORKSROOT}/sdk/public/ $ENV{STEAMWORKS_ROOT}/sdk/public/ + ${STEAMWORKS_ROOT}/include/ $ENV{STEAMWORKS_DIR}/sdk/public/ DOC "Include path for Steamworks" ) @@ -34,6 +36,7 @@ if (NOT STEAMWORKS_INCLUDE_DIR OR NOT STEAMWORKS_LIBRARIES) FIND_LIBRARY(STEAMWORKS_LIBRARY NAMES steam_api PATHS $ENV{STEAMWORKS_ROOT}/sdk/redistributable_bin + ${STEAMWORKS_ROOT}/lib/ DOC "Steamworks library name" ) MESSAGE("32 bit steam") @@ -41,6 +44,7 @@ if (NOT STEAMWORKS_INCLUDE_DIR OR NOT STEAMWORKS_LIBRARIES) FIND_LIBRARY(STEAMWORKS_LIBRARY NAMES steam_api64 PATHS $ENV{STEAMWORKS_ROOT}/sdk/redistributable_bin/win64 + ${STEAMWORKS_ROOT}/lib/ DOC "Steamworks library name" ) MESSAGE("64 bit steam") diff --git a/cmake/Modules/FindZLIB.cmake b/cmake/Modules/FindZLIB.cmake new file mode 100644 index 000000000..61af712c6 --- /dev/null +++ b/cmake/Modules/FindZLIB.cmake @@ -0,0 +1,55 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#.rst: +# FindZLIB +# ---------- +# +# +# +# Locate ZLIB library This module defines ZLIB_LIBRARY, the name of +# the library to link against ZLIB_FOUND, if false, do not try to link +# to ZLIB ZLIB_INCLUDE_DIR, where to find zlib.h +# +# $ZLIB_DIR is an environment variable that would correspond to the +# ./configure --prefix=$ZLIB_DIR used in building ZLIB. +# +# Created by Eric Wing. + +message ("USING OVERRIDE FINDZLIB!") + +find_path(ZLIB_INCLUDE_DIR zlib.h + HINTS + ENV ZLIB_DIR + ${ZLIB_DIR} + PATH_SUFFIXES include + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave + /opt +) + +find_library(ZLIB_LIBRARY + NAMES zlib libz z + HINTS + ENV ZLIB_DIR + ${ZLIB_DIR} + PATH_SUFFIXES lib + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /sw + /opt/local + /opt/csw + /opt +) + +include(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(ZLIB DEFAULT_MSG ZLIB_LIBRARY ZLIB_INCLUDE_DIR)