2022-08-26 15:44:59 +00:00
|
|
|
# Copyright 2022 Google LLC. All rights reserved.
|
feat: First phase of CMake build system implementation (#1072)
There are a lot of changes in this first phase, because there was a
lot of infrastructure required to get some meaningful amount of
porting done. Future PRs should be simpler.
<b>Summary of changes:</b><details>
- Remove old deps:
- boringssl (replaced with mbedtls, lighter, easier to build)
- gflags (replaced with absl::flags)
- Chromium build tools
- New deps to replace parts of Chromium base:
- abseil-cpp
- glog
- nlohmann::json (for tests only)
- Submodules, updates, and CMake build rules for third-party
libraries:
- curl
- gmock/gtest
- Ported internal libraries and their tests by removing Chromium deps
and adding CMake build rules:
- file (now using C++17 filesystem APIs)
- license_notice
- status
- version
- Test improvements
- Removed file tests that can never be re-enabled
- Re-enabled all other disabled file tests
- Debug JSON values when HTTP tests fail
- Fixed chunked-encoding issues in HTTP tests
- Updated and refactored Dockerfiles testing
- All docker files working, with OS versions updated to meet the
new tool requirements
- Local docker builds no longer write files to your working
directory as root
- Local docker builds can now be run in parallel without clobbering
each others' build outputs
- DEBUG=1 can drop you into an interactive shell when a docker
build fails
- Updated and heavily refactored workflows and Dockerfiles
- All docker files now tested in parallel on GitHub, speeding up CI
- All common workflow components broken out and using workflow_call
instead of custom actions
- Self-hosted runners now optional, to make testing easier on forks
- CMake porting works-in-process can now be fully tested on GitHub
- Building ported libraries and passing ported tests on all three
platforms!
- CI hacks for macOS removed, now testing on macos-latest!
- Python2 no longer required! (Only Python3)
- Using strict build flags, treating all warnings as errors.
</details>
<b>Required to build:</b>
- CMake >= 3.16
- Python 3
- A compiler supporting C++ >= 17
- g++ >= 9 if using GCC (Clang also fine)
- MSVC for Windows
<b>Still needs work:</b><details>
- Moving other dependencies into submodules (if we keep them):
- apple_apsl
- icu
- libevent
- libpng
- libwebm
- libxml
- modp_b64
- protobuf
- zlib
- Port remaining internal libraries:
- app
- hls
- media/base
- media/chunking
- media/codecs
- media/crypto
- media/demuxer
- media/event
- media/formats/dvb
- media/formats/mp2t
- media/formats/mp4
- media/formats/packed_audio
- media/formats/ttml
- media/formats/webm
- media/formats/webvtt
- media/formats/wvm
- media/origin
- media/public
- media/replicator
- media/trick_play
- mpd
- Port main application
- Add logging flags in absl and connect them to glog (which expects
gflags)
- Port pssh-box.py
- Port main test targets (packager_test.py and packager_app.py)
- Updating all requirement and build documentation
- Remove any remaining refs to gclient, depot_tools, ninja
- Update and complete release workflows using release-please
</details>
Issue #346 (Switch to abseil)
Issue #1047 (New build system)
2022-08-16 18:34:51 +00:00
|
|
|
#
|
|
|
|
# Use of this source code is governed by a BSD-style
|
|
|
|
# license that can be found in the LICENSE file or at
|
|
|
|
# https://developers.google.com/open-source/licenses/bsd
|
|
|
|
|
|
|
|
# Packager CMake build file.
|
|
|
|
|
2023-10-16 20:08:48 +00:00
|
|
|
# Include a module to define standard install directories.
|
|
|
|
include(GNUInstallDirs)
|
|
|
|
|
2023-10-19 17:05:35 +00:00
|
|
|
# Build static libs by default, or shared if BUILD_SHARED_LIBS is on.
|
|
|
|
if(BUILD_SHARED_LIBS)
|
feat: First phase of CMake build system implementation (#1072)
There are a lot of changes in this first phase, because there was a
lot of infrastructure required to get some meaningful amount of
porting done. Future PRs should be simpler.
<b>Summary of changes:</b><details>
- Remove old deps:
- boringssl (replaced with mbedtls, lighter, easier to build)
- gflags (replaced with absl::flags)
- Chromium build tools
- New deps to replace parts of Chromium base:
- abseil-cpp
- glog
- nlohmann::json (for tests only)
- Submodules, updates, and CMake build rules for third-party
libraries:
- curl
- gmock/gtest
- Ported internal libraries and their tests by removing Chromium deps
and adding CMake build rules:
- file (now using C++17 filesystem APIs)
- license_notice
- status
- version
- Test improvements
- Removed file tests that can never be re-enabled
- Re-enabled all other disabled file tests
- Debug JSON values when HTTP tests fail
- Fixed chunked-encoding issues in HTTP tests
- Updated and refactored Dockerfiles testing
- All docker files working, with OS versions updated to meet the
new tool requirements
- Local docker builds no longer write files to your working
directory as root
- Local docker builds can now be run in parallel without clobbering
each others' build outputs
- DEBUG=1 can drop you into an interactive shell when a docker
build fails
- Updated and heavily refactored workflows and Dockerfiles
- All docker files now tested in parallel on GitHub, speeding up CI
- All common workflow components broken out and using workflow_call
instead of custom actions
- Self-hosted runners now optional, to make testing easier on forks
- CMake porting works-in-process can now be fully tested on GitHub
- Building ported libraries and passing ported tests on all three
platforms!
- CI hacks for macOS removed, now testing on macos-latest!
- Python2 no longer required! (Only Python3)
- Using strict build flags, treating all warnings as errors.
</details>
<b>Required to build:</b>
- CMake >= 3.16
- Python 3
- A compiler supporting C++ >= 17
- g++ >= 9 if using GCC (Clang also fine)
- MSVC for Windows
<b>Still needs work:</b><details>
- Moving other dependencies into submodules (if we keep them):
- apple_apsl
- icu
- libevent
- libpng
- libwebm
- libxml
- modp_b64
- protobuf
- zlib
- Port remaining internal libraries:
- app
- hls
- media/base
- media/chunking
- media/codecs
- media/crypto
- media/demuxer
- media/event
- media/formats/dvb
- media/formats/mp2t
- media/formats/mp4
- media/formats/packed_audio
- media/formats/ttml
- media/formats/webm
- media/formats/webvtt
- media/formats/wvm
- media/origin
- media/public
- media/replicator
- media/trick_play
- mpd
- Port main application
- Add logging flags in absl and connect them to glog (which expects
gflags)
- Port pssh-box.py
- Port main test targets (packager_test.py and packager_app.py)
- Updating all requirement and build documentation
- Remove any remaining refs to gclient, depot_tools, ninja
- Update and complete release workflows using release-please
</details>
Issue #346 (Switch to abseil)
Issue #1047 (New build system)
2022-08-16 18:34:51 +00:00
|
|
|
add_definitions(-DSHARED_LIBRARY_BUILD)
|
2023-09-09 00:44:17 +00:00
|
|
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
feat: First phase of CMake build system implementation (#1072)
There are a lot of changes in this first phase, because there was a
lot of infrastructure required to get some meaningful amount of
porting done. Future PRs should be simpler.
<b>Summary of changes:</b><details>
- Remove old deps:
- boringssl (replaced with mbedtls, lighter, easier to build)
- gflags (replaced with absl::flags)
- Chromium build tools
- New deps to replace parts of Chromium base:
- abseil-cpp
- glog
- nlohmann::json (for tests only)
- Submodules, updates, and CMake build rules for third-party
libraries:
- curl
- gmock/gtest
- Ported internal libraries and their tests by removing Chromium deps
and adding CMake build rules:
- file (now using C++17 filesystem APIs)
- license_notice
- status
- version
- Test improvements
- Removed file tests that can never be re-enabled
- Re-enabled all other disabled file tests
- Debug JSON values when HTTP tests fail
- Fixed chunked-encoding issues in HTTP tests
- Updated and refactored Dockerfiles testing
- All docker files working, with OS versions updated to meet the
new tool requirements
- Local docker builds no longer write files to your working
directory as root
- Local docker builds can now be run in parallel without clobbering
each others' build outputs
- DEBUG=1 can drop you into an interactive shell when a docker
build fails
- Updated and heavily refactored workflows and Dockerfiles
- All docker files now tested in parallel on GitHub, speeding up CI
- All common workflow components broken out and using workflow_call
instead of custom actions
- Self-hosted runners now optional, to make testing easier on forks
- CMake porting works-in-process can now be fully tested on GitHub
- Building ported libraries and passing ported tests on all three
platforms!
- CI hacks for macOS removed, now testing on macos-latest!
- Python2 no longer required! (Only Python3)
- Using strict build flags, treating all warnings as errors.
</details>
<b>Required to build:</b>
- CMake >= 3.16
- Python 3
- A compiler supporting C++ >= 17
- g++ >= 9 if using GCC (Clang also fine)
- MSVC for Windows
<b>Still needs work:</b><details>
- Moving other dependencies into submodules (if we keep them):
- apple_apsl
- icu
- libevent
- libpng
- libwebm
- libxml
- modp_b64
- protobuf
- zlib
- Port remaining internal libraries:
- app
- hls
- media/base
- media/chunking
- media/codecs
- media/crypto
- media/demuxer
- media/event
- media/formats/dvb
- media/formats/mp2t
- media/formats/mp4
- media/formats/packed_audio
- media/formats/ttml
- media/formats/webm
- media/formats/webvtt
- media/formats/wvm
- media/origin
- media/public
- media/replicator
- media/trick_play
- mpd
- Port main application
- Add logging flags in absl and connect them to glog (which expects
gflags)
- Port pssh-box.py
- Port main test targets (packager_test.py and packager_app.py)
- Updating all requirement and build documentation
- Remove any remaining refs to gclient, depot_tools, ninja
- Update and complete release workflows using release-please
</details>
Issue #346 (Switch to abseil)
Issue #1047 (New build system)
2022-08-16 18:34:51 +00:00
|
|
|
endif()
|
|
|
|
|
|
|
|
# Global C++ flags.
|
|
|
|
if(MSVC)
|
|
|
|
# Warning level 4 and all warnings as errors.
|
|
|
|
add_compile_options(/W4 /WX)
|
|
|
|
# Silence a warning from an absl header about alignment in boolean flags.
|
|
|
|
add_compile_options(/wd4324)
|
|
|
|
# Silence a warning about STL types in exported classes.
|
|
|
|
add_compile_options(/wd4251)
|
2023-07-14 19:40:12 +00:00
|
|
|
# Silence a warning about constant conditional expressions.
|
|
|
|
add_compile_options(/wd4127)
|
2023-08-31 23:59:46 +00:00
|
|
|
# We use long-jumps in subtitle_composer.cc due to API of libpng
|
|
|
|
add_compile_options(/wd4611)
|
|
|
|
# need /bigobj for box definitions
|
|
|
|
add_compile_options(/bigobj)
|
feat: First phase of CMake build system implementation (#1072)
There are a lot of changes in this first phase, because there was a
lot of infrastructure required to get some meaningful amount of
porting done. Future PRs should be simpler.
<b>Summary of changes:</b><details>
- Remove old deps:
- boringssl (replaced with mbedtls, lighter, easier to build)
- gflags (replaced with absl::flags)
- Chromium build tools
- New deps to replace parts of Chromium base:
- abseil-cpp
- glog
- nlohmann::json (for tests only)
- Submodules, updates, and CMake build rules for third-party
libraries:
- curl
- gmock/gtest
- Ported internal libraries and their tests by removing Chromium deps
and adding CMake build rules:
- file (now using C++17 filesystem APIs)
- license_notice
- status
- version
- Test improvements
- Removed file tests that can never be re-enabled
- Re-enabled all other disabled file tests
- Debug JSON values when HTTP tests fail
- Fixed chunked-encoding issues in HTTP tests
- Updated and refactored Dockerfiles testing
- All docker files working, with OS versions updated to meet the
new tool requirements
- Local docker builds no longer write files to your working
directory as root
- Local docker builds can now be run in parallel without clobbering
each others' build outputs
- DEBUG=1 can drop you into an interactive shell when a docker
build fails
- Updated and heavily refactored workflows and Dockerfiles
- All docker files now tested in parallel on GitHub, speeding up CI
- All common workflow components broken out and using workflow_call
instead of custom actions
- Self-hosted runners now optional, to make testing easier on forks
- CMake porting works-in-process can now be fully tested on GitHub
- Building ported libraries and passing ported tests on all three
platforms!
- CI hacks for macOS removed, now testing on macos-latest!
- Python2 no longer required! (Only Python3)
- Using strict build flags, treating all warnings as errors.
</details>
<b>Required to build:</b>
- CMake >= 3.16
- Python 3
- A compiler supporting C++ >= 17
- g++ >= 9 if using GCC (Clang also fine)
- MSVC for Windows
<b>Still needs work:</b><details>
- Moving other dependencies into submodules (if we keep them):
- apple_apsl
- icu
- libevent
- libpng
- libwebm
- libxml
- modp_b64
- protobuf
- zlib
- Port remaining internal libraries:
- app
- hls
- media/base
- media/chunking
- media/codecs
- media/crypto
- media/demuxer
- media/event
- media/formats/dvb
- media/formats/mp2t
- media/formats/mp4
- media/formats/packed_audio
- media/formats/ttml
- media/formats/webm
- media/formats/webvtt
- media/formats/wvm
- media/origin
- media/public
- media/replicator
- media/trick_play
- mpd
- Port main application
- Add logging flags in absl and connect them to glog (which expects
gflags)
- Port pssh-box.py
- Port main test targets (packager_test.py and packager_app.py)
- Updating all requirement and build documentation
- Remove any remaining refs to gclient, depot_tools, ninja
- Update and complete release workflows using release-please
</details>
Issue #346 (Switch to abseil)
Issue #1047 (New build system)
2022-08-16 18:34:51 +00:00
|
|
|
|
|
|
|
# Packager's macro for Windows-specific code.
|
|
|
|
add_definitions(-DOS_WIN)
|
|
|
|
|
|
|
|
# Suppress Microsoft's min() and max() macros, which will conflict with
|
|
|
|
# things like std::numeric_limits::max() and std::min().
|
|
|
|
add_definitions(-DNOMINMAX)
|
|
|
|
# Define this so that we can use fopen() without warnings.
|
|
|
|
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
|
|
|
# Don't automatically include winsock.h in windows.h. This is needed for us
|
|
|
|
# to use winsock2.h, which contains definitions that conflict with the
|
|
|
|
# ancient winsock 1.1 interface in winsock.h.
|
|
|
|
add_definitions(-DWIN32_LEAN_AND_MEAN)
|
|
|
|
else()
|
|
|
|
# Lots of warnings and all warnings as errors.
|
|
|
|
# Note that we can't use -Wpedantic due to absl's int128 headers.
|
|
|
|
add_compile_options(-Wall -Wextra -Werror)
|
2022-11-04 15:33:01 +00:00
|
|
|
# Several warning suppression flags are required on one compiler version and
|
|
|
|
# not understood by another. Do not treat these as errors.
|
|
|
|
add_compile_options(-Wno-unknown-warning-option)
|
feat: First phase of CMake build system implementation (#1072)
There are a lot of changes in this first phase, because there was a
lot of infrastructure required to get some meaningful amount of
porting done. Future PRs should be simpler.
<b>Summary of changes:</b><details>
- Remove old deps:
- boringssl (replaced with mbedtls, lighter, easier to build)
- gflags (replaced with absl::flags)
- Chromium build tools
- New deps to replace parts of Chromium base:
- abseil-cpp
- glog
- nlohmann::json (for tests only)
- Submodules, updates, and CMake build rules for third-party
libraries:
- curl
- gmock/gtest
- Ported internal libraries and their tests by removing Chromium deps
and adding CMake build rules:
- file (now using C++17 filesystem APIs)
- license_notice
- status
- version
- Test improvements
- Removed file tests that can never be re-enabled
- Re-enabled all other disabled file tests
- Debug JSON values when HTTP tests fail
- Fixed chunked-encoding issues in HTTP tests
- Updated and refactored Dockerfiles testing
- All docker files working, with OS versions updated to meet the
new tool requirements
- Local docker builds no longer write files to your working
directory as root
- Local docker builds can now be run in parallel without clobbering
each others' build outputs
- DEBUG=1 can drop you into an interactive shell when a docker
build fails
- Updated and heavily refactored workflows and Dockerfiles
- All docker files now tested in parallel on GitHub, speeding up CI
- All common workflow components broken out and using workflow_call
instead of custom actions
- Self-hosted runners now optional, to make testing easier on forks
- CMake porting works-in-process can now be fully tested on GitHub
- Building ported libraries and passing ported tests on all three
platforms!
- CI hacks for macOS removed, now testing on macos-latest!
- Python2 no longer required! (Only Python3)
- Using strict build flags, treating all warnings as errors.
</details>
<b>Required to build:</b>
- CMake >= 3.16
- Python 3
- A compiler supporting C++ >= 17
- g++ >= 9 if using GCC (Clang also fine)
- MSVC for Windows
<b>Still needs work:</b><details>
- Moving other dependencies into submodules (if we keep them):
- apple_apsl
- icu
- libevent
- libpng
- libwebm
- libxml
- modp_b64
- protobuf
- zlib
- Port remaining internal libraries:
- app
- hls
- media/base
- media/chunking
- media/codecs
- media/crypto
- media/demuxer
- media/event
- media/formats/dvb
- media/formats/mp2t
- media/formats/mp4
- media/formats/packed_audio
- media/formats/ttml
- media/formats/webm
- media/formats/webvtt
- media/formats/wvm
- media/origin
- media/public
- media/replicator
- media/trick_play
- mpd
- Port main application
- Add logging flags in absl and connect them to glog (which expects
gflags)
- Port pssh-box.py
- Port main test targets (packager_test.py and packager_app.py)
- Updating all requirement and build documentation
- Remove any remaining refs to gclient, depot_tools, ninja
- Update and complete release workflows using release-please
</details>
Issue #346 (Switch to abseil)
Issue #1047 (New build system)
2022-08-16 18:34:51 +00:00
|
|
|
endif()
|
|
|
|
|
2023-10-14 16:36:01 +00:00
|
|
|
# Global include paths.
|
|
|
|
# Project root, to reference internal headers as packager/foo/bar/...
|
|
|
|
include_directories(..)
|
|
|
|
# Public include folder, to reference public headers as packager/foo.h
|
|
|
|
include_directories(../include)
|
|
|
|
|
2023-07-17 23:11:41 +00:00
|
|
|
# Include our module for gtest-based testing.
|
|
|
|
include("gtest.cmake")
|
|
|
|
|
2022-10-26 17:07:01 +00:00
|
|
|
# Include our module for building protos.
|
|
|
|
include("protobuf.cmake")
|
|
|
|
|
feat: First phase of CMake build system implementation (#1072)
There are a lot of changes in this first phase, because there was a
lot of infrastructure required to get some meaningful amount of
porting done. Future PRs should be simpler.
<b>Summary of changes:</b><details>
- Remove old deps:
- boringssl (replaced with mbedtls, lighter, easier to build)
- gflags (replaced with absl::flags)
- Chromium build tools
- New deps to replace parts of Chromium base:
- abseil-cpp
- glog
- nlohmann::json (for tests only)
- Submodules, updates, and CMake build rules for third-party
libraries:
- curl
- gmock/gtest
- Ported internal libraries and their tests by removing Chromium deps
and adding CMake build rules:
- file (now using C++17 filesystem APIs)
- license_notice
- status
- version
- Test improvements
- Removed file tests that can never be re-enabled
- Re-enabled all other disabled file tests
- Debug JSON values when HTTP tests fail
- Fixed chunked-encoding issues in HTTP tests
- Updated and refactored Dockerfiles testing
- All docker files working, with OS versions updated to meet the
new tool requirements
- Local docker builds no longer write files to your working
directory as root
- Local docker builds can now be run in parallel without clobbering
each others' build outputs
- DEBUG=1 can drop you into an interactive shell when a docker
build fails
- Updated and heavily refactored workflows and Dockerfiles
- All docker files now tested in parallel on GitHub, speeding up CI
- All common workflow components broken out and using workflow_call
instead of custom actions
- Self-hosted runners now optional, to make testing easier on forks
- CMake porting works-in-process can now be fully tested on GitHub
- Building ported libraries and passing ported tests on all three
platforms!
- CI hacks for macOS removed, now testing on macos-latest!
- Python2 no longer required! (Only Python3)
- Using strict build flags, treating all warnings as errors.
</details>
<b>Required to build:</b>
- CMake >= 3.16
- Python 3
- A compiler supporting C++ >= 17
- g++ >= 9 if using GCC (Clang also fine)
- MSVC for Windows
<b>Still needs work:</b><details>
- Moving other dependencies into submodules (if we keep them):
- apple_apsl
- icu
- libevent
- libpng
- libwebm
- libxml
- modp_b64
- protobuf
- zlib
- Port remaining internal libraries:
- app
- hls
- media/base
- media/chunking
- media/codecs
- media/crypto
- media/demuxer
- media/event
- media/formats/dvb
- media/formats/mp2t
- media/formats/mp4
- media/formats/packed_audio
- media/formats/ttml
- media/formats/webm
- media/formats/webvtt
- media/formats/wvm
- media/origin
- media/public
- media/replicator
- media/trick_play
- mpd
- Port main application
- Add logging flags in absl and connect them to glog (which expects
gflags)
- Port pssh-box.py
- Port main test targets (packager_test.py and packager_app.py)
- Updating all requirement and build documentation
- Remove any remaining refs to gclient, depot_tools, ninja
- Update and complete release workflows using release-please
</details>
Issue #346 (Switch to abseil)
Issue #1047 (New build system)
2022-08-16 18:34:51 +00:00
|
|
|
# Subdirectories with their own CMakeLists.txt, all of whose targets are built.
|
|
|
|
add_subdirectory(file)
|
|
|
|
add_subdirectory(kv_pairs)
|
2022-10-25 16:15:54 +00:00
|
|
|
add_subdirectory(media)
|
2023-08-22 01:41:18 +00:00
|
|
|
add_subdirectory(hls)
|
2022-12-15 16:35:00 +00:00
|
|
|
add_subdirectory(mpd)
|
feat: First phase of CMake build system implementation (#1072)
There are a lot of changes in this first phase, because there was a
lot of infrastructure required to get some meaningful amount of
porting done. Future PRs should be simpler.
<b>Summary of changes:</b><details>
- Remove old deps:
- boringssl (replaced with mbedtls, lighter, easier to build)
- gflags (replaced with absl::flags)
- Chromium build tools
- New deps to replace parts of Chromium base:
- abseil-cpp
- glog
- nlohmann::json (for tests only)
- Submodules, updates, and CMake build rules for third-party
libraries:
- curl
- gmock/gtest
- Ported internal libraries and their tests by removing Chromium deps
and adding CMake build rules:
- file (now using C++17 filesystem APIs)
- license_notice
- status
- version
- Test improvements
- Removed file tests that can never be re-enabled
- Re-enabled all other disabled file tests
- Debug JSON values when HTTP tests fail
- Fixed chunked-encoding issues in HTTP tests
- Updated and refactored Dockerfiles testing
- All docker files working, with OS versions updated to meet the
new tool requirements
- Local docker builds no longer write files to your working
directory as root
- Local docker builds can now be run in parallel without clobbering
each others' build outputs
- DEBUG=1 can drop you into an interactive shell when a docker
build fails
- Updated and heavily refactored workflows and Dockerfiles
- All docker files now tested in parallel on GitHub, speeding up CI
- All common workflow components broken out and using workflow_call
instead of custom actions
- Self-hosted runners now optional, to make testing easier on forks
- CMake porting works-in-process can now be fully tested on GitHub
- Building ported libraries and passing ported tests on all three
platforms!
- CI hacks for macOS removed, now testing on macos-latest!
- Python2 no longer required! (Only Python3)
- Using strict build flags, treating all warnings as errors.
</details>
<b>Required to build:</b>
- CMake >= 3.16
- Python 3
- A compiler supporting C++ >= 17
- g++ >= 9 if using GCC (Clang also fine)
- MSVC for Windows
<b>Still needs work:</b><details>
- Moving other dependencies into submodules (if we keep them):
- apple_apsl
- icu
- libevent
- libpng
- libwebm
- libxml
- modp_b64
- protobuf
- zlib
- Port remaining internal libraries:
- app
- hls
- media/base
- media/chunking
- media/codecs
- media/crypto
- media/demuxer
- media/event
- media/formats/dvb
- media/formats/mp2t
- media/formats/mp4
- media/formats/packed_audio
- media/formats/ttml
- media/formats/webm
- media/formats/webvtt
- media/formats/wvm
- media/origin
- media/public
- media/replicator
- media/trick_play
- mpd
- Port main application
- Add logging flags in absl and connect them to glog (which expects
gflags)
- Port pssh-box.py
- Port main test targets (packager_test.py and packager_app.py)
- Updating all requirement and build documentation
- Remove any remaining refs to gclient, depot_tools, ninja
- Update and complete release workflows using release-please
</details>
Issue #346 (Switch to abseil)
Issue #1047 (New build system)
2022-08-16 18:34:51 +00:00
|
|
|
add_subdirectory(status)
|
|
|
|
add_subdirectory(third_party)
|
|
|
|
add_subdirectory(tools)
|
2022-11-04 22:46:41 +00:00
|
|
|
add_subdirectory(utils)
|
feat: First phase of CMake build system implementation (#1072)
There are a lot of changes in this first phase, because there was a
lot of infrastructure required to get some meaningful amount of
porting done. Future PRs should be simpler.
<b>Summary of changes:</b><details>
- Remove old deps:
- boringssl (replaced with mbedtls, lighter, easier to build)
- gflags (replaced with absl::flags)
- Chromium build tools
- New deps to replace parts of Chromium base:
- abseil-cpp
- glog
- nlohmann::json (for tests only)
- Submodules, updates, and CMake build rules for third-party
libraries:
- curl
- gmock/gtest
- Ported internal libraries and their tests by removing Chromium deps
and adding CMake build rules:
- file (now using C++17 filesystem APIs)
- license_notice
- status
- version
- Test improvements
- Removed file tests that can never be re-enabled
- Re-enabled all other disabled file tests
- Debug JSON values when HTTP tests fail
- Fixed chunked-encoding issues in HTTP tests
- Updated and refactored Dockerfiles testing
- All docker files working, with OS versions updated to meet the
new tool requirements
- Local docker builds no longer write files to your working
directory as root
- Local docker builds can now be run in parallel without clobbering
each others' build outputs
- DEBUG=1 can drop you into an interactive shell when a docker
build fails
- Updated and heavily refactored workflows and Dockerfiles
- All docker files now tested in parallel on GitHub, speeding up CI
- All common workflow components broken out and using workflow_call
instead of custom actions
- Self-hosted runners now optional, to make testing easier on forks
- CMake porting works-in-process can now be fully tested on GitHub
- Building ported libraries and passing ported tests on all three
platforms!
- CI hacks for macOS removed, now testing on macos-latest!
- Python2 no longer required! (Only Python3)
- Using strict build flags, treating all warnings as errors.
</details>
<b>Required to build:</b>
- CMake >= 3.16
- Python 3
- A compiler supporting C++ >= 17
- g++ >= 9 if using GCC (Clang also fine)
- MSVC for Windows
<b>Still needs work:</b><details>
- Moving other dependencies into submodules (if we keep them):
- apple_apsl
- icu
- libevent
- libpng
- libwebm
- libxml
- modp_b64
- protobuf
- zlib
- Port remaining internal libraries:
- app
- hls
- media/base
- media/chunking
- media/codecs
- media/crypto
- media/demuxer
- media/event
- media/formats/dvb
- media/formats/mp2t
- media/formats/mp4
- media/formats/packed_audio
- media/formats/ttml
- media/formats/webm
- media/formats/webvtt
- media/formats/wvm
- media/origin
- media/public
- media/replicator
- media/trick_play
- mpd
- Port main application
- Add logging flags in absl and connect them to glog (which expects
gflags)
- Port pssh-box.py
- Port main test targets (packager_test.py and packager_app.py)
- Updating all requirement and build documentation
- Remove any remaining refs to gclient, depot_tools, ninja
- Update and complete release workflows using release-please
</details>
Issue #346 (Switch to abseil)
Issue #1047 (New build system)
2022-08-16 18:34:51 +00:00
|
|
|
add_subdirectory(version)
|
2023-09-09 00:44:17 +00:00
|
|
|
|
|
|
|
set(libpackager_sources
|
|
|
|
app/job_manager.cc
|
|
|
|
app/job_manager.h
|
|
|
|
app/muxer_factory.cc
|
|
|
|
app/muxer_factory.h
|
|
|
|
app/packager_util.cc
|
|
|
|
app/packager_util.h
|
|
|
|
app/single_thread_job_manager.cc
|
|
|
|
app/single_thread_job_manager.h
|
|
|
|
packager.cc
|
2023-10-14 16:36:01 +00:00
|
|
|
../include/packager/packager.h
|
2023-10-23 00:46:33 +00:00
|
|
|
)
|
2023-09-09 00:44:17 +00:00
|
|
|
|
2023-10-23 00:46:33 +00:00
|
|
|
set(libpackager_deps
|
2023-09-09 00:44:17 +00:00
|
|
|
file
|
|
|
|
hls_builder
|
|
|
|
media_chunking
|
|
|
|
media_codecs
|
|
|
|
media_crypto
|
|
|
|
demuxer
|
|
|
|
media_event
|
|
|
|
dvb
|
|
|
|
mp2t
|
|
|
|
mp4
|
|
|
|
packed_audio
|
|
|
|
ttml
|
|
|
|
formats_webm
|
|
|
|
wvm
|
|
|
|
media_replicator
|
|
|
|
media_trick_play
|
|
|
|
mpd_builder
|
|
|
|
mbedtls
|
|
|
|
string_utils
|
|
|
|
version
|
|
|
|
)
|
2023-10-23 00:46:33 +00:00
|
|
|
|
|
|
|
# A static library target is always built.
|
|
|
|
add_library(libpackager_static STATIC ${libpackager_sources})
|
|
|
|
target_link_libraries(libpackager_static ${libpackager_deps})
|
|
|
|
|
|
|
|
# And always installed as libpackager.a:
|
2023-10-16 20:08:48 +00:00
|
|
|
if(NOT MSVC)
|
2023-10-23 00:46:33 +00:00
|
|
|
set_property(TARGET libpackager_static PROPERTY OUTPUT_NAME packager)
|
|
|
|
else()
|
|
|
|
set_property(TARGET libpackager_static PROPERTY OUTPUT_NAME libpackager)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
# A shared library target is conditional (default OFF):
|
|
|
|
if(BUILD_SHARED_LIBS)
|
|
|
|
add_library(libpackager_shared SHARED ${libpackager_sources})
|
|
|
|
target_link_libraries(libpackager_shared ${libpackager_deps})
|
|
|
|
target_compile_definitions(libpackager_shared PUBLIC SHAKA_IMPLEMENTATION)
|
|
|
|
|
|
|
|
# And always installed as libpackager.so / libpackager.dll:
|
|
|
|
if(NOT MSVC)
|
|
|
|
set_property(TARGET libpackager_shared PROPERTY OUTPUT_NAME packager)
|
|
|
|
else()
|
|
|
|
set_property(TARGET libpackager_shared PROPERTY OUTPUT_NAME libpackager)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
# If we're building a shared library, this is what the "libpackager" target
|
|
|
|
# aliases to.
|
|
|
|
add_library(libpackager ALIAS libpackager_shared)
|
|
|
|
else()
|
|
|
|
# If we're not building a shared library, the "libpackager" target aliases to
|
|
|
|
# the static library.
|
|
|
|
add_library(libpackager ALIAS libpackager_static)
|
2023-10-16 20:08:48 +00:00
|
|
|
endif()
|
2023-09-09 00:44:17 +00:00
|
|
|
|
|
|
|
add_executable(packager
|
|
|
|
app/ad_cue_generator_flags.cc
|
|
|
|
app/ad_cue_generator_flags.h
|
|
|
|
app/crypto_flags.cc
|
|
|
|
app/crypto_flags.h
|
|
|
|
app/hls_flags.cc
|
|
|
|
app/hls_flags.h
|
|
|
|
app/manifest_flags.cc
|
|
|
|
app/manifest_flags.h
|
|
|
|
app/mpd_flags.cc
|
|
|
|
app/mpd_flags.h
|
|
|
|
app/muxer_flags.cc
|
|
|
|
app/muxer_flags.h
|
|
|
|
app/packager_main.cc
|
|
|
|
app/playready_key_encryption_flags.cc
|
|
|
|
app/playready_key_encryption_flags.h
|
|
|
|
app/raw_key_encryption_flags.cc
|
|
|
|
app/raw_key_encryption_flags.h
|
|
|
|
app/protection_system_flags.cc
|
|
|
|
app/protection_system_flags.h
|
|
|
|
app/retired_flags.cc
|
|
|
|
app/retired_flags.h
|
|
|
|
app/stream_descriptor.cc
|
|
|
|
app/stream_descriptor.h
|
|
|
|
app/validate_flag.cc
|
|
|
|
app/validate_flag.h
|
|
|
|
app/vlog_flags.cc
|
|
|
|
app/vlog_flags.h
|
|
|
|
app/widevine_encryption_flags.cc
|
|
|
|
app/widevine_encryption_flags.h
|
|
|
|
)
|
|
|
|
target_link_libraries(packager
|
|
|
|
absl::flags
|
|
|
|
absl::flags_parse
|
2023-10-13 19:42:47 +00:00
|
|
|
absl::log
|
|
|
|
absl::log_flags
|
2023-09-09 00:44:17 +00:00
|
|
|
absl::strings
|
2023-10-13 19:42:47 +00:00
|
|
|
hex_bytes_flags
|
|
|
|
libpackager
|
|
|
|
license_notice
|
2023-09-09 00:44:17 +00:00
|
|
|
string_utils
|
|
|
|
)
|
|
|
|
|
|
|
|
add_executable(mpd_generator
|
|
|
|
app/mpd_generator.cc
|
|
|
|
app/mpd_generator_flags.h
|
|
|
|
app/vlog_flags.cc
|
|
|
|
app/vlog_flags.h
|
|
|
|
)
|
|
|
|
target_link_libraries(mpd_generator
|
|
|
|
absl::flags
|
|
|
|
absl::flags_parse
|
2023-10-13 19:42:47 +00:00
|
|
|
absl::log
|
|
|
|
absl::log_flags
|
2023-09-09 00:44:17 +00:00
|
|
|
absl::strings
|
|
|
|
license_notice
|
2023-10-13 19:42:47 +00:00
|
|
|
mpd_builder
|
|
|
|
mpd_util
|
2023-09-09 00:44:17 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
add_executable(packager_test
|
|
|
|
packager_test.cc
|
|
|
|
)
|
|
|
|
target_link_libraries(packager_test
|
|
|
|
libpackager
|
|
|
|
gmock
|
|
|
|
gtest
|
|
|
|
gtest_main)
|
2023-10-16 20:08:48 +00:00
|
|
|
|
2023-10-18 23:06:10 +00:00
|
|
|
list(APPEND packager_test_py_sources
|
|
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/app/test/packager_app.py"
|
|
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/app/test/packager_test.py"
|
|
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/app/test/test_env.py")
|
|
|
|
|
|
|
|
list(APPEND packager_test_py_output
|
|
|
|
"${CMAKE_CURRENT_BINARY_DIR}/packager_app.py"
|
|
|
|
"${CMAKE_CURRENT_BINARY_DIR}/packager_test.py"
|
|
|
|
"${CMAKE_CURRENT_BINARY_DIR}/test_env.py")
|
|
|
|
|
|
|
|
add_custom_command(
|
|
|
|
OUTPUT ${packager_test_py_output}
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/app/test/packager_app.py ${CMAKE_CURRENT_BINARY_DIR}/packager_app.py
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/app/test/packager_test.py ${CMAKE_CURRENT_BINARY_DIR}/packager_test.py
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/app/test/test_env.py ${CMAKE_CURRENT_BINARY_DIR}/test_env.py
|
|
|
|
DEPENDS ${packager_test_py_sources}
|
|
|
|
)
|
|
|
|
|
|
|
|
add_custom_target(packager_test_py_copy ALL
|
|
|
|
DEPENDS ${packager_test_py_output} packager
|
|
|
|
SOURCES ${packager_test_py_sources}
|
|
|
|
)
|
2023-10-16 20:08:48 +00:00
|
|
|
|
2023-10-18 23:06:10 +00:00
|
|
|
if(NOT SKIP_INTEGRATION_TESTS)
|
|
|
|
add_test (NAME packager_test_py
|
|
|
|
COMMAND ${PYTHON_EXECUTABLE} packager_test.py
|
|
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
|
|
)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
configure_file(packager.pc.in packager.pc @ONLY)
|
2023-10-16 20:08:48 +00:00
|
|
|
|
2023-10-23 00:46:33 +00:00
|
|
|
# Always install the binaries.
|
|
|
|
install(TARGETS mpd_generator packager)
|
2023-10-17 19:52:40 +00:00
|
|
|
|
2023-10-23 00:46:33 +00:00
|
|
|
# Always install the python tools.
|
2023-10-17 19:52:40 +00:00
|
|
|
install(PROGRAMS ${CMAKE_BINARY_DIR}/pssh-box.py
|
|
|
|
DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
|
|
install(DIRECTORY ${CMAKE_BINARY_DIR}/pssh-box-protos
|
|
|
|
DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
|
|
|
2023-10-23 00:46:33 +00:00
|
|
|
# With shared libraries, also install the library, headers, and pkgconfig.
|
|
|
|
# The static library isn't usable as a standalone because it doesn't include
|
|
|
|
# its static dependencies (zlib, absl, etc).
|
|
|
|
if(BUILD_SHARED_LIBS)
|
|
|
|
install(TARGETS libpackager_shared)
|
|
|
|
install(DIRECTORY ../include/packager
|
|
|
|
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
|
|
|
install(FILES ${CMAKE_BINARY_DIR}/packager/packager.pc
|
|
|
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
|
|
|
endif()
|