Skip to content

Commit 930cd70

Browse files
authored
build: update package installation commands and enhance sysroot configuration (#178)
1 parent 715c5ec commit 930cd70

File tree

12 files changed

+352
-412
lines changed

12 files changed

+352
-412
lines changed

.github/actions/prepare-linux/action.yml

Lines changed: 20 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -30,77 +30,47 @@ runs:
3030

3131
- name: Install required packages
3232
run: |
33-
sudo apt-get update
34-
sudo apt-get install -y pulseaudio libpulse-dev libasound2-dev libdbus-1-dev libudev-dev libv4l-dev libx11-dev libxcomposite-dev libxrandr-dev libxfixes-dev binutils cmake git locales lsb-release ninja-build pkg-config python3 python3-setuptools rsync unzip wget xz-utils
33+
sudo apt update
34+
sudo apt install -y binutils cmake git locales lsb-release ninja-build pkg-config python3 python3-setuptools rsync unzip wget xz-utils
3535
3636
# Chromium Clang to be used with the clang toolchain file
3737
#curl -s https://raw.githubusercontent.com/chromium/chromium/main/tools/clang/scripts/update.py | python3 - --output-dir=/opt/clang
3838
# Use a more stable version of Clang
3939
sudo mkdir -p /opt/clang
4040
wget https://commondatastorage.googleapis.com/chromium-browser-clang/Linux_x64/clang-llvmorg-20-init-9764-gb81d8e90-72.tar.xz
4141
sudo tar -xvf clang-llvmorg-20-init-9764-gb81d8e90-72.tar.xz -C /opt/clang
42-
42+
4343
# Required for testing
4444
#pulseaudio --start
45-
sudo apt-get install -y pipewire pipewire-pulse gstreamer1.0-pipewire libspa-0.2-bluetooth libspa-0.2-jack pipewire-audio-client-libraries
45+
sudo apt install -y pipewire pipewire-pulse gstreamer1.0-pipewire libspa-0.2-bluetooth libspa-0.2-jack pipewire-audio-client-libraries
4646
systemctl --user daemon-reload
4747
systemctl --user --now enable pipewire{,-pulse}.{socket,service}
4848
shell: bash
4949

50+
- name: Install required packages for x86-64
51+
if: matrix.platform.name == 'linux_x86-64'
52+
run: |
53+
sudo mkdir /opt/sysroot
54+
python3 webrtc-jni/src/main/cpp/dependencies/webrtc/linux/sysroot/install-sysroot.py --arch=amd64
55+
sudo mv webrtc-jni/src/main/cpp/dependencies/webrtc/linux/debian* /opt/sysroot/
56+
shell: bash
57+
5058
- name: Install required packages for arm
5159
if: matrix.platform.name == 'linux_arm'
5260
run: |
5361
sudo apt install -y gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
54-
55-
sudo dpkg --add-architecture armhf
56-
57-
sudo rm /etc/apt/sources.list
58-
59-
sudo tee -a /etc/apt/sources.list > /dev/null <<EOT
60-
deb [arch=armhf] http://ports.ubuntu.com/ubuntu-ports jammy main restricted universe multiverse
61-
deb [arch=armhf] http://ports.ubuntu.com/ubuntu-ports jammy-updates main restricted universe multiverse
62-
deb [arch=armhf] http://ports.ubuntu.com/ubuntu-ports jammy-security main restricted universe multiverse
63-
EOT
64-
65-
sudo apt-get update
66-
67-
sudo apt install -y \
68-
libpulse-dev:armhf \
69-
libx11-dev:armhf \
70-
libxfixes-dev:armhf \
71-
libxrandr-dev:armhf \
72-
libxcomposite-dev:armhf \
73-
libdbus-1-dev:armhf
74-
75-
# Avoid python3 conflict errors.
76-
sudo apt install -y --no-install-recommends libudev-dev:armhf
62+
63+
sudo mkdir /opt/sysroot
64+
python3 webrtc-jni/src/main/cpp/dependencies/webrtc/linux/sysroot/install-sysroot.py --arch=armhf
65+
sudo mv webrtc-jni/src/main/cpp/dependencies/webrtc/linux/debian* /opt/sysroot/
7766
shell: bash
7867

7968
- name: Install required packages for arm64
8069
if: matrix.platform.name == 'linux_arm64'
8170
run: |
8271
sudo apt install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
83-
84-
sudo dpkg --add-architecture arm64
85-
86-
sudo rm /etc/apt/sources.list
87-
88-
sudo tee -a /etc/apt/sources.list > /dev/null <<EOT
89-
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports jammy main restricted universe multiverse
90-
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports jammy-updates main restricted universe multiverse
91-
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports jammy-security main restricted universe multiverse
92-
EOT
93-
94-
sudo apt-get update
95-
96-
sudo apt install -y \
97-
libpulse-dev:arm64 \
98-
libx11-dev:arm64 \
99-
libxfixes-dev:arm64 \
100-
libxrandr-dev:arm64 \
101-
libxcomposite-dev:arm64 \
102-
libdbus-1-dev:arm64
103-
104-
# Avoid python3 conflict errors.
105-
sudo apt install -y --no-install-recommends libudev-dev:arm64
72+
73+
sudo mkdir /opt/sysroot
74+
python3 webrtc-jni/src/main/cpp/dependencies/webrtc/linux/sysroot/install-sysroot.py --arch=arm64
75+
sudo mv webrtc-jni/src/main/cpp/dependencies/webrtc/linux/debian* /opt/sysroot/
10676
shell: bash

webrtc-jni/pom.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@
8383
<goal>generate</goal>
8484
</goals>
8585
<configuration>
86+
<downloadBinaries>false</downloadBinaries>
8687
<sourcePath>src/main/cpp</sourcePath>
8788
<targetPath>${project.build.directory}/${platform.classifier}</targetPath>
8889
<options>
@@ -120,6 +121,7 @@
120121
<goal>compile</goal>
121122
</goals>
122123
<configuration>
124+
<downloadBinaries>false</downloadBinaries>
123125
<config>${cmake.config}</config>
124126
<target>install</target>
125127
<projectDirectory>${project.build.directory}/${platform.classifier}</projectDirectory>
Lines changed: 58 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,44 @@
11
cmake_minimum_required(VERSION 3.13)
22

33
if(NOT WEBRTC_TOOLCHAIN_FILE STREQUAL "")
4-
message(STATUS "Toolchain file: ${WEBRTC_TOOLCHAIN_FILE}")
5-
set(CMAKE_TOOLCHAIN_FILE "${WEBRTC_TOOLCHAIN_FILE}")
4+
message(STATUS "Toolchain file: ${WEBRTC_TOOLCHAIN_FILE}")
5+
set(CMAKE_TOOLCHAIN_FILE "${WEBRTC_TOOLCHAIN_FILE}")
66
endif()
77

88
project(webrtc-java)
99

1010
if(UNIX AND NOT APPLE)
11-
set(LINUX TRUE)
11+
# Apply the sysroot configuration for the actual build
12+
if(DEFERRED_SYSROOT)
13+
# Configure sysroot for all subsequent operations
14+
set(CMAKE_SYSROOT ${DEFERRED_SYSROOT})
15+
set(CMAKE_FIND_ROOT_PATH ${DEFERRED_SYSROOT})
16+
17+
# Set pkg-config environment
18+
set(ENV{PKG_CONFIG_SYSROOT_DIR} "${DEFERRED_SYSROOT}")
19+
set(ENV{PKG_CONFIG_PATH} "${DEFERRED_SYSROOT}/usr/lib/pkgconfig:${DEFERRED_SYSROOT}/usr/share/pkgconfig")
20+
21+
# Restrict library and header searches to sysroot only
22+
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
23+
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
24+
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
25+
endif()
26+
27+
set(LINUX TRUE)
1228
endif()
1329

1430
if(APPLE)
15-
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
16-
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -s")
17-
set(SOURCE_TARGET macos)
31+
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
32+
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -s")
33+
set(SOURCE_TARGET macos)
1834
elseif(LINUX)
19-
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
20-
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -s")
21-
set(SOURCE_TARGET linux)
35+
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
36+
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -s")
37+
set(SOURCE_TARGET linux)
2238
elseif(WIN32)
23-
set(CMAKE_CXX_FLAGS_RELEASE "/MT")
24-
set(CMAKE_CXX_FLAGS_DEBUG "/MTd")
25-
set(SOURCE_TARGET windows)
39+
set(CMAKE_CXX_FLAGS_RELEASE "/MT")
40+
set(CMAKE_CXX_FLAGS_DEBUG "/MTd")
41+
set(SOURCE_TARGET windows)
2642
endif()
2743

2844
if (CMAKE_CXX_COMPILER_ID STREQUAL Clang AND CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC")
@@ -45,54 +61,54 @@ file(GLOB SOURCES_PLATFORM "src/platform/${SOURCE_TARGET}/*.cpp")
4561
file(GLOB SOURCES_RTC "src/rtc/*.cpp")
4662

4763
list(APPEND SOURCES
48-
${SOURCES_ROOT}
49-
${SOURCES_API}
50-
${SOURCES_MEDIA}
51-
${SOURCES_MEDIA_AUDIO}
52-
${SOURCES_MEDIA_AUDIO_OS}
53-
${SOURCES_MEDIA_VIDEO}
54-
${SOURCES_MEDIA_VIDEO_DESKTOP}
55-
${SOURCES_MEDIA_VIDEO_DESKTOP_OS}
56-
${SOURCES_MEDIA_VIDEO_OS}
57-
${SOURCES_PLATFORM}
58-
${SOURCES_RTC}
64+
${SOURCES_ROOT}
65+
${SOURCES_API}
66+
${SOURCES_MEDIA}
67+
${SOURCES_MEDIA_AUDIO}
68+
${SOURCES_MEDIA_AUDIO_OS}
69+
${SOURCES_MEDIA_VIDEO}
70+
${SOURCES_MEDIA_VIDEO_DESKTOP}
71+
${SOURCES_MEDIA_VIDEO_DESKTOP_OS}
72+
${SOURCES_MEDIA_VIDEO_OS}
73+
${SOURCES_PLATFORM}
74+
${SOURCES_RTC}
5975
)
6076

6177
add_library(${PROJECT_NAME} SHARED ${SOURCES})
6278

6379
target_include_directories(${PROJECT_NAME}
64-
PRIVATE
65-
include
66-
include/api
67-
include/media
68-
include/rtc
80+
PRIVATE
81+
include
82+
include/api
83+
include/media
84+
include/rtc
6985
)
7086

7187
set_target_properties(${PROJECT_NAME} PROPERTIES
72-
CXX_STANDARD 20
73-
CXX_STANDARD_REQUIRED ON
74-
CXX_EXTENSIONS OFF
88+
CXX_STANDARD 20
89+
CXX_STANDARD_REQUIRED ON
90+
CXX_EXTENSIONS OFF
7591
)
7692

7793
target_link_libraries(${PROJECT_NAME} jni-voithos)
7894
target_link_libraries(${PROJECT_NAME} webrtc)
7995

8096
if(APPLE)
81-
set_source_files_properties(${SOURCES} PROPERTIES COMPILE_FLAGS "-x objective-c++")
82-
target_link_libraries(${PROJECT_NAME} "-framework Foundation" "-framework AVFoundation" "-framework CoreMedia" "-framework CoreAudio" "-framework IOKit")
97+
set_source_files_properties(${SOURCES} PROPERTIES COMPILE_FLAGS "-x objective-c++")
98+
target_link_libraries(${PROJECT_NAME} "-framework Foundation" "-framework AVFoundation" "-framework CoreMedia" "-framework CoreAudio" "-framework IOKit")
8399
elseif(LINUX)
84-
if(NOT TARGET_CPU MATCHES "^arm")
85-
set(CXX_LIBS "-static-libgcc -stdlib=libc++ -lc++ -lc++abi")
86-
else()
87-
set(CXX_LIBS "-static-libgcc")
88-
endif()
100+
if(NOT TARGET_CPU MATCHES "^arm")
101+
set(CXX_LIBS "-static-libgcc -stdlib=libc++ -lc++ -lc++abi")
102+
else()
103+
set(CXX_LIBS "-static-libgcc")
104+
endif()
89105

90-
target_link_libraries(${PROJECT_NAME} ${CXX_LIBS} pulse udev)
106+
target_link_libraries(${PROJECT_NAME} ${CXX_LIBS} pulse udev)
91107
elseif(WIN32)
92-
target_link_libraries(${PROJECT_NAME} c++.lib msvcprt.lib dwmapi.lib mf.lib mfreadwrite.lib mfplat.lib mfuuid.lib shcore.lib)
108+
target_link_libraries(${PROJECT_NAME} dwmapi.lib mf.lib mfreadwrite.lib mfplat.lib mfuuid.lib shcore.lib)
93109
endif()
94110

95111
install(TARGETS ${PROJECT_NAME}
96-
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX} COMPONENT Runtime
97-
LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX} COMPONENT Runtime
112+
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX} COMPONENT Runtime
113+
LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX} COMPONENT Runtime
98114
)

0 commit comments

Comments
 (0)