Skip to content

Commit

Permalink
build: optionally static link boost
Browse files Browse the repository at this point in the history
  • Loading branch information
ReenigneArcher committed Jun 3, 2024
1 parent 9afb1ae commit c8b8adf
Show file tree
Hide file tree
Showing 25 changed files with 114 additions and 91 deletions.
4 changes: 0 additions & 4 deletions .codeql-prebuild-cpp-Linux.sh
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,6 @@ sudo apt-get install -y \
g++-10 \
libayatana-appindicator3-dev \
libavdevice-dev \
libboost-filesystem-dev \
libboost-locale-dev \
libboost-log-dev \
libboost-program-options-dev \
libcap-dev \
libcurl4-openssl-dev \
libdrm-dev \
Expand Down
1 change: 0 additions & 1 deletion .codeql-prebuild-cpp-Windows.sh
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ pacman -Syu --noconfirm --ignore=mingw-w64-ucrt-x86_64-curl \
gcc \
git \
make \
mingw-w64-ucrt-x86_64-boost \
mingw-w64-ucrt-x86_64-cmake \
mingw-w64-ucrt-x86_64-cppwinrt \
mingw-w64-ucrt-x86_64-graphviz \
Expand Down
1 change: 0 additions & 1 deletion .codeql-prebuild-cpp-macOS.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ set -e

# install dependencies
brew install \
boost \
cmake \
miniupnpc \
node \
Expand Down
5 changes: 0 additions & 5 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -252,10 +252,6 @@ jobs:
g++-10 \
libayatana-appindicator3-dev \
libavdevice-dev \
libboost-filesystem-dev \
libboost-locale-dev \
libboost-log-dev \
libboost-program-options-dev \
libcap-dev \
libcurl4-openssl-dev \
libdrm-dev \
Expand Down Expand Up @@ -951,7 +947,6 @@ jobs:
pacman -Syu --noconfirm --ignore=mingw-w64-ucrt-x86_64-curl \
doxygen \
git \
mingw-w64-ucrt-x86_64-boost \
mingw-w64-ucrt-x86_64-cmake \
mingw-w64-ucrt-x86_64-cppwinrt \
mingw-w64-ucrt-x86_64-graphviz \
Expand Down
12 changes: 11 additions & 1 deletion cmake/compile_definitions/common.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -125,10 +125,20 @@ include_directories(
"${CMAKE_SOURCE_DIR}/third-party/moonlight-common-c/enet/include"
"${CMAKE_SOURCE_DIR}/third-party/nanors"
"${CMAKE_SOURCE_DIR}/third-party/nanors/deps/obl"
${Boost_INCLUDE_DIRS}
${FFMPEG_INCLUDE_DIRS}
${PLATFORM_INCLUDE_DIRS}
)

if(BOOST_USE_STATIC)
list(APPEND PLATFORM_LIBRARIES
Boost::filesystem
Boost::locale
Boost::log
Boost::program_options)
else()
list(APPEND PLATFORM_LIBRARIES Boost::dynamic_linking)
endif()

list(APPEND SUNSHINE_EXTERNAL_LIBRARIES
${MINIUPNP_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT}
Expand Down
1 change: 0 additions & 1 deletion cmake/compile_definitions/linux.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,6 @@ list(APPEND PLATFORM_TARGET_FILES
"${CMAKE_SOURCE_DIR}/third-party/glad/include/glad/egl.h")

list(APPEND PLATFORM_LIBRARIES
Boost::dynamic_linking
dl
pulse
pulse-simple)
Expand Down
3 changes: 0 additions & 3 deletions cmake/compile_definitions/macos.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,6 @@ list(APPEND SUNSHINE_EXTERNAL_LIBRARIES
${FOUNDATION_LIBRARY}
${VIDEO_TOOLBOX_LIBRARY})

set(PLATFORM_INCLUDE_DIRS
${Boost_INCLUDE_DIR})

set(APPLE_PLIST_FILE "${SUNSHINE_SOURCE_ASSETS_DIR}/macos/assets/Info.plist")

# todo - tray is not working on macos
Expand Down
58 changes: 58 additions & 0 deletions cmake/dependencies/Boost_Sunshine.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
#
# Loads the boost library giving the priority to the system package first, with a fallback to FetchContent.
#
include_guard(GLOBAL)

set(BOOST_VERSION 1.85)
set(BOOST_COMPONENTS
filesystem
locale
log
program_options
system) # system is not used by Sunshine, but by Simple-Web-Server, added here for convenience

find_package(Boost ${BOOST_VERSION} COMPONENTS ${BOOST_COMPONENTS})
if(NOT Boost_FOUND)
message(STATUS "Boost v${BOOST_VERSION}.x package not found in the system. Falling back to FetchContent.")
include(FetchContent)

# Avoid warning about DOWNLOAD_EXTRACT_TIMESTAMP in CMake 3.24:
if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0")
cmake_policy(SET CMP0135 NEW)
endif()

# more components required for compiling boost targets
list(APPEND BOOST_COMPONENTS
asio
crc
format
process
property_tree)

# Limit boost to the required libraries only
set(BOOST_INCLUDE_LIBRARIES
${BOOST_COMPONENTS})
FetchContent_Declare(
Boost
URL https://github.com/boostorg/boost/releases/download/boost-1.85.0/boost-1.85.0-cmake.tar.xz
URL_HASH MD5=BADEA970931766604D4D5F8F4090B176
OVERRIDE_FIND_PACKAGE # requires CMake 3.24+
)
FetchContent_MakeAvailable(Boost)

# set(Boost_INCLUDE_DIRS "$<BUILD_INTERFACE:${Boost_SOURCE_DIR}/libs/headers/include>;$<INSTALL_INTERFACE:include/boost-1_85>")
set(Boost_INCLUDE_DIRS "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/_deps/boost-src/libs/headers/include>;$<INSTALL_INTERFACE:include/boost-1_85>")
set(Boost_LIBRARIES "")
foreach(component ${BOOST_COMPONENTS})
list(APPEND Boost_LIBRARIES "Boost::${component}")
endforeach()
set(Boost_LIBRARIES ${Boost_LIBRARIES})

message(STATUS "Boost include dirs: ${Boost_INCLUDE_DIRS}")
message(STATUS "Boost libraries: ${Boost_LIBRARIES}")

if(WIN32)
# Windows build is failing to create .h file in this directory
file(MAKE_DIRECTORY ${Boost_BINARY_DIR}/libs/log/src/windows)
endif()
endif()
8 changes: 7 additions & 1 deletion cmake/dependencies/common.cmake
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
# load common dependencies
# this file will also load platform specific dependencies

# boost, this should be before Simple-Web-Server as it also depends on boost
if(BOOST_USE_STATIC)
set(Boost_USE_STATIC_LIBS ON) # cmake-lint: disable=C0103
endif()
include(dependencies/Boost_Sunshine)

# submodules
# moonlight common library
set(ENET_NO_INSTALL ON CACHE BOOL "Don't install any libraries build for enet")
set(ENET_NO_INSTALL ON CACHE BOOL "Don't install any libraries built for enet")
add_subdirectory("${CMAKE_SOURCE_DIR}/third-party/moonlight-common-c/enet")

# web server
Expand Down
2 changes: 0 additions & 2 deletions cmake/dependencies/unix.cmake
Original file line number Diff line number Diff line change
@@ -1,4 +1,2 @@
# unix specific dependencies
# put anything here that applies to both linux and macos

find_package(Boost COMPONENTS locale log filesystem program_options REQUIRED)
4 changes: 1 addition & 3 deletions cmake/dependencies/windows.cmake
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
# windows specific dependencies

set(Boost_USE_STATIC_LIBS ON) # cmake-lint: disable=C0103
find_package(Boost 1.71.0 COMPONENTS locale log filesystem program_options REQUIRED)

# nlohmann_json
# TODO: should we use boost json instead?
pkg_check_modules(NLOHMANN_JSON nlohmann_json REQUIRED IMPORTED_TARGET)
23 changes: 15 additions & 8 deletions cmake/packaging/linux.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,6 @@ set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${SUNSHINE_SOURCE_ASSETS_DIR}/linux/misc
set(CPACK_DEB_COMPONENT_INSTALL ON)
set(CPACK_DEBIAN_PACKAGE_DEPENDS "\
${CPACK_DEB_PLATFORM_PACKAGE_DEPENDS} \
libboost-filesystem${Boost_VERSION}, \
libboost-locale${Boost_VERSION}, \
libboost-log${Boost_VERSION}, \
libboost-program-options${Boost_VERSION}, \
libcap2, \
libcurl4, \
libdrm2, \
Expand All @@ -48,10 +44,6 @@ set(CPACK_DEBIAN_PACKAGE_DEPENDS "\
openssl | libssl3")
set(CPACK_RPM_PACKAGE_REQUIRES "\
${CPACK_RPM_PLATFORM_PACKAGE_REQUIRES} \
boost-filesystem >= ${Boost_VERSION}, \
boost-locale >= ${Boost_VERSION}, \
boost-log >= ${Boost_VERSION}, \
boost-program-options >= ${Boost_VERSION}, \
libcap >= 2.22, \
libcurl >= 7.0, \
libdrm >= 2.4.97, \
Expand All @@ -66,6 +58,21 @@ set(CPACK_RPM_PACKAGE_REQUIRES "\
openssl >= 3.0.2, \
pulseaudio-libs >= 10.0")

if(NOT BOOST_USE_STATIC)
set(CPACK_DEBIAN_PACKAGE_DEPENDS "\
${CPACK_DEBIAN_PACKAGE_DEPENDS}, \
libboost-filesystem${Boost_VERSION}, \
libboost-locale${Boost_VERSION}, \
libboost-log${Boost_VERSION}, \
libboost-program-options${Boost_VERSION}")
set(CPACK_RPM_PACKAGE_REQUIRES "\
${CPACK_RPM_PACKAGE_REQUIRES}, \
boost-filesystem >= ${Boost_VERSION}, \
boost-locale >= ${Boost_VERSION}, \
boost-log >= ${Boost_VERSION}, \
boost-program-options >= ${Boost_VERSION}")
endif()

# This should automatically figure out dependencies, doesn't work with the current config
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS OFF)

Expand Down
4 changes: 3 additions & 1 deletion cmake/prep/options.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ option(SUNSHINE_REQUIRE_TRAY "Require system tray icon. Fail the build if tray r

option(SUNSHINE_SYSTEM_WAYLAND_PROTOCOLS "Use system installation of wayland-protocols rather than the submodule." OFF)

option(BOOST_USE_STATIC "Use static boost libraries." ON)

option(CUDA_INHERIT_COMPILE_OPTIONS
"When building CUDA code, inherit compile options from the the main project. You may want to disable this if
your IDE throws errors about unknown flags after running cmake." ON)
Expand All @@ -23,7 +25,7 @@ if(UNIX)
# technically, the homebrew build could be on linux as well... no idea if it would actually work
option(SUNSHINE_BUILD_HOMEBREW
"Enable a Homebrew build." OFF)
endif ()
endif()

if(APPLE)
option(SUNSHINE_CONFIGURE_HOMEBREW
Expand Down
4 changes: 0 additions & 4 deletions docker/clion-toolchain.dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,6 @@ apt-get install -y --no-install-recommends \
git \
graphviz \
libayatana-appindicator3-dev \
libboost-filesystem-dev=1.74.* \
libboost-locale-dev=1.74.* \
libboost-log-dev=1.74.* \
libboost-program-options-dev=1.74.* \
libcap-dev \
libcurl4-openssl-dev \
libdrm-dev \
Expand Down
4 changes: 0 additions & 4 deletions docker/debian-bookworm.dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,6 @@ apt-get install -y --no-install-recommends \
git \
graphviz \
libayatana-appindicator3-dev \
libboost-filesystem-dev=1.74.* \
libboost-locale-dev=1.74.* \
libboost-log-dev=1.74.* \
libboost-program-options-dev=1.74.* \
libcap-dev \
libcurl4-openssl-dev \
libdrm-dev \
Expand Down
4 changes: 0 additions & 4 deletions docker/debian-bullseye.dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,6 @@ apt-get install -y --no-install-recommends \
git \
graphviz \
libayatana-appindicator3-dev \
libboost-filesystem-dev=1.74.* \
libboost-locale-dev=1.74.* \
libboost-log-dev=1.74.* \
libboost-program-options-dev=1.74.* \
libcap-dev \
libcurl4-openssl-dev \
libdrm-dev \
Expand Down
1 change: 0 additions & 1 deletion docker/fedora-39.dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ set -e
dnf -y update
dnf -y group install "Development Tools"
dnf -y install \
boost-devel-1.81.0* \
cmake-3.27.* \
doxygen \
gcc-13.2.* \
Expand Down
1 change: 0 additions & 1 deletion docker/fedora-40.dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ set -e
dnf -y update
dnf -y group install "Development Tools"
dnf -y install \
boost-devel-1.83.0* \
cmake-3.28.* \
doxygen \
gcc-14.1.* \
Expand Down
4 changes: 0 additions & 4 deletions docker/ubuntu-22.04.dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,6 @@ apt-get install -y --no-install-recommends \
git \
graphviz \
libayatana-appindicator3-dev \
libboost-filesystem-dev=1.74.* \
libboost-locale-dev=1.74.* \
libboost-log-dev=1.74.* \
libboost-program-options-dev=1.74.* \
libcap-dev \
libcurl4-openssl-dev \
libdrm-dev \
Expand Down
4 changes: 0 additions & 4 deletions docker/ubuntu-24.04.dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,6 @@ apt-get install -y --no-install-recommends \
git \
graphviz \
libayatana-appindicator3-dev \
libboost-filesystem-dev=1.83.* \
libboost-locale-dev=1.83.* \
libboost-log-dev=1.83.* \
libboost-program-options-dev=1.83.* \
libcap-dev \
libcurl4-openssl-dev \
libdrm-dev \
Expand Down
13 changes: 0 additions & 13 deletions docs/source/building/linux.rst
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,6 @@ Install Requirements
build-essential \
cmake \
libayatana-appindicator3-dev \
libboost-filesystem-dev \
libboost-locale-dev \
libboost-log-dev \
libboost-program-options-dev \
libcap-dev \ # KMS
libcurl4-openssl-dev \
libdrm-dev \ # KMS
Expand Down Expand Up @@ -55,7 +51,6 @@ Install Requirements
sudo dnf update && \
sudo dnf group install "Development Tools" && \
sudo dnf install \
boost-devel \
cmake \
gcc \
gcc-c++ \
Expand Down Expand Up @@ -97,10 +92,6 @@ Install Requirements
build-essential \
cmake \
libappindicator3-dev \
libboost-filesystem-dev \
libboost-locale-dev \
libboost-log-dev \
libboost-program-options-dev \
libcap-dev \ # KMS
libcurl4-openssl-dev \
libdrm-dev \ # KMS
Expand Down Expand Up @@ -138,10 +129,6 @@ Install Requirements
gcc-11 \
g++-11 \
libappindicator3-dev \
libboost-filesystem-dev \
libboost-locale-dev \
libboost-log-dev \
libboost-program-options-dev \
libcap-dev \ # KMS
libcurl4-openssl-dev \
libdrm-dev \ # KMS
Expand Down
1 change: 0 additions & 1 deletion docs/source/building/windows.rst
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ Install dependencies:
pacman -S \
doxygen \
git \
mingw-w64-ucrt-x86_64-boost \
mingw-w64-ucrt-x86_64-cmake \
mingw-w64-ucrt-x86_64-cppwinrt \
mingw-w64-ucrt-x86_64-curl \
Expand Down
4 changes: 1 addition & 3 deletions packaging/linux/Arch/PKGBUILD
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ install=sunshine.install
_gcc_version=13

depends=('avahi'
'boost-libs'
'curl'
'libayatana-appindicator'
'libcap'
Expand All @@ -37,8 +36,7 @@ depends=('avahi'
'udev')
checkdepends=('doxygen'
'graphviz')
makedepends=('boost'
'cmake'
makedepends=('cmake'
"gcc${_gcc_version}"
'git'
'make'
Expand Down
Loading

0 comments on commit c8b8adf

Please sign in to comment.