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 1, 2024
1 parent 9afb1ae commit b1c7fef
Show file tree
Hide file tree
Showing 25 changed files with 91 additions and 88 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
10 changes: 10 additions & 0 deletions cmake/compile_definitions/common.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,16 @@ include_directories(
${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
33 changes: 33 additions & 0 deletions cmake/dependencies/Boost_Sunshine.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#
# 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 used by simple-web-server, but 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()

# 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
)
FetchContent_MakeAvailable(Boost)
endif()
10 changes: 10 additions & 0 deletions cmake/dependencies/common.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,16 @@ find_package(PkgConfig REQUIRED)
find_package(Threads REQUIRED)
pkg_check_modules(CURL REQUIRED libcurl)

if(BOOST_USE_STATIC)
set(Boost_USE_STATIC_LIBS ON) # cmake-lint: disable=C0103

# workaround to prevent link errors against icudata, icui18n
# TODO: only needed for Boost <= 1.74 ?
# set(Boost_NO_BOOST_CMAKE ON) # cmake-lint: disable=C0103
endif()
# find_package(Boost 1.74.0 COMPONENTS locale log filesystem program_options REQUIRED)
include(dependencies/Boost_Sunshine)

# miniupnp
pkg_check_modules(MINIUPNP miniupnpc REQUIRED)
include_directories(SYSTEM ${MINIUPNP_INCLUDE_DIRS})
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)
24 changes: 15 additions & 9 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 @@ -47,11 +43,7 @@ set(CPACK_DEBIAN_PACKAGE_DEPENDS "\
miniupnpc, \
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}, \
${CPACK_RPM_PLATFORM_PACKAGE_REQUIRES} \,
libcap >= 2.22, \
libcurl >= 7.0, \
libdrm >= 2.4.97, \
Expand All @@ -66,6 +58,20 @@ 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}")

# 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
36 changes: 18 additions & 18 deletions packaging/linux/flatpak/dev.lizardbyte.sunshine.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,24 +36,24 @@ build-options:
modules:
- "org.flatpak.Builder.BaseApp/xvfb.json"

- name: boost
disabled: false
buildsystem: simple
build-commands:
- cd tools/build && bison -y -d -o src/engine/jamgram.cpp src/engine/jamgram.y
- ./bootstrap.sh --prefix=$FLATPAK_DEST --with-libraries=locale,log,program_options,system,thread
- ./b2 install variant=release link=shared runtime-link=shared cxxflags="$CXXFLAGS" linkflags="$LDFLAGS"
-j $FLATPAK_BUILDER_N_JOBS
sources:
- type: archive
url: http://archive.ubuntu.com/ubuntu/pool/main/b/boost1.74/boost1.74_1.74.0.orig.tar.xz
sha256: 2467be4af625b5ae4b3c93fc7af196a09eba39c11a7338cd9e8b356fa44d2f45
- type: archive
url: http://archive.ubuntu.com/ubuntu/pool/main/b/boost1.74/boost1.74_1.74.0-18.1ubuntu3.debian.tar.xz
sha256: d5660bdce3ea4ac66194b0c4bc6dc3b9d43d41cc16af8bc6024980d965e40ae2
- type: shell
commands:
- for n in $(cat patches/series); do if [[ $n != "#"* ]]; then patch -Np1 -i "patches/$n" -d .; fi; done
# - name: boost
# disabled: false
# buildsystem: simple
# build-commands:
# - cd tools/build && bison -y -d -o src/engine/jamgram.cpp src/engine/jamgram.y
# - ./bootstrap.sh --prefix=$FLATPAK_DEST --with-libraries=locale,log,program_options,system,thread
# - ./b2 install variant=release link=static,shared runtime-link=shared cxxflags="$CXXFLAGS" linkflags="$LDFLAGS"
# -j $FLATPAK_BUILDER_N_JOBS
# sources:
# - type: archive
# url: http://archive.ubuntu.com/ubuntu/pool/main/b/boost1.74/boost1.74_1.74.0.orig.tar.xz
# sha256: 2467be4af625b5ae4b3c93fc7af196a09eba39c11a7338cd9e8b356fa44d2f45
# - type: archive
# url: http://archive.ubuntu.com/ubuntu/pool/main/b/boost1.74/boost1.74_1.74.0-18.1ubuntu3.debian.tar.xz
# sha256: d5660bdce3ea4ac66194b0c4bc6dc3b9d43d41cc16af8bc6024980d965e40ae2
# - type: shell
# commands:
# - for n in $(cat patches/series); do if [[ $n != "#"* ]]; then patch -Np1 -i "patches/$n" -d .; fi; done

- name: avahi
disabled: false
Expand Down
3 changes: 0 additions & 3 deletions packaging/macos/Portfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
PortSystem 1.0
PortGroup cmake 1.1
PortGroup github 1.0
PortGroup boost 1.0

name @PROJECT_NAME@
version @PROJECT_VERSION@
Expand Down Expand Up @@ -45,8 +44,6 @@ depends_lib port:avahi \
depends_test port:doxygen \
port:graphviz

boost.version 1.81

configure.args -DBUILD_WERROR=ON \
-DCMAKE_INSTALL_PREFIX=${prefix} \
-DSUNSHINE_ASSETS_DIR=etc/sunshine/assets
Expand Down
Loading

0 comments on commit b1c7fef

Please sign in to comment.