From 558069d83f86eee9814addeffbd8fead649814a8 Mon Sep 17 00:00:00 2001 From: Alex Andres Date: Sat, 5 Jul 2025 19:44:17 +0200 Subject: [PATCH 01/10] build: enhance sysroot configuration for armhf, arm64, and amd64 architectures --- .github/actions/prepare-linux/action.yml | 52 ++----------- webrtc-jni/pom.xml | 2 + .../cpp/dependencies/webrtc/CMakeLists.txt | 75 ------------------- .../cpp/toolchain/aarch32-linux-clang.cmake | 12 +++ .../cpp/toolchain/aarch32-linux-gnu.cmake | 6 -- .../cpp/toolchain/aarch64-linux-clang.cmake | 12 +++ .../cpp/toolchain/aarch64-linux-gnu.cmake | 6 -- .../cpp/toolchain/x86_64-linux-clang.cmake | 12 +++ .../main/cpp/toolchain/x86_64-linux-gnu.cmake | 4 - 9 files changed, 45 insertions(+), 136 deletions(-) delete mode 100644 webrtc-jni/src/main/cpp/toolchain/aarch32-linux-gnu.cmake delete mode 100644 webrtc-jni/src/main/cpp/toolchain/aarch64-linux-gnu.cmake delete mode 100644 webrtc-jni/src/main/cpp/toolchain/x86_64-linux-gnu.cmake diff --git a/.github/actions/prepare-linux/action.yml b/.github/actions/prepare-linux/action.yml index cda0c25b..c0b650da 100644 --- a/.github/actions/prepare-linux/action.yml +++ b/.github/actions/prepare-linux/action.yml @@ -31,7 +31,7 @@ runs: - name: Install required packages run: | sudo apt-get update - 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 + sudo apt-get install -y binutils cmake git locales lsb-release ninja-build pkg-config python3 python3-setuptools rsync unzip wget xz-utils # Chromium Clang to be used with the clang toolchain file #curl -s https://raw.githubusercontent.com/chromium/chromium/main/tools/clang/scripts/update.py | python3 - --output-dir=/opt/clang @@ -52,28 +52,9 @@ runs: run: | sudo apt install -y gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf - sudo dpkg --add-architecture armhf - - sudo rm /etc/apt/sources.list - - sudo tee -a /etc/apt/sources.list > /dev/null < /dev/null <generate + false src/main/cpp ${project.build.directory}/${platform.classifier} @@ -120,6 +121,7 @@ compile + false ${cmake.config} install ${project.build.directory}/${platform.classifier} diff --git a/webrtc-jni/src/main/cpp/dependencies/webrtc/CMakeLists.txt b/webrtc-jni/src/main/cpp/dependencies/webrtc/CMakeLists.txt index 221811e7..4642ff1a 100644 --- a/webrtc-jni/src/main/cpp/dependencies/webrtc/CMakeLists.txt +++ b/webrtc-jni/src/main/cpp/dependencies/webrtc/CMakeLists.txt @@ -1,11 +1,6 @@ cmake_minimum_required(VERSION 3.13) project(webrtc) -if(LINUX) - # Used for Linux sysroot installation - find_package(Python3 REQUIRED COMPONENTS Interpreter) -endif() - FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/pseudo.hxx "template class pseudo{}\n") FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/pseudo.cxx @@ -85,60 +80,6 @@ function(execute_command) print("${COMMAND_ERROR}") endfunction() -function(sysroot_install) - message(STATUS "Installing sysroot") - - if(EXISTS "${WEBRTC_INSTALL_DIR}/lib/${WEBRTC_LIB}") - set(SCRIPT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/linux/sysroot") - else() - set(SCRIPT_PATH "${WEBRTC_SRC_DIR}/src/build/linux/sysroot_scripts") - endif() - - execute_process( - COMMAND ${Python3_EXECUTABLE} install-sysroot.py --arch=${TARGET_CPU} - WORKING_DIRECTORY "${SCRIPT_PATH}" - OUTPUT_VARIABLE COMMAND_OUTPUT - ERROR_VARIABLE COMMAND_ERROR - ) - - print("Sysroot script path: ${SCRIPT_PATH}") - print("${COMMAND_OUTPUT}") - print("${COMMAND_ERROR}") -endfunction() - -function(sysroot_link) - message(STATUS "Retrieving libm.so from sysroot") - - set(SYSROOT_ARCH "amd64") - - if(${TARGET_CPU} STREQUAL "x64") - set(SYSROOT_ARCH "amd64") - elseif(${TARGET_CPU} STREQUAL "arm") - set(SYSROOT_ARCH "armhf") - elseif(${TARGET_CPU} STREQUAL "arm64") - set(SYSROOT_ARCH "arm64") - endif() - - if(EXISTS "${WEBRTC_INSTALL_DIR}/lib/${WEBRTC_LIB}") - set(SYSROOT_PATH "${CMAKE_CURRENT_SOURCE_DIR}") - else() - set(SYSROOT_PATH "${WEBRTC_SRC_DIR}/src/build") - endif() - - execute_process( - COMMAND find "${SYSROOT_PATH}/linux/debian_bullseye_${SYSROOT_ARCH}-sysroot" -iname libm-*.so - WORKING_DIRECTORY "${WEBRTC_SRC_DIR}" - OUTPUT_VARIABLE COMMAND_OUTPUT - ERROR_VARIABLE COMMAND_ERROR - ) - - string(STRIP ${COMMAND_OUTPUT} LIBM_PATH) - - message(STATUS "Linking libm.so from: ${LIBM_PATH}") - - target_link_libraries(${PROJECT_NAME} "${LIBM_PATH}") -endfunction() - file(TO_CMAKE_PATH "${WEBRTC_SRC_DIR}" WEBRTC_SRC_DIR) set(WEBRTC_DIR ${WEBRTC_SRC_DIR}) @@ -195,10 +136,6 @@ if(APPLE) target_compile_definitions(${PROJECT_NAME} PUBLIC WEBRTC_MAC WEBRTC_POSIX) target_link_libraries(${PROJECT_NAME} "-framework Foundation" "-framework AVFoundation" "-framework CoreGraphics" "-framework CoreAudio" "-framework CoreVideo" "-framework ScreenCaptureKit" "-framework AudioToolbox" "-framework IOSurface" "-framework ApplicationServices" "-framework AppKit") elseif(LINUX) - # Find DBus - find_package(PkgConfig QUIET REQUIRED) # Include functions provided by PkgConfig module. - pkg_check_modules(DBUS REQUIRED dbus-1) - target_include_directories(${PROJECT_NAME} PUBLIC ${DBUS_INCLUDE_DIRS}) target_compile_definitions(${PROJECT_NAME} PUBLIC WEBRTC_LINUX WEBRTC_POSIX) target_link_libraries(${PROJECT_NAME} X11 Xfixes Xrandr Xcomposite dbus-1) @@ -209,12 +146,6 @@ endif() if(EXISTS "${WEBRTC_LIB_PATH}" OR EXISTS "${WEBRTC_LIB_PATH_INSTALLED}") message(STATUS "WebRTC: Compiled version found '${TARGET_LINK_LIB}'") - - if(LINUX) - sysroot_install() - sysroot_link() - endif() - return() endif() @@ -253,10 +184,6 @@ execute_command( WORKING_DIRECTORY "${WEBRTC_DIR}" ) -if(LINUX) - sysroot_install() -endif() - file(GLOB PATCHES "${CMAKE_CURRENT_LIST_DIR}/patches/${SOURCE_TARGET}/*.patch") if (PATCHES) @@ -315,8 +242,6 @@ execute_command( ) if(LINUX) - sysroot_link() - if(LINUX AND NOT TARGET_CPU MATCHES "^arm") # Collect lib++ objects file(GLOB_RECURSE LibCPP_OBJS diff --git a/webrtc-jni/src/main/cpp/toolchain/aarch32-linux-clang.cmake b/webrtc-jni/src/main/cpp/toolchain/aarch32-linux-clang.cmake index 0210b7ed..b4358e03 100644 --- a/webrtc-jni/src/main/cpp/toolchain/aarch32-linux-clang.cmake +++ b/webrtc-jni/src/main/cpp/toolchain/aarch32-linux-clang.cmake @@ -14,4 +14,16 @@ foreach(LINKER SHARED_LINKER) set(CMAKE_${LINKER}_FLAGS "-fuse-ld=lld -Wl,-s -v -Wl,--verbose") endforeach() +file(GLOB LINUX_SYSROOT "/opt/sysroot/debian*armhf*") +if(NOT LINUX_SYSROOT) + message(FATAL_ERROR "No debian armhf sysroot found in /opt/sysroot/") +endif() + +set(CMAKE_SYSROOT ${LINUX_SYSROOT}) + +# Make sure CMake finds libraries and headers in the sysroot +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) + set(TARGET_CPU "arm") \ No newline at end of file diff --git a/webrtc-jni/src/main/cpp/toolchain/aarch32-linux-gnu.cmake b/webrtc-jni/src/main/cpp/toolchain/aarch32-linux-gnu.cmake deleted file mode 100644 index 95d00204..00000000 --- a/webrtc-jni/src/main/cpp/toolchain/aarch32-linux-gnu.cmake +++ /dev/null @@ -1,6 +0,0 @@ -set(CMAKE_SYSTEM_NAME Linux) -set(CMAKE_SYSTEM_PROCESSOR arm) -set(CMAKE_C_COMPILER /usr/bin/arm-linux-gnueabihf-gcc) -set(CMAKE_CXX_COMPILER /usr/bin/arm-linux-gnueabihf-g++) - -set(TARGET_CPU "arm") diff --git a/webrtc-jni/src/main/cpp/toolchain/aarch64-linux-clang.cmake b/webrtc-jni/src/main/cpp/toolchain/aarch64-linux-clang.cmake index beeb17f4..04860b26 100644 --- a/webrtc-jni/src/main/cpp/toolchain/aarch64-linux-clang.cmake +++ b/webrtc-jni/src/main/cpp/toolchain/aarch64-linux-clang.cmake @@ -14,4 +14,16 @@ foreach(LINKER SHARED_LINKER) set(CMAKE_${LINKER}_FLAGS "-fuse-ld=lld -Wl,-s -v -Wl,--verbose") endforeach() +file(GLOB LINUX_SYSROOT "/opt/sysroot/debian*arm64*") +if(NOT LINUX_SYSROOT) + message(FATAL_ERROR "No debian arm64 sysroot found in /opt/sysroot/") +endif() + +set(CMAKE_SYSROOT ${LINUX_SYSROOT}) + +# Make sure CMake finds libraries and headers in the sysroot +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) + set(TARGET_CPU "arm64") \ No newline at end of file diff --git a/webrtc-jni/src/main/cpp/toolchain/aarch64-linux-gnu.cmake b/webrtc-jni/src/main/cpp/toolchain/aarch64-linux-gnu.cmake deleted file mode 100644 index e6c3dc64..00000000 --- a/webrtc-jni/src/main/cpp/toolchain/aarch64-linux-gnu.cmake +++ /dev/null @@ -1,6 +0,0 @@ -set(CMAKE_SYSTEM_NAME Linux) -set(CMAKE_SYSTEM_PROCESSOR aarch64) -set(CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc) -set(CMAKE_CXX_COMPILER /usr/bin/aarch64-linux-gnu-g++) - -set(TARGET_CPU "arm64") diff --git a/webrtc-jni/src/main/cpp/toolchain/x86_64-linux-clang.cmake b/webrtc-jni/src/main/cpp/toolchain/x86_64-linux-clang.cmake index b942380d..7b4c53b4 100644 --- a/webrtc-jni/src/main/cpp/toolchain/x86_64-linux-clang.cmake +++ b/webrtc-jni/src/main/cpp/toolchain/x86_64-linux-clang.cmake @@ -11,4 +11,16 @@ foreach(LINKER SHARED_LINKER) set(CMAKE_${LINKER}_FLAGS "-fuse-ld=lld -Wl,-s -v -Wl,--verbose") endforeach() +file(GLOB LINUX_SYSROOT "/opt/sysroot/debian*amd64*") +if(NOT LINUX_SYSROOT) + message(FATAL_ERROR "No debian amd64 sysroot found in /opt/sysroot/") +endif() + +set(CMAKE_SYSROOT ${LINUX_SYSROOT}) + +# Make sure CMake finds libraries and headers in the sysroot +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) + set(TARGET_CPU "x64") diff --git a/webrtc-jni/src/main/cpp/toolchain/x86_64-linux-gnu.cmake b/webrtc-jni/src/main/cpp/toolchain/x86_64-linux-gnu.cmake deleted file mode 100644 index 14fe0f22..00000000 --- a/webrtc-jni/src/main/cpp/toolchain/x86_64-linux-gnu.cmake +++ /dev/null @@ -1,4 +0,0 @@ -set(CMAKE_SYSTEM_NAME Linux) -set(CMAKE_SYSTEM_PROCESSOR x86_64) - -set(TARGET_CPU "x64") From 706beceaa286a62fce8b474fa0c89a531dde9d13 Mon Sep 17 00:00:00 2001 From: Alex Andres Date: Sat, 5 Jul 2025 20:03:52 +0200 Subject: [PATCH 02/10] build: add sysroot installation for amd64 architecture --- .github/actions/prepare-linux/action.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/actions/prepare-linux/action.yml b/.github/actions/prepare-linux/action.yml index c0b650da..baa25be1 100644 --- a/.github/actions/prepare-linux/action.yml +++ b/.github/actions/prepare-linux/action.yml @@ -39,6 +39,10 @@ runs: sudo mkdir -p /opt/clang wget https://commondatastorage.googleapis.com/chromium-browser-clang/Linux_x64/clang-llvmorg-20-init-9764-gb81d8e90-72.tar.xz sudo tar -xvf clang-llvmorg-20-init-9764-gb81d8e90-72.tar.xz -C /opt/clang + + sudo mkdir /opt/sysroot + python3 webrtc-jni/src/main/cpp/dependencies/webrtc/linux/sysroot/install-sysroot.py --arch=amd64 + sudo mv webrtc-jni/src/main/cpp/dependencies/webrtc/linux/debian* /opt/sysroot/ # Required for testing #pulseaudio --start From 5396c6d75b5b16335502329628a1ad22ad64ad8c Mon Sep 17 00:00:00 2001 From: Alex Andres Date: Sat, 5 Jul 2025 20:31:07 +0200 Subject: [PATCH 03/10] build: reverted sysroot installation for Linux --- .../cpp/dependencies/webrtc/CMakeLists.txt | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/webrtc-jni/src/main/cpp/dependencies/webrtc/CMakeLists.txt b/webrtc-jni/src/main/cpp/dependencies/webrtc/CMakeLists.txt index 4642ff1a..61449740 100644 --- a/webrtc-jni/src/main/cpp/dependencies/webrtc/CMakeLists.txt +++ b/webrtc-jni/src/main/cpp/dependencies/webrtc/CMakeLists.txt @@ -1,6 +1,11 @@ cmake_minimum_required(VERSION 3.13) project(webrtc) +if(LINUX) + # Used for Linux sysroot installation + find_package(Python3 REQUIRED COMPONENTS Interpreter) +endif() + FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/pseudo.hxx "template class pseudo{}\n") FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/pseudo.cxx @@ -80,6 +85,27 @@ function(execute_command) print("${COMMAND_ERROR}") endfunction() +function(sysroot_install) + message(STATUS "Installing sysroot") + + if(EXISTS "${WEBRTC_INSTALL_DIR}/lib/${WEBRTC_LIB}") + set(SCRIPT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/linux/sysroot") + else() + set(SCRIPT_PATH "${WEBRTC_SRC_DIR}/src/build/linux/sysroot_scripts") + endif() + + execute_process( + COMMAND ${Python3_EXECUTABLE} install-sysroot.py --arch=${TARGET_CPU} + WORKING_DIRECTORY "${SCRIPT_PATH}" + OUTPUT_VARIABLE COMMAND_OUTPUT + ERROR_VARIABLE COMMAND_ERROR + ) + + print("Sysroot script path: ${SCRIPT_PATH}") + print("${COMMAND_OUTPUT}") + print("${COMMAND_ERROR}") +endfunction() + file(TO_CMAKE_PATH "${WEBRTC_SRC_DIR}" WEBRTC_SRC_DIR) set(WEBRTC_DIR ${WEBRTC_SRC_DIR}) @@ -146,6 +172,11 @@ endif() if(EXISTS "${WEBRTC_LIB_PATH}" OR EXISTS "${WEBRTC_LIB_PATH_INSTALLED}") message(STATUS "WebRTC: Compiled version found '${TARGET_LINK_LIB}'") + + if(LINUX) + sysroot_install() + endif() + return() endif() @@ -184,6 +215,10 @@ execute_command( WORKING_DIRECTORY "${WEBRTC_DIR}" ) +if(LINUX) + sysroot_install() +endif() + file(GLOB PATCHES "${CMAKE_CURRENT_LIST_DIR}/patches/${SOURCE_TARGET}/*.patch") if (PATCHES) From 3668c35aadfe3227219e03b6b3b0ac051fcf42a2 Mon Sep 17 00:00:00 2001 From: Alex Andres Date: Sat, 5 Jul 2025 20:42:32 +0200 Subject: [PATCH 04/10] build: add sysroot installation step for x86-64 architecture --- .github/actions/prepare-linux/action.yml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/actions/prepare-linux/action.yml b/.github/actions/prepare-linux/action.yml index baa25be1..58289405 100644 --- a/.github/actions/prepare-linux/action.yml +++ b/.github/actions/prepare-linux/action.yml @@ -40,10 +40,6 @@ runs: wget https://commondatastorage.googleapis.com/chromium-browser-clang/Linux_x64/clang-llvmorg-20-init-9764-gb81d8e90-72.tar.xz sudo tar -xvf clang-llvmorg-20-init-9764-gb81d8e90-72.tar.xz -C /opt/clang - sudo mkdir /opt/sysroot - python3 webrtc-jni/src/main/cpp/dependencies/webrtc/linux/sysroot/install-sysroot.py --arch=amd64 - sudo mv webrtc-jni/src/main/cpp/dependencies/webrtc/linux/debian* /opt/sysroot/ - # Required for testing #pulseaudio --start sudo apt-get install -y pipewire pipewire-pulse gstreamer1.0-pipewire libspa-0.2-bluetooth libspa-0.2-jack pipewire-audio-client-libraries @@ -51,6 +47,14 @@ runs: systemctl --user --now enable pipewire{,-pulse}.{socket,service} shell: bash + - name: Install required packages for x86-64 + if: matrix.platform.name == 'linux_x86-64' + run: | + sudo mkdir /opt/sysroot + python3 webrtc-jni/src/main/cpp/dependencies/webrtc/linux/sysroot/install-sysroot.py --arch=amd64 + sudo mv webrtc-jni/src/main/cpp/dependencies/webrtc/linux/debian* /opt/sysroot/ + shell: bash + - name: Install required packages for arm if: matrix.platform.name == 'linux_arm' run: | From 3660fc214a1124fb7436a9d5fbbc482f65bafd6e Mon Sep 17 00:00:00 2001 From: Alex Andres Date: Sat, 5 Jul 2025 22:51:05 +0200 Subject: [PATCH 05/10] build: enhance sysroot installation for armhf and arm64 architectures --- .github/actions/prepare-linux/action.yml | 33 ++++++++++++++++++- .../cpp/dependencies/webrtc/CMakeLists.txt | 4 +++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/.github/actions/prepare-linux/action.yml b/.github/actions/prepare-linux/action.yml index 58289405..7b3fa1e6 100644 --- a/.github/actions/prepare-linux/action.yml +++ b/.github/actions/prepare-linux/action.yml @@ -31,7 +31,7 @@ runs: - name: Install required packages run: | sudo apt-get update - sudo apt-get install -y binutils cmake git locales lsb-release ninja-build pkg-config python3 python3-setuptools rsync unzip wget xz-utils + sudo apt-get install -y libdbus-1-dev binutils cmake git locales lsb-release ninja-build pkg-config python3 python3-setuptools rsync unzip wget xz-utils # Chromium Clang to be used with the clang toolchain file #curl -s https://raw.githubusercontent.com/chromium/chromium/main/tools/clang/scripts/update.py | python3 - --output-dir=/opt/clang @@ -53,12 +53,29 @@ runs: sudo mkdir /opt/sysroot python3 webrtc-jni/src/main/cpp/dependencies/webrtc/linux/sysroot/install-sysroot.py --arch=amd64 sudo mv webrtc-jni/src/main/cpp/dependencies/webrtc/linux/debian* /opt/sysroot/ + + # Install libc++ packages in the sysroot + sudo apt install --root=/opt/sysroot/debian_bullseye_amd64-sysroot libc++-dev libc++abi-dev shell: bash - name: Install required packages for arm if: matrix.platform.name == 'linux_arm' run: | sudo apt install -y gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf + + sudo dpkg --add-architecture armhf + + sudo rm /etc/apt/sources.list + + sudo tee -a /etc/apt/sources.list > /dev/null < /dev/null < Date: Sun, 6 Jul 2025 12:38:15 +0200 Subject: [PATCH 06/10] build: defer sysroot configuration for linux --- webrtc-jni/src/main/cpp/CMakeLists.txt | 94 +++-- .../dependencies/jni-voithos/CMakeLists.txt | 126 +++--- .../cpp/dependencies/webrtc/CMakeLists.txt | 358 +++++++++--------- .../cpp/toolchain/aarch32-linux-clang.cmake | 22 +- .../cpp/toolchain/aarch64-linux-clang.cmake | 22 +- .../cpp/toolchain/x86_64-linux-clang.cmake | 22 +- .../cpp/toolchain/x86_64-windows-clang.cmake | 2 +- 7 files changed, 325 insertions(+), 321 deletions(-) diff --git a/webrtc-jni/src/main/cpp/CMakeLists.txt b/webrtc-jni/src/main/cpp/CMakeLists.txt index 2b2e439d..60c5cb95 100644 --- a/webrtc-jni/src/main/cpp/CMakeLists.txt +++ b/webrtc-jni/src/main/cpp/CMakeLists.txt @@ -1,28 +1,38 @@ cmake_minimum_required(VERSION 3.13) if(NOT WEBRTC_TOOLCHAIN_FILE STREQUAL "") - message(STATUS "Toolchain file: ${WEBRTC_TOOLCHAIN_FILE}") - set(CMAKE_TOOLCHAIN_FILE "${WEBRTC_TOOLCHAIN_FILE}") + message(STATUS "Toolchain file: ${WEBRTC_TOOLCHAIN_FILE}") + set(CMAKE_TOOLCHAIN_FILE "${WEBRTC_TOOLCHAIN_FILE}") endif() project(webrtc-java) +# Apply the sysroot configuration for the actual build +if(DEFERRED_SYSROOT) + # Configure sysroot for all subsequent operations + set(CMAKE_SYSROOT ${DEFERRED_SYSROOT}) + # Restrict library and header searches to sysroot only + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + if(UNIX AND NOT APPLE) - set(LINUX TRUE) + set(LINUX TRUE) endif() if(APPLE) - set(CMAKE_CXX_VISIBILITY_PRESET hidden) - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -s") - set(SOURCE_TARGET macos) + set(CMAKE_CXX_VISIBILITY_PRESET hidden) + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -s") + set(SOURCE_TARGET macos) elseif(LINUX) - set(CMAKE_POSITION_INDEPENDENT_CODE ON) - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -s") - set(SOURCE_TARGET linux) + set(CMAKE_POSITION_INDEPENDENT_CODE ON) + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -s") + set(SOURCE_TARGET linux) elseif(WIN32) - set(CMAKE_CXX_FLAGS_RELEASE "/MT") - set(CMAKE_CXX_FLAGS_DEBUG "/MTd") - set(SOURCE_TARGET windows) + set(CMAKE_CXX_FLAGS_RELEASE "/MT") + set(CMAKE_CXX_FLAGS_DEBUG "/MTd") + set(SOURCE_TARGET windows) endif() if (CMAKE_CXX_COMPILER_ID STREQUAL Clang AND CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC") @@ -45,54 +55,54 @@ file(GLOB SOURCES_PLATFORM "src/platform/${SOURCE_TARGET}/*.cpp") file(GLOB SOURCES_RTC "src/rtc/*.cpp") list(APPEND SOURCES - ${SOURCES_ROOT} - ${SOURCES_API} - ${SOURCES_MEDIA} - ${SOURCES_MEDIA_AUDIO} - ${SOURCES_MEDIA_AUDIO_OS} - ${SOURCES_MEDIA_VIDEO} - ${SOURCES_MEDIA_VIDEO_DESKTOP} - ${SOURCES_MEDIA_VIDEO_DESKTOP_OS} - ${SOURCES_MEDIA_VIDEO_OS} - ${SOURCES_PLATFORM} - ${SOURCES_RTC} + ${SOURCES_ROOT} + ${SOURCES_API} + ${SOURCES_MEDIA} + ${SOURCES_MEDIA_AUDIO} + ${SOURCES_MEDIA_AUDIO_OS} + ${SOURCES_MEDIA_VIDEO} + ${SOURCES_MEDIA_VIDEO_DESKTOP} + ${SOURCES_MEDIA_VIDEO_DESKTOP_OS} + ${SOURCES_MEDIA_VIDEO_OS} + ${SOURCES_PLATFORM} + ${SOURCES_RTC} ) add_library(${PROJECT_NAME} SHARED ${SOURCES}) target_include_directories(${PROJECT_NAME} - PRIVATE - include - include/api - include/media - include/rtc + PRIVATE + include + include/api + include/media + include/rtc ) set_target_properties(${PROJECT_NAME} PROPERTIES - CXX_STANDARD 20 - CXX_STANDARD_REQUIRED ON - CXX_EXTENSIONS OFF + CXX_STANDARD 20 + CXX_STANDARD_REQUIRED ON + CXX_EXTENSIONS OFF ) target_link_libraries(${PROJECT_NAME} jni-voithos) target_link_libraries(${PROJECT_NAME} webrtc) if(APPLE) - set_source_files_properties(${SOURCES} PROPERTIES COMPILE_FLAGS "-x objective-c++") - target_link_libraries(${PROJECT_NAME} "-framework Foundation" "-framework AVFoundation" "-framework CoreMedia" "-framework CoreAudio" "-framework IOKit") + set_source_files_properties(${SOURCES} PROPERTIES COMPILE_FLAGS "-x objective-c++") + target_link_libraries(${PROJECT_NAME} "-framework Foundation" "-framework AVFoundation" "-framework CoreMedia" "-framework CoreAudio" "-framework IOKit") elseif(LINUX) - if(NOT TARGET_CPU MATCHES "^arm") - set(CXX_LIBS "-static-libgcc -stdlib=libc++ -lc++ -lc++abi") - else() - set(CXX_LIBS "-static-libgcc") - endif() + if(NOT TARGET_CPU MATCHES "^arm") + set(CXX_LIBS "-static-libgcc -stdlib=libc++ -lc++ -lc++abi") + else() + set(CXX_LIBS "-static-libgcc") + endif() - target_link_libraries(${PROJECT_NAME} ${CXX_LIBS} pulse udev) + target_link_libraries(${PROJECT_NAME} ${CXX_LIBS} pulse udev) elseif(WIN32) - target_link_libraries(${PROJECT_NAME} c++.lib msvcprt.lib dwmapi.lib mf.lib mfreadwrite.lib mfplat.lib mfuuid.lib shcore.lib) + target_link_libraries(${PROJECT_NAME} c++.lib msvcprt.lib dwmapi.lib mf.lib mfreadwrite.lib mfplat.lib mfuuid.lib shcore.lib) endif() install(TARGETS ${PROJECT_NAME} - RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX} COMPONENT Runtime - LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX} COMPONENT Runtime + RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX} COMPONENT Runtime + LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX} COMPONENT Runtime ) diff --git a/webrtc-jni/src/main/cpp/dependencies/jni-voithos/CMakeLists.txt b/webrtc-jni/src/main/cpp/dependencies/jni-voithos/CMakeLists.txt index 19f10cc6..26df23d2 100644 --- a/webrtc-jni/src/main/cpp/dependencies/jni-voithos/CMakeLists.txt +++ b/webrtc-jni/src/main/cpp/dependencies/jni-voithos/CMakeLists.txt @@ -4,80 +4,80 @@ project(jni-voithos) add_library(${PROJECT_NAME} STATIC) target_sources(${PROJECT_NAME} - INTERFACE - include/jni/jni.h - include/Exception.h - include/JavaArray.h - include/JavaArrayList.h - include/JavaBigInteger.h - include/JavaClasses.h - include/JavaClass.h - include/JavaClassLoader.h - include/JavaClassUtils.h - include/JavaContext.h - include/JavaDimension.h - include/JavaEnum.h - include/JavaEnums.h - include/JavaError.h - include/JavaFactories.h - include/JavaFactory.h - include/JavaHashMap.h - include/JavaIOException.h - include/JavaIterable.h - include/JavaList.h - include/JavaMapIterator.h - include/JavaNullPointerException.h - include/JavaObject.h - include/JavaPrimitive.h - include/JavaRectangle.h - include/JavaRef.h - include/JavaRuntimeException.h - include/JavaString.h - include/JavaThreadEnv.h - include/JavaThrowable.h - include/JavaUtils.h - include/JavaWrappedException.h - PRIVATE - src/Exception.cpp - src/JavaArrayList.cpp - src/JavaBigInteger.cpp - src/JavaClassLoader.cpp - src/JavaClassUtils.cpp - src/JavaContext.cpp - src/JavaDimension.cpp - src/JavaHashMap.cpp - src/JavaIterable.cpp - src/JavaList.cpp - src/JavaMapIterator.cpp - src/JavaObject.cpp - src/JavaRectangle.cpp - src/JavaString.cpp - src/JavaThreadEnv.cpp - src/JavaThrowable.cpp - src/JavaUtils.cpp - src/JavaWrappedException.cpp + INTERFACE + include/jni/jni.h + include/Exception.h + include/JavaArray.h + include/JavaArrayList.h + include/JavaBigInteger.h + include/JavaClasses.h + include/JavaClass.h + include/JavaClassLoader.h + include/JavaClassUtils.h + include/JavaContext.h + include/JavaDimension.h + include/JavaEnum.h + include/JavaEnums.h + include/JavaError.h + include/JavaFactories.h + include/JavaFactory.h + include/JavaHashMap.h + include/JavaIOException.h + include/JavaIterable.h + include/JavaList.h + include/JavaMapIterator.h + include/JavaNullPointerException.h + include/JavaObject.h + include/JavaPrimitive.h + include/JavaRectangle.h + include/JavaRef.h + include/JavaRuntimeException.h + include/JavaString.h + include/JavaThreadEnv.h + include/JavaThrowable.h + include/JavaUtils.h + include/JavaWrappedException.h + PRIVATE + src/Exception.cpp + src/JavaArrayList.cpp + src/JavaBigInteger.cpp + src/JavaClassLoader.cpp + src/JavaClassUtils.cpp + src/JavaContext.cpp + src/JavaDimension.cpp + src/JavaHashMap.cpp + src/JavaIterable.cpp + src/JavaList.cpp + src/JavaMapIterator.cpp + src/JavaObject.cpp + src/JavaRectangle.cpp + src/JavaString.cpp + src/JavaThreadEnv.cpp + src/JavaThrowable.cpp + src/JavaUtils.cpp + src/JavaWrappedException.cpp ) if(APPLE) - set(JNI_PLATFORM "darwin") - set_source_files_properties(src/*.cpp PROPERTIES COMPILE_FLAGS "-x objective-c++") + set(JNI_PLATFORM "darwin") + set_source_files_properties(src/*.cpp PROPERTIES COMPILE_FLAGS "-x objective-c++") elseif(LINUX) - set(JNI_PLATFORM "linux") + set(JNI_PLATFORM "linux") elseif(WIN32) - set(JNI_PLATFORM "windows") + set(JNI_PLATFORM "windows") endif() set_target_properties(${PROJECT_NAME} PROPERTIES - CXX_STANDARD 14 - CXX_STANDARD_REQUIRED ON - CXX_EXTENSIONS OFF + CXX_STANDARD 14 + CXX_STANDARD_REQUIRED ON + CXX_EXTENSIONS OFF ) target_include_directories(${PROJECT_NAME} - PUBLIC - include - include/jni - include/jni/${JNI_PLATFORM} + PUBLIC + include + include/jni + include/jni/${JNI_PLATFORM} ) if(LINUX OR WIN32) diff --git a/webrtc-jni/src/main/cpp/dependencies/webrtc/CMakeLists.txt b/webrtc-jni/src/main/cpp/dependencies/webrtc/CMakeLists.txt index f5349762..6f8b2b37 100644 --- a/webrtc-jni/src/main/cpp/dependencies/webrtc/CMakeLists.txt +++ b/webrtc-jni/src/main/cpp/dependencies/webrtc/CMakeLists.txt @@ -2,8 +2,8 @@ cmake_minimum_required(VERSION 3.13) project(webrtc) if(LINUX) - # Used for Linux sysroot installation - find_package(Python3 REQUIRED COMPONENTS Interpreter) + # Used for Linux sysroot installation + find_package(Python3 REQUIRED COMPONENTS Interpreter) endif() FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/pseudo.hxx @@ -20,73 +20,73 @@ if((LINUX AND NOT TARGET_CPU MATCHES "^arm") OR WIN32) endif() if(NOT DEFINED TARGET_CPU) - if(CMAKE_SIZEOF_VOID_P EQUAL 4) - set(TARGET_CPU "x86") - elseif(CMAKE_SIZEOF_VOID_P EQUAL 8) - set(TARGET_CPU "x64") - endif() - - if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^arm.*$") - set(TARGET_CPU "${CMAKE_SYSTEM_PROCESSOR}") - endif() + if(CMAKE_SIZEOF_VOID_P EQUAL 4) + set(TARGET_CPU "x86") + elseif(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(TARGET_CPU "x64") + endif() + + if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^arm.*$") + set(TARGET_CPU "${CMAKE_SYSTEM_PROCESSOR}") + endif() endif() if(NOT DEFINED WEBRTC_BRANCH) - set(WEBRTC_BRANCH "master") + set(WEBRTC_BRANCH "master") endif() if(NOT DEFINED WEBRTC_SRC_DIR) - if(DEFINED ENV{CTEST_REAL_HOME}) - set(WEBRTC_SRC_DIR "$ENV{CTEST_REAL_HOME}") - else() - set(WEBRTC_SRC_DIR "$ENV{HOME}") - endif() - - if(NOT WEBRTC_SRC_DIR AND WIN32) - file(TO_CMAKE_PATH "$ENV{USERPROFILE}" WEBRTC_SRC_DIR) - endif() + if(DEFINED ENV{CTEST_REAL_HOME}) + set(WEBRTC_SRC_DIR "$ENV{CTEST_REAL_HOME}") + else() + set(WEBRTC_SRC_DIR "$ENV{HOME}") + endif() + + if(NOT WEBRTC_SRC_DIR AND WIN32) + file(TO_CMAKE_PATH "$ENV{USERPROFILE}" WEBRTC_SRC_DIR) + endif() endif() if(NOT DEFINED WEBRTC_INSTALL_DIR) - set(WEBRTC_INSTALL_DIR "${WEBRTC_SRC_DIR}/build") + set(WEBRTC_INSTALL_DIR "${WEBRTC_SRC_DIR}/build") endif() if(WIN32) - set(ENV{DEPOT_TOOLS_WIN_TOOLCHAIN} 0) - set(SHELLCOMMAND cmd /c ) - set(WEBRTC_LIB webrtc.lib) - set(PATH_SEP ";") + set(ENV{DEPOT_TOOLS_WIN_TOOLCHAIN} 0) + set(SHELLCOMMAND cmd /c ) + set(WEBRTC_LIB webrtc.lib) + set(PATH_SEP ";") elseif(UNIX) - set(WEBRTC_LIB libwebrtc.a) - set(PATH_SEP ":") + set(WEBRTC_LIB libwebrtc.a) + set(PATH_SEP ":") endif() function(print text) - string(STRIP "${text}" text) - string(REGEX REPLACE "\n$" "" text "${text}") - string(LENGTH "${text}" TEXT_LENGTH) + string(STRIP "${text}" text) + string(REGEX REPLACE "\n$" "" text "${text}") + string(LENGTH "${text}" TEXT_LENGTH) - if(TEXT_LENGTH GREATER 0) - message("${text}") - endif() + if(TEXT_LENGTH GREATER 0) + message("${text}") + endif() endfunction() function(execute_command) - cmake_parse_arguments(CMD_ARGS "" "WORKING_DIRECTORY" "COMMAND" ${ARGN}) + cmake_parse_arguments(CMD_ARGS "" "WORKING_DIRECTORY" "COMMAND" ${ARGN}) - execute_process( - COMMAND ${SHELLCOMMAND} ${CMD_ARGS_COMMAND} - WORKING_DIRECTORY "${CMD_ARGS_WORKING_DIRECTORY}" - OUTPUT_VARIABLE COMMAND_OUTPUT - ERROR_VARIABLE COMMAND_ERROR - ) + execute_process( + COMMAND ${SHELLCOMMAND} ${CMD_ARGS_COMMAND} + WORKING_DIRECTORY "${CMD_ARGS_WORKING_DIRECTORY}" + OUTPUT_VARIABLE COMMAND_OUTPUT + ERROR_VARIABLE COMMAND_ERROR + ) - print("${COMMAND_OUTPUT}") - print("${COMMAND_ERROR}") + print("${COMMAND_OUTPUT}") + print("${COMMAND_ERROR}") endfunction() function(sysroot_install) - message(STATUS "Installing sysroot") + message(STATUS "Installing sysroot") if(EXISTS "${WEBRTC_INSTALL_DIR}/lib/${WEBRTC_LIB}") set(SCRIPT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/linux/sysroot") @@ -94,15 +94,15 @@ function(sysroot_install) set(SCRIPT_PATH "${WEBRTC_SRC_DIR}/src/build/linux/sysroot_scripts") endif() - execute_process( - COMMAND ${Python3_EXECUTABLE} install-sysroot.py --arch=${TARGET_CPU} - WORKING_DIRECTORY "${SCRIPT_PATH}" - OUTPUT_VARIABLE COMMAND_OUTPUT - ERROR_VARIABLE COMMAND_ERROR - ) + execute_process( + COMMAND ${Python3_EXECUTABLE} install-sysroot.py --arch=${TARGET_CPU} + WORKING_DIRECTORY "${SCRIPT_PATH}" + OUTPUT_VARIABLE COMMAND_OUTPUT + ERROR_VARIABLE COMMAND_ERROR + ) print("Sysroot script path: ${SCRIPT_PATH}") - print("${COMMAND_OUTPUT}") + print("${COMMAND_OUTPUT}") print("${COMMAND_ERROR}") endfunction() @@ -128,69 +128,69 @@ message(STATUS "WebRTC install path: ${WEBRTC_INSTALL_DIR}") if(EXISTS "${WEBRTC_LIB_PATH_INSTALLED}") - set(TARGET_INC_DIR ${WEBRTC_INSTALL_DIR}/include) - set(TARGET_LINK_LIB ${WEBRTC_LIB_PATH_INSTALLED}) - set(TARGET_LIB_DIR ${WEBRTC_INSTALL_DIR}/lib) - set(TARGET_LIBCPP_BUILDTOOLS_INC_DIR ${TARGET_INC_DIR}/third_party/libc++/) - set(TARGET_LIBCPP_INC_DIR ${TARGET_INC_DIR}/third_party/libc++/include) - set(TARGET_LIBCPP_ABI_INC_DIR ${TARGET_INC_DIR}/third_party/libc++abi/include) + set(TARGET_INC_DIR ${WEBRTC_INSTALL_DIR}/include) + set(TARGET_LINK_LIB ${WEBRTC_LIB_PATH_INSTALLED}) + set(TARGET_LIB_DIR ${WEBRTC_INSTALL_DIR}/lib) + set(TARGET_LIBCPP_BUILDTOOLS_INC_DIR ${TARGET_INC_DIR}/third_party/libc++/) + set(TARGET_LIBCPP_INC_DIR ${TARGET_INC_DIR}/third_party/libc++/include) + set(TARGET_LIBCPP_ABI_INC_DIR ${TARGET_INC_DIR}/third_party/libc++abi/include) else() - set(TARGET_INC_DIR ${WEBRTC_SRC}) - set(TARGET_LINK_LIB ${WEBRTC_LIB_PATH}) - set(TARGET_LIB_DIR ${WEBRTC_SRC}/${WEBRTC_BUILD}/obj) - set(TARGET_LIBCPP_BUILDTOOLS_INC_DIR ${WEBRTC_SRC}/buildtools/third_party/libc++/) - set(TARGET_LIBCPP_INC_DIR ${WEBRTC_SRC}/third_party/libc++/src/include) - set(TARGET_LIBCPP_ABI_INC_DIR ${WEBRTC_SRC}/third_party/libc++abi/src/include) + set(TARGET_INC_DIR ${WEBRTC_SRC}) + set(TARGET_LINK_LIB ${WEBRTC_LIB_PATH}) + set(TARGET_LIB_DIR ${WEBRTC_SRC}/${WEBRTC_BUILD}/obj) + set(TARGET_LIBCPP_BUILDTOOLS_INC_DIR ${WEBRTC_SRC}/buildtools/third_party/libc++/) + set(TARGET_LIBCPP_INC_DIR ${WEBRTC_SRC}/third_party/libc++/src/include) + set(TARGET_LIBCPP_ABI_INC_DIR ${WEBRTC_SRC}/third_party/libc++abi/src/include) endif() if((LINUX AND NOT TARGET_CPU MATCHES "^arm") OR WIN32) - target_include_directories(${PROJECT_NAME} PUBLIC ${TARGET_LIBCPP_BUILDTOOLS_INC_DIR}) - target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC ${TARGET_LIBCPP_INC_DIR} ${TARGET_LIBCPP_ABI_INC_DIR}) + target_include_directories(${PROJECT_NAME} PUBLIC ${TARGET_LIBCPP_BUILDTOOLS_INC_DIR}) + target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC ${TARGET_LIBCPP_INC_DIR} ${TARGET_LIBCPP_ABI_INC_DIR}) - target_link_directories(${PROJECT_NAME} PUBLIC "${TARGET_LIB_DIR}") + target_link_directories(${PROJECT_NAME} PUBLIC "${TARGET_LIB_DIR}") endif() target_include_directories(${PROJECT_NAME} - PUBLIC - ${TARGET_INC_DIR} - ${TARGET_INC_DIR}/third_party/abseil-cpp - ${TARGET_INC_DIR}/third_party/libyuv/include + PUBLIC + ${TARGET_INC_DIR} + ${TARGET_INC_DIR}/third_party/abseil-cpp + ${TARGET_INC_DIR}/third_party/libyuv/include ) target_link_libraries(${PROJECT_NAME} ${TARGET_LINK_LIB}) if(APPLE) - target_compile_definitions(${PROJECT_NAME} PUBLIC WEBRTC_MAC WEBRTC_POSIX) - target_link_libraries(${PROJECT_NAME} "-framework Foundation" "-framework AVFoundation" "-framework CoreGraphics" "-framework CoreAudio" "-framework CoreVideo" "-framework ScreenCaptureKit" "-framework AudioToolbox" "-framework IOSurface" "-framework ApplicationServices" "-framework AppKit") + target_compile_definitions(${PROJECT_NAME} PUBLIC WEBRTC_MAC WEBRTC_POSIX) + target_link_libraries(${PROJECT_NAME} "-framework Foundation" "-framework AVFoundation" "-framework CoreGraphics" "-framework CoreAudio" "-framework CoreVideo" "-framework ScreenCaptureKit" "-framework AudioToolbox" "-framework IOSurface" "-framework ApplicationServices" "-framework AppKit") elseif(LINUX) # Find DBus find_package(PkgConfig QUIET REQUIRED) # Include functions provided by PkgConfig module. pkg_check_modules(DBUS REQUIRED dbus-1) - target_include_directories(${PROJECT_NAME} PUBLIC ${DBUS_INCLUDE_DIRS}) - target_compile_definitions(${PROJECT_NAME} PUBLIC WEBRTC_LINUX WEBRTC_POSIX) - target_link_libraries(${PROJECT_NAME} X11 Xfixes Xrandr Xcomposite dbus-1) + target_include_directories(${PROJECT_NAME} PUBLIC ${DBUS_INCLUDE_DIRS}) + target_compile_definitions(${PROJECT_NAME} PUBLIC WEBRTC_LINUX WEBRTC_POSIX) + target_link_libraries(${PROJECT_NAME} X11 Xfixes Xrandr Xcomposite dbus-1) elseif(WIN32) - target_compile_definitions(${PROJECT_NAME} PUBLIC WEBRTC_WIN NOMINMAX WIN32_LEAN_AND_MEAN NDEBUG) - target_link_libraries(${PROJECT_NAME} D3D11 DXGI user32 gdi32 iphlpapi dmoguids msdmo secur32 strmiids winmm wmcodecdspuuid ws2_32) + target_compile_definitions(${PROJECT_NAME} PUBLIC WEBRTC_WIN NOMINMAX WIN32_LEAN_AND_MEAN NDEBUG) + target_link_libraries(${PROJECT_NAME} D3D11 DXGI user32 gdi32 iphlpapi dmoguids msdmo secur32 strmiids winmm wmcodecdspuuid ws2_32) endif() if(EXISTS "${WEBRTC_LIB_PATH}" OR EXISTS "${WEBRTC_LIB_PATH_INSTALLED}") - message(STATUS "WebRTC: Compiled version found '${TARGET_LINK_LIB}'") + message(STATUS "WebRTC: Compiled version found '${TARGET_LINK_LIB}'") - if(LINUX) - sysroot_install() - endif() + if(LINUX) + sysroot_install() + endif() - return() + return() endif() if(NOT EXISTS "${WEBRTC_SRC_DIR}/depot_tools") - message(STATUS "WebRTC: fetch depot tools") - file(MAKE_DIRECTORY ${WEBRTC_SRC_DIR}) - execute_command( - COMMAND git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git - WORKING_DIRECTORY "${WEBRTC_SRC_DIR}" - ) + message(STATUS "WebRTC: fetch depot tools") + file(MAKE_DIRECTORY ${WEBRTC_SRC_DIR}) + execute_command( + COMMAND git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git + WORKING_DIRECTORY "${WEBRTC_SRC_DIR}" + ) endif() set(ENV{PATH} "${WEBRTC_SRC_DIR}/depot_tools${PATH_SEP}$ENV{PATH}") @@ -199,49 +199,49 @@ file(MAKE_DIRECTORY ${WEBRTC_DIR}) message(STATUS "WebRTC: fetch") execute_command( - COMMAND fetch --nohooks webrtc - WORKING_DIRECTORY "${WEBRTC_DIR}" + COMMAND fetch --nohooks webrtc + WORKING_DIRECTORY "${WEBRTC_DIR}" ) message(STATUS "WebRTC: checkout \"${WEBRTC_BRANCH}\"") execute_command( - COMMAND git checkout . - WORKING_DIRECTORY "${WEBRTC_SRC}" + COMMAND git checkout . + WORKING_DIRECTORY "${WEBRTC_SRC}" ) execute_command( - COMMAND git checkout ${WEBRTC_BRANCH} - WORKING_DIRECTORY "${WEBRTC_SRC}" + COMMAND git checkout ${WEBRTC_BRANCH} + WORKING_DIRECTORY "${WEBRTC_SRC}" ) message(STATUS "WebRTC: sync") execute_command( - COMMAND gclient sync - WORKING_DIRECTORY "${WEBRTC_DIR}" + COMMAND gclient sync + WORKING_DIRECTORY "${WEBRTC_DIR}" ) if(LINUX) - sysroot_install() + sysroot_install() endif() file(GLOB PATCHES "${CMAKE_CURRENT_LIST_DIR}/patches/${SOURCE_TARGET}/*.patch") if (PATCHES) - message(STATUS "WebRTC: patch") - - foreach(PATCH ${PATCHES}) - message(STATUS "Applying ${PATCH}") - - execute_process( - COMMAND patch -p0 --forward - WORKING_DIRECTORY "${WEBRTC_SRC_DIR}" - INPUT_FILE "${PATCH}" - OUTPUT_VARIABLE OUTPUT - RESULT_VARIABLE RESULT) - - if (RESULT EQUAL 0) - message(STATUS "Patch applied: ${PATCH}") - endif() - endforeach(PATCH) + message(STATUS "WebRTC: patch") + + foreach(PATCH ${PATCHES}) + message(STATUS "Applying ${PATCH}") + + execute_process( + COMMAND patch -p0 --forward + WORKING_DIRECTORY "${WEBRTC_SRC_DIR}" + INPUT_FILE "${PATCH}" + OUTPUT_VARIABLE OUTPUT + RESULT_VARIABLE RESULT) + + if (RESULT EQUAL 0) + message(STATUS "Patch applied: ${PATCH}") + endif() + endforeach(PATCH) endif() message(STATUS "WebRTC: generate") @@ -262,22 +262,22 @@ rtc_use_h264=true \ symbol_level=0") if(LINUX) - if(${TARGET_CPU} STREQUAL "arm") - set(COMPILE_ARGS "${COMPILE_ARGS} custom_toolchain=\"//build/toolchain/linux:clang_arm\"") - elseif(${TARGET_CPU} STREQUAL "arm64") - set(COMPILE_ARGS "${COMPILE_ARGS} custom_toolchain=\"//build/toolchain/linux:clang_arm64\"") - endif() + if(${TARGET_CPU} STREQUAL "arm") + set(COMPILE_ARGS "${COMPILE_ARGS} custom_toolchain=\"//build/toolchain/linux:clang_arm\"") + elseif(${TARGET_CPU} STREQUAL "arm64") + set(COMPILE_ARGS "${COMPILE_ARGS} custom_toolchain=\"//build/toolchain/linux:clang_arm64\"") + endif() endif() execute_command( - COMMAND gn gen ${WEBRTC_BUILD} --args=${COMPILE_ARGS} - WORKING_DIRECTORY "${WEBRTC_SRC}" + COMMAND gn gen ${WEBRTC_BUILD} --args=${COMPILE_ARGS} + WORKING_DIRECTORY "${WEBRTC_SRC}" ) message(STATUS "WebRTC: compile") execute_command( - COMMAND ninja -C "${WEBRTC_BUILD}" - WORKING_DIRECTORY "${WEBRTC_SRC}" + COMMAND ninja -C "${WEBRTC_BUILD}" + WORKING_DIRECTORY "${WEBRTC_SRC}" ) if(LINUX) @@ -319,70 +319,70 @@ if(LINUX) ) endif() elseif(WIN32) - # Collect lib++ objects - file(GLOB_RECURSE LibCPP_OBJS - ${WEBRTC_SRC}/${WEBRTC_BUILD}/obj/buildtools/third_party/libc++/libc++/*.obj - ) - - # Create static libraries - execute_command( - COMMAND ${CMAKE_LINKER} /LIB /OUT:${WEBRTC_SRC}/${WEBRTC_BUILD}/obj/c++.lib ${LibCPP_OBJS} - ) - - # Install libc++ headers and libraries - install( - FILES - "${WEBRTC_SRC}/${WEBRTC_BUILD}/obj/c++.lib" - DESTINATION - "${WEBRTC_INSTALL_DIR}/lib" - ) - install( - DIRECTORY "${WEBRTC_SRC}/third_party/libc++/src/include" - DESTINATION "${WEBRTC_INSTALL_DIR}/include/third_party/libc++" - ) - install( - DIRECTORY "${WEBRTC_SRC}/buildtools/third_party/libc++/" - DESTINATION "${WEBRTC_INSTALL_DIR}/include/third_party/libc++" - ) + # Collect lib++ objects + file(GLOB_RECURSE LibCPP_OBJS + ${WEBRTC_SRC}/${WEBRTC_BUILD}/obj/buildtools/third_party/libc++/libc++/*.obj + ) + + # Create static libraries + execute_command( + COMMAND ${CMAKE_LINKER} /LIB /OUT:${WEBRTC_SRC}/${WEBRTC_BUILD}/obj/c++.lib ${LibCPP_OBJS} + ) + + # Install libc++ headers and libraries + install( + FILES + "${WEBRTC_SRC}/${WEBRTC_BUILD}/obj/c++.lib" + DESTINATION + "${WEBRTC_INSTALL_DIR}/lib" + ) + install( + DIRECTORY "${WEBRTC_SRC}/third_party/libc++/src/include" + DESTINATION "${WEBRTC_INSTALL_DIR}/include/third_party/libc++" + ) + install( + DIRECTORY "${WEBRTC_SRC}/buildtools/third_party/libc++/" + DESTINATION "${WEBRTC_INSTALL_DIR}/include/third_party/libc++" + ) endif() install(FILES "${WEBRTC_LIB_PATH}" DESTINATION "${WEBRTC_INSTALL_DIR}/lib") install( - DIRECTORY "${WEBRTC_SRC}/" - DESTINATION "${WEBRTC_INSTALL_DIR}/include" - FILES_MATCHING - PATTERN "*.h" - PATTERN "*.inc" - REGEX /src/base/ EXCLUDE - REGEX /src/build/ EXCLUDE - REGEX /src/build_overrides/ EXCLUDE - REGEX /src/buildtools/ EXCLUDE - REGEX /src/data/ EXCLUDE - REGEX /src/docs/ EXCLUDE - REGEX /src/examples/ EXCLUDE - REGEX /src/out/ EXCLUDE - REGEX /src/resources/ EXCLUDE - REGEX /src/sdk/ EXCLUDE - REGEX /src/stats/ EXCLUDE - REGEX /src/style-guide/ EXCLUDE - REGEX /src/test/ EXCLUDE - REGEX /src/testing/ EXCLUDE - REGEX "/src/third_party/(a[c-z].*|[b-k]|l[a-h|k-z].*|lib[a-x].*|[m-z])" EXCLUDE - REGEX /src/tools/ EXCLUDE - REGEX /src/tools_webrtc/ EXCLUDE - REGEX /test/ EXCLUDE + DIRECTORY "${WEBRTC_SRC}/" + DESTINATION "${WEBRTC_INSTALL_DIR}/include" + FILES_MATCHING + PATTERN "*.h" + PATTERN "*.inc" + REGEX /src/base/ EXCLUDE + REGEX /src/build/ EXCLUDE + REGEX /src/build_overrides/ EXCLUDE + REGEX /src/buildtools/ EXCLUDE + REGEX /src/data/ EXCLUDE + REGEX /src/docs/ EXCLUDE + REGEX /src/examples/ EXCLUDE + REGEX /src/out/ EXCLUDE + REGEX /src/resources/ EXCLUDE + REGEX /src/sdk/ EXCLUDE + REGEX /src/stats/ EXCLUDE + REGEX /src/style-guide/ EXCLUDE + REGEX /src/test/ EXCLUDE + REGEX /src/testing/ EXCLUDE + REGEX "/src/third_party/(a[c-z].*|[b-k]|l[a-h|k-z].*|lib[a-x].*|[m-z])" EXCLUDE + REGEX /src/tools/ EXCLUDE + REGEX /src/tools_webrtc/ EXCLUDE + REGEX /test/ EXCLUDE ) # Delete empty directories install(CODE " - file(GLOB_RECURSE headers LIST_DIRECTORIES true ${WEBRTC_INSTALL_DIR}/include/!*) + file(GLOB_RECURSE headers LIST_DIRECTORIES true ${WEBRTC_INSTALL_DIR}/include/!*) - foreach(path \${headers}) - file(GLOB result \"\${path}/*\") - list(LENGTH result file_count) + foreach(path \${headers}) + file(GLOB result \"\${path}/*\") + list(LENGTH result file_count) - if(file_count EQUAL 0) - # DIR is empty - file(REMOVE_RECURSE \${path}) - endif() - endforeach() + if(file_count EQUAL 0) + # DIR is empty + file(REMOVE_RECURSE \${path}) + endif() + endforeach() ") diff --git a/webrtc-jni/src/main/cpp/toolchain/aarch32-linux-clang.cmake b/webrtc-jni/src/main/cpp/toolchain/aarch32-linux-clang.cmake index b4358e03..b962ad60 100644 --- a/webrtc-jni/src/main/cpp/toolchain/aarch32-linux-clang.cmake +++ b/webrtc-jni/src/main/cpp/toolchain/aarch32-linux-clang.cmake @@ -1,8 +1,8 @@ -set(CMAKE_SYSTEM_NAME Linux) -set(CMAKE_SYSTEM_PROCESSOR arm) -set(CMAKE_C_COMPILER /opt/clang/bin/clang) -set(CMAKE_CXX_COMPILER /opt/clang/bin/clang++) -set(CMAKE_AR /opt/clang/bin/llvm-ar) +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR arm) +set(CMAKE_C_COMPILER /opt/clang/bin/clang) +set(CMAKE_CXX_COMPILER /opt/clang/bin/clang++) +set(CMAKE_AR /opt/clang/bin/llvm-ar) set(TARGET_TRIPLE arm-linux-gnueabihf) @@ -14,16 +14,14 @@ foreach(LINKER SHARED_LINKER) set(CMAKE_${LINKER}_FLAGS "-fuse-ld=lld -Wl,-s -v -Wl,--verbose") endforeach() +# IMPORTANT: Find sysroot but DO NOT set CMAKE_SYSROOT yet file(GLOB LINUX_SYSROOT "/opt/sysroot/debian*armhf*") if(NOT LINUX_SYSROOT) message(FATAL_ERROR "No debian armhf sysroot found in /opt/sysroot/") endif() -set(CMAKE_SYSROOT ${LINUX_SYSROOT}) +# Store sysroot path for later application +# This will be set after project() call in the main CMakeLists.txt +set(DEFERRED_SYSROOT ${LINUX_SYSROOT}) -# Make sure CMake finds libraries and headers in the sysroot -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) - -set(TARGET_CPU "arm") \ No newline at end of file +set(TARGET_CPU "arm") \ No newline at end of file diff --git a/webrtc-jni/src/main/cpp/toolchain/aarch64-linux-clang.cmake b/webrtc-jni/src/main/cpp/toolchain/aarch64-linux-clang.cmake index 04860b26..e151e000 100644 --- a/webrtc-jni/src/main/cpp/toolchain/aarch64-linux-clang.cmake +++ b/webrtc-jni/src/main/cpp/toolchain/aarch64-linux-clang.cmake @@ -1,8 +1,8 @@ -set(CMAKE_SYSTEM_NAME Linux) -set(CMAKE_SYSTEM_PROCESSOR aarch64) -set(CMAKE_C_COMPILER /opt/clang/bin/clang) -set(CMAKE_CXX_COMPILER /opt/clang/bin/clang++) -set(CMAKE_AR /opt/clang/bin/llvm-ar) +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR aarch64) +set(CMAKE_C_COMPILER /opt/clang/bin/clang) +set(CMAKE_CXX_COMPILER /opt/clang/bin/clang++) +set(CMAKE_AR /opt/clang/bin/llvm-ar) set(TARGET_TRIPLE aarch64-linux-gnu) @@ -14,16 +14,14 @@ foreach(LINKER SHARED_LINKER) set(CMAKE_${LINKER}_FLAGS "-fuse-ld=lld -Wl,-s -v -Wl,--verbose") endforeach() +# IMPORTANT: Find sysroot but DO NOT set CMAKE_SYSROOT yet file(GLOB LINUX_SYSROOT "/opt/sysroot/debian*arm64*") if(NOT LINUX_SYSROOT) message(FATAL_ERROR "No debian arm64 sysroot found in /opt/sysroot/") endif() -set(CMAKE_SYSROOT ${LINUX_SYSROOT}) +# Store sysroot path for later application +# This will be set after project() call in the main CMakeLists.txt +set(DEFERRED_SYSROOT ${LINUX_SYSROOT}) -# Make sure CMake finds libraries and headers in the sysroot -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) - -set(TARGET_CPU "arm64") \ No newline at end of file +set(TARGET_CPU "arm64") \ No newline at end of file diff --git a/webrtc-jni/src/main/cpp/toolchain/x86_64-linux-clang.cmake b/webrtc-jni/src/main/cpp/toolchain/x86_64-linux-clang.cmake index 7b4c53b4..da387d0e 100644 --- a/webrtc-jni/src/main/cpp/toolchain/x86_64-linux-clang.cmake +++ b/webrtc-jni/src/main/cpp/toolchain/x86_64-linux-clang.cmake @@ -1,8 +1,8 @@ -set(CMAKE_SYSTEM_NAME Linux) -set(CMAKE_SYSTEM_PROCESSOR x86_64) -set(CMAKE_C_COMPILER /opt/clang/bin/clang) -set(CMAKE_CXX_COMPILER /opt/clang/bin/clang++) -set(CMAKE_AR /opt/clang/bin/llvm-ar) +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR x86_64) +set(CMAKE_C_COMPILER /opt/clang/bin/clang) +set(CMAKE_CXX_COMPILER /opt/clang/bin/clang++) +set(CMAKE_AR /opt/clang/bin/llvm-ar) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -nostdinc++ -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++ -v -Wl,--verbose") @@ -11,16 +11,14 @@ foreach(LINKER SHARED_LINKER) set(CMAKE_${LINKER}_FLAGS "-fuse-ld=lld -Wl,-s -v -Wl,--verbose") endforeach() +# IMPORTANT: Find sysroot but DO NOT set CMAKE_SYSROOT yet file(GLOB LINUX_SYSROOT "/opt/sysroot/debian*amd64*") if(NOT LINUX_SYSROOT) message(FATAL_ERROR "No debian amd64 sysroot found in /opt/sysroot/") endif() -set(CMAKE_SYSROOT ${LINUX_SYSROOT}) +# Store sysroot path for later application +# This will be set after project() call in the main CMakeLists.txt +set(DEFERRED_SYSROOT ${LINUX_SYSROOT}) -# Make sure CMake finds libraries and headers in the sysroot -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) - -set(TARGET_CPU "x64") +set(TARGET_CPU "x64") diff --git a/webrtc-jni/src/main/cpp/toolchain/x86_64-windows-clang.cmake b/webrtc-jni/src/main/cpp/toolchain/x86_64-windows-clang.cmake index 785d513d..28253095 100644 --- a/webrtc-jni/src/main/cpp/toolchain/x86_64-windows-clang.cmake +++ b/webrtc-jni/src/main/cpp/toolchain/x86_64-windows-clang.cmake @@ -1 +1 @@ -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MT /EHsc -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -D_LIBCPP_BUILDING_LIBRARY -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MT /EHsc -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -D_LIBCPP_BUILDING_LIBRARY -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE") From 872075c6da99fd6ea7793fb0c64da083a4407b8c Mon Sep 17 00:00:00 2001 From: Alex Andres Date: Sun, 6 Jul 2025 12:45:39 +0200 Subject: [PATCH 07/10] build: remove libc++ package installation from sysroot setup --- .github/actions/prepare-linux/action.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/actions/prepare-linux/action.yml b/.github/actions/prepare-linux/action.yml index 7b3fa1e6..399cfb3e 100644 --- a/.github/actions/prepare-linux/action.yml +++ b/.github/actions/prepare-linux/action.yml @@ -53,9 +53,6 @@ runs: sudo mkdir /opt/sysroot python3 webrtc-jni/src/main/cpp/dependencies/webrtc/linux/sysroot/install-sysroot.py --arch=amd64 sudo mv webrtc-jni/src/main/cpp/dependencies/webrtc/linux/debian* /opt/sysroot/ - - # Install libc++ packages in the sysroot - sudo apt install --root=/opt/sysroot/debian_bullseye_amd64-sysroot libc++-dev libc++abi-dev shell: bash - name: Install required packages for arm From e44503fc1fbeba06bc17f6a3c451dc4785d413ea Mon Sep 17 00:00:00 2001 From: Alex Andres Date: Sun, 6 Jul 2025 20:29:10 +0200 Subject: [PATCH 08/10] build: removing libc++ from the Windows build --- webrtc-jni/src/main/cpp/CMakeLists.txt | 22 +++++++------- .../dependencies/jni-voithos/CMakeLists.txt | 2 +- .../cpp/dependencies/webrtc/CMakeLists.txt | 30 ++----------------- 3 files changed, 14 insertions(+), 40 deletions(-) diff --git a/webrtc-jni/src/main/cpp/CMakeLists.txt b/webrtc-jni/src/main/cpp/CMakeLists.txt index 60c5cb95..fd4faca7 100644 --- a/webrtc-jni/src/main/cpp/CMakeLists.txt +++ b/webrtc-jni/src/main/cpp/CMakeLists.txt @@ -7,17 +7,17 @@ endif() project(webrtc-java) -# Apply the sysroot configuration for the actual build -if(DEFERRED_SYSROOT) - # Configure sysroot for all subsequent operations - set(CMAKE_SYSROOT ${DEFERRED_SYSROOT}) - # Restrict library and header searches to sysroot only - set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) - set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) - set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) -endif() - if(UNIX AND NOT APPLE) + # Apply the sysroot configuration for the actual build + if(DEFERRED_SYSROOT) + # Configure sysroot for all subsequent operations + set(CMAKE_SYSROOT ${DEFERRED_SYSROOT}) + # Restrict library and header searches to sysroot only + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) + endif() + set(LINUX TRUE) endif() @@ -99,7 +99,7 @@ elseif(LINUX) target_link_libraries(${PROJECT_NAME} ${CXX_LIBS} pulse udev) elseif(WIN32) - target_link_libraries(${PROJECT_NAME} c++.lib msvcprt.lib dwmapi.lib mf.lib mfreadwrite.lib mfplat.lib mfuuid.lib shcore.lib) + target_link_libraries(${PROJECT_NAME} dwmapi.lib mf.lib mfreadwrite.lib mfplat.lib mfuuid.lib shcore.lib) endif() install(TARGETS ${PROJECT_NAME} diff --git a/webrtc-jni/src/main/cpp/dependencies/jni-voithos/CMakeLists.txt b/webrtc-jni/src/main/cpp/dependencies/jni-voithos/CMakeLists.txt index 26df23d2..424504df 100644 --- a/webrtc-jni/src/main/cpp/dependencies/jni-voithos/CMakeLists.txt +++ b/webrtc-jni/src/main/cpp/dependencies/jni-voithos/CMakeLists.txt @@ -80,6 +80,6 @@ target_include_directories(${PROJECT_NAME} include/jni/${JNI_PLATFORM} ) -if(LINUX OR WIN32) +if(LINUX) target_link_libraries(${PROJECT_NAME} PRIVATE webrtc) endif() \ No newline at end of file diff --git a/webrtc-jni/src/main/cpp/dependencies/webrtc/CMakeLists.txt b/webrtc-jni/src/main/cpp/dependencies/webrtc/CMakeLists.txt index 6f8b2b37..bd97147f 100644 --- a/webrtc-jni/src/main/cpp/dependencies/webrtc/CMakeLists.txt +++ b/webrtc-jni/src/main/cpp/dependencies/webrtc/CMakeLists.txt @@ -15,7 +15,7 @@ add_library(${PROJECT_NAME} STATIC pseudo.cxx pseudo.hxx) set(CUSTOM_LIBCXX false) -if((LINUX AND NOT TARGET_CPU MATCHES "^arm") OR WIN32) +if(LINUX AND NOT TARGET_CPU MATCHES "^arm") set(CUSTOM_LIBCXX true) endif() @@ -143,7 +143,7 @@ else() set(TARGET_LIBCPP_ABI_INC_DIR ${WEBRTC_SRC}/third_party/libc++abi/src/include) endif() -if((LINUX AND NOT TARGET_CPU MATCHES "^arm") OR WIN32) +if(LINUX AND NOT TARGET_CPU MATCHES "^arm") target_include_directories(${PROJECT_NAME} PUBLIC ${TARGET_LIBCPP_BUILDTOOLS_INC_DIR}) target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC ${TARGET_LIBCPP_INC_DIR} ${TARGET_LIBCPP_ABI_INC_DIR}) @@ -318,32 +318,6 @@ if(LINUX) DESTINATION "${WEBRTC_INSTALL_DIR}/include/third_party/libc++abi" ) endif() -elseif(WIN32) - # Collect lib++ objects - file(GLOB_RECURSE LibCPP_OBJS - ${WEBRTC_SRC}/${WEBRTC_BUILD}/obj/buildtools/third_party/libc++/libc++/*.obj - ) - - # Create static libraries - execute_command( - COMMAND ${CMAKE_LINKER} /LIB /OUT:${WEBRTC_SRC}/${WEBRTC_BUILD}/obj/c++.lib ${LibCPP_OBJS} - ) - - # Install libc++ headers and libraries - install( - FILES - "${WEBRTC_SRC}/${WEBRTC_BUILD}/obj/c++.lib" - DESTINATION - "${WEBRTC_INSTALL_DIR}/lib" - ) - install( - DIRECTORY "${WEBRTC_SRC}/third_party/libc++/src/include" - DESTINATION "${WEBRTC_INSTALL_DIR}/include/third_party/libc++" - ) - install( - DIRECTORY "${WEBRTC_SRC}/buildtools/third_party/libc++/" - DESTINATION "${WEBRTC_INSTALL_DIR}/include/third_party/libc++" - ) endif() install(FILES "${WEBRTC_LIB_PATH}" DESTINATION "${WEBRTC_INSTALL_DIR}/lib") From 0cb9a30cc6767da9c9d2c164bac89422e44d4ac7 Mon Sep 17 00:00:00 2001 From: Alex Andres Date: Sun, 6 Jul 2025 20:49:24 +0200 Subject: [PATCH 09/10] build: update package installation commands and enhance sysroot configuration --- .github/actions/prepare-linux/action.yml | 36 +++--------------------- webrtc-jni/src/main/cpp/CMakeLists.txt | 1 + 2 files changed, 5 insertions(+), 32 deletions(-) diff --git a/.github/actions/prepare-linux/action.yml b/.github/actions/prepare-linux/action.yml index 399cfb3e..0a7f1b96 100644 --- a/.github/actions/prepare-linux/action.yml +++ b/.github/actions/prepare-linux/action.yml @@ -30,8 +30,8 @@ runs: - name: Install required packages run: | - sudo apt-get update - sudo apt-get install -y libdbus-1-dev binutils cmake git locales lsb-release ninja-build pkg-config python3 python3-setuptools rsync unzip wget xz-utils + sudo apt update + sudo apt install -y binutils cmake git locales lsb-release ninja-build pkg-config python3 python3-setuptools rsync unzip wget xz-utils # Chromium Clang to be used with the clang toolchain file #curl -s https://raw.githubusercontent.com/chromium/chromium/main/tools/clang/scripts/update.py | python3 - --output-dir=/opt/clang @@ -42,7 +42,7 @@ runs: # Required for testing #pulseaudio --start - sudo apt-get install -y pipewire pipewire-pulse gstreamer1.0-pipewire libspa-0.2-bluetooth libspa-0.2-jack pipewire-audio-client-libraries + sudo apt install -y pipewire pipewire-pulse gstreamer1.0-pipewire libspa-0.2-bluetooth libspa-0.2-jack pipewire-audio-client-libraries systemctl --user daemon-reload systemctl --user --now enable pipewire{,-pulse}.{socket,service} shell: bash @@ -60,20 +60,6 @@ runs: run: | sudo apt install -y gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf - sudo dpkg --add-architecture armhf - - sudo rm /etc/apt/sources.list - - sudo tee -a /etc/apt/sources.list > /dev/null < /dev/null < Date: Mon, 7 Jul 2025 00:11:08 +0200 Subject: [PATCH 10/10] Update CMakeLists.txt --- webrtc-jni/src/main/cpp/CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/webrtc-jni/src/main/cpp/CMakeLists.txt b/webrtc-jni/src/main/cpp/CMakeLists.txt index 8646cdff..d97b6a41 100644 --- a/webrtc-jni/src/main/cpp/CMakeLists.txt +++ b/webrtc-jni/src/main/cpp/CMakeLists.txt @@ -13,6 +13,11 @@ if(UNIX AND NOT APPLE) # Configure sysroot for all subsequent operations set(CMAKE_SYSROOT ${DEFERRED_SYSROOT}) set(CMAKE_FIND_ROOT_PATH ${DEFERRED_SYSROOT}) + + # Set pkg-config environment + set(ENV{PKG_CONFIG_SYSROOT_DIR} "${DEFERRED_SYSROOT}") + set(ENV{PKG_CONFIG_PATH} "${DEFERRED_SYSROOT}/usr/lib/pkgconfig:${DEFERRED_SYSROOT}/usr/share/pkgconfig") + # Restrict library and header searches to sysroot only set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)