From 21f002105f1b40adab176ea029b744e8d087a3c3 Mon Sep 17 00:00:00 2001 From: Julien Wadel Date: Thu, 5 Oct 2023 16:29:40 +0200 Subject: [PATCH] Update CI files --- .../job-linux-desktop-archlinux-latest.yml | 2 +- .../job-linux-desktop-centos7.yml | 2 +- .../job-linux-desktop-debian10.yml | 99 ++++++---- .../job-linux-desktop-ubuntu-1804.yml | 179 ++++++++++++++++++ .../job-linux-desktop-ubuntu-rolling.yml | 2 +- .gitlab-ci-files/job-macosx-desktop.yml | 82 ++++---- .gitlab-ci-files/job-windows-desktop.yml | 52 +++-- .gitlab-ci.yml | 17 +- CMakeLists.txt | 3 +- Linphone/CMakeLists.txt | 13 +- Linphone/model/logger/LoggerModel.cpp | 3 +- cmake/GenerateAppMacos.cmake | 135 +++++++++++++ cmake/TasksMacos.cmake | 86 +++++++++ cmake/toolchains/toolchain-mac-arm64.cmake | 24 +++ cmake/toolchains/toolchain-mac-common.cmake | 106 +++++++++++ cmake/toolchains/toolchain-mac-x86_64.cmake | 24 +++ external/CMakeLists.txt | 21 -- 17 files changed, 709 insertions(+), 141 deletions(-) create mode 100644 .gitlab-ci-files/job-linux-desktop-ubuntu-1804.yml create mode 100644 cmake/GenerateAppMacos.cmake create mode 100644 cmake/TasksMacos.cmake create mode 100644 cmake/toolchains/toolchain-mac-arm64.cmake create mode 100644 cmake/toolchains/toolchain-mac-common.cmake create mode 100644 cmake/toolchains/toolchain-mac-x86_64.cmake diff --git a/.gitlab-ci-files/job-linux-desktop-archlinux-latest.yml b/.gitlab-ci-files/job-linux-desktop-archlinux-latest.yml index e9f810fdb..f320e0f63 100644 --- a/.gitlab-ci-files/job-linux-desktop-archlinux-latest.yml +++ b/.gitlab-ci-files/job-linux-desktop-archlinux-latest.yml @@ -100,7 +100,7 @@ job-archlinux-latest-ninja-clang-novideo: # - $NIGHTLY_MASTER # - $DEPLOY_LINUX # variables: -# CMAKE_OPTIONS: -DENABLE_APP_PACKAGING=YES -DENABLE_G729=ON +# CMAKE_OPTIONS: -DENABLE_APP_PACKAGING=YES -DENABLE_G729=ON -DENABLE_GPL_THIRD_PARTIES=ON # extends: job-archlinux-latest-makefile-clang # artifacts: # paths: diff --git a/.gitlab-ci-files/job-linux-desktop-centos7.yml b/.gitlab-ci-files/job-linux-desktop-centos7.yml index f81f11ae1..0c6f49e61 100644 --- a/.gitlab-ci-files/job-linux-desktop-centos7.yml +++ b/.gitlab-ci-files/job-linux-desktop-centos7.yml @@ -74,7 +74,7 @@ job-centos7-ninja-gcc-package: variables: - $DEPLOY_LINUX_CENTOS7 variables: - CMAKE_OPTIONS: -DENABLE_APP_PACKAGING=YES -DLINPHONE_BUILDER_SIGNING_IDENTITY=$GPG_SIGNING_KEYID -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON + CMAKE_OPTIONS: -DENABLE_APP_PACKAGING=YES -DLINPHONE_BUILDER_SIGNING_IDENTITY=$GPG_SIGNING_KEYID -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=ON CMAKE_GENERATOR: Ninja CC: gcc CXX: g++ diff --git a/.gitlab-ci-files/job-linux-desktop-debian10.yml b/.gitlab-ci-files/job-linux-desktop-debian10.yml index dc8a49cbd..cffc14393 100644 --- a/.gitlab-ci-files/job-linux-desktop-debian10.yml +++ b/.gitlab-ci-files/job-linux-desktop-debian10.yml @@ -1,7 +1,9 @@ +.factorize_debian10: &docker_image_platform_and_runner_tag + tags: [ "docker" ] + image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian10:$DEBIAN_10_IMAGE_VERSION + job-debian10-ninja-gcc: - tags: [ "docker-debian10" ] - image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian10:$DEBIAN_10_IMAGE_VERSION except: refs: - schedules @@ -11,14 +13,13 @@ job-debian10-ninja-gcc: CC: gcc CXX: g++ extends: .job-linux-desktop + <<: *docker_image_platform_and_runner_tag ################################################# # Nightly ################################################# job-debian10-makefile-gcc: - tags: [ "docker-debian10" ] - image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian10:$DEBIAN_10_IMAGE_VERSION only: variables: - $NIGHTLY_MASTER @@ -29,25 +30,19 @@ job-debian10-makefile-gcc: CXX: g++ ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS extends: .job-linux-desktop + <<: *docker_image_platform_and_runner_tag job-debian10-ninja-gcc-novideo: - tags: [ "docker-debian10" ] - image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian10:$DEBIAN_10_IMAGE_VERSION only: variables: - $NIGHTLY_MASTER variables: CMAKE_OPTIONS: -DENABLE_VIDEO=NO -DENABLE_PQCRYPTO=OFF - CMAKE_GENERATOR: Ninja - CC: gcc - CXX: g++ - extends: .job-linux-desktop + extends: job-debian10-ninja-gcc job-debian10-ninja-gcc-smallsdk: - tags: [ "docker-debian10" ] - image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian10:$DEBIAN_10_IMAGE_VERSION only: variables: - $NIGHTLY_MASTER @@ -57,20 +52,20 @@ job-debian10-ninja-gcc-smallsdk: CC: gcc CXX: g++ extends: .job-linux-desktop + <<: *docker_image_platform_and_runner_tag job-debian10-ninja-clang: - tags: [ "docker-debian10" ] only: variables: - $NIGHTLY_MASTER - image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian10:$DEBIAN_10_IMAGE_VERSION variables: CMAKE_GENERATOR: Ninja - CMAKE_OPTIONS: -DENABLE_PQCRYPTO=ON + CMAKE_OPTIONS: -DENABLE_DOC=ON -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=ON CC: clang CXX: clang++ extends: .job-linux-desktop + <<: *docker_image_platform_and_runner_tag job-debian10-ninja-clang-novideo: @@ -78,12 +73,10 @@ job-debian10-ninja-clang-novideo: variables: - $NIGHTLY_MASTER variables: - CMAKE_OPTIONS: -DENABLE_VIDEO=NO + CMAKE_OPTIONS: -DENABLE_VIDEO=NO -DENABLE_PQCRYPTO=OFF extends: job-debian10-ninja-clang job-debian10-makefile-clang: - tags: [ "docker-debian10" ] - image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian10:$DEBIAN_10_IMAGE_VERSION only: variables: - $NIGHTLY_MASTER @@ -95,39 +88,77 @@ job-debian10-makefile-clang: CXX: clang++ ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS extends: .job-linux-desktop + <<: *docker_image_platform_and_runner_tag ################################################# # Package - Nightly ################################################# -job-debian10-makefile-clang-package: +job-debian10-makefile-gcc-package: stage: package - tags: [ "docker-debian10" ] + tags: [ "docker-test-liblinphone" ] + image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian10:$DEBIAN_10_IMAGE_VERSION dependencies: [] only: variables: - $NIGHTLY_MASTER + - $PACKAGE_LINUX - $DEPLOY_LINUX variables: - CMAKE_OPTIONS: -DENABLE_APP_PACKAGING=YES -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON - extends: job-debian10-makefile-clang + CMAKE_OPTIONS: -DENABLE_APP_PACKAGING=YES -DLINPHONE_BUILDER_SIGNING_IDENTITY=$GPG_SIGNING_KEYID -DENABLE_G729=ON -DLINPHONE_SDK_MAKE_RELEASE_FILE_URL=$MAKE_RELEASE_FILE_URL/$LINUX_PLATFORM/$APP_FOLDER -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=ON + CMAKE_GENERATOR: Unix Makefiles + CC: gcc + CXX: g++ + APPIMAGETOOL_SIGN_PASSPHRASE: $GPG_SIGNING_PASS + extends: .job-linux-desktop + script: + - echo "$GPG_SIGNING_PUB" > file.key && sed -i 's/\r /\n/g' file.key && chmod 600 file.key + - gpg --import file.key + - rm -f file.key + - echo "$GPG_SIGNING_KEY" > file.key && sed -i 's/\r /\n/g' file.key && chmod 600 file.key + - base64 -w 0 file.key | base64 -d | gpg --import --no-tty --batch --yes + - rm -f file.key + - cmake --version + - export CC=$CC + - export CXX=$CXX + - mkdir -p build/OUTPUT + - echo $CI_BUILD_TYPE + - echo $CMAKE_GENERATOR + - echo $DEFAULT_LINUX_CMAKE_OPTIONS + - echo $CMAKE_SANITIZER_OPTIONS + - cd build + - cmake .. -G "$CMAKE_GENERATOR" -DCMAKE_VERBOSE_MAKEFILE=ON -DLINPHONESDK_PLATFORM=Desktop -DCMAKE_BUILD_TYPE=$CI_BUILD_TYPE $DEFAULT_LINUX_CMAKE_OPTIONS $CMAKE_OPTIONS $SCHEDULE_CMAKE_OPTIONS $CMAKE_SANITIZER_OPTIONS + - cmake --build . --target install --config $CI_BUILD_TYPE $LBC_NODEBUG_OPTIONS artifacts: paths: - - build/OUTPUT/Packages/Linphone*.AppImage + - build/OUTPUT/* expire_in: 1 week ################################################# # Deploy - Nightly ################################################# -job-debian10-makefile-clang-deploy: - stage: deploy - tags: [ "docker-debian10" ] - dependencies: - - job-debian10-makefile-clang-package - only: - variables: - - $NIGHTLY_MASTER - - $DEPLOY_LINUX - script: - - scp build/OUTPUT/Packages/Linphone*.AppImage $DEPLOY_SERVER:$APPIMAGE_UPLOAD_DIRECTORY/ +#job-debian10-makefile-gcc-deploy: +# stage: deploy +# tags: [ "docker" ] +# dependencies: +# - job-debian10-makefile-gcc-package +# only: +# variables: +# - $NIGHTLY_MASTER +# - $DEPLOY_LINUX +# script: +# - rsync -rlv --ignore-existing build/OUTPUT/Packages/*.AppImage $DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$LINUX_PLATFORM/$APP_FOLDER +# - rsync -rlv build/OUTPUT/RELEASE $DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$LINUX_PLATFORM +# - rsync -rlv build/OUTPUT/RELEASE $MAIN_DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$LINUX_PLATFORM + +#job-debian10-makefile-gcc-plugins-deploy: +# stage: deploy +# tags: [ "deploy" ] +# needs: +# - job-debian10-makefile-gcc +# only: +# variables: +# - $DEPLOY_PLUGINS +# script: +# - rsync -rlv --ignore-existing build/OUTPUT/plugins/app/*.so $DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$LINUX_PLATFORM/$APP_FOLDER/plugins/ diff --git a/.gitlab-ci-files/job-linux-desktop-ubuntu-1804.yml b/.gitlab-ci-files/job-linux-desktop-ubuntu-1804.yml new file mode 100644 index 000000000..e54e5791d --- /dev/null +++ b/.gitlab-ci-files/job-linux-desktop-ubuntu-1804.yml @@ -0,0 +1,179 @@ + + +.factorize_ubuntu1804: &docker_image_platform_and_runner_tag + tags: [ "docker" ] + image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-ubuntu-18-04-lts:$UBUNTU_1804_IMAGE_VERSION + +job-ubuntu1804-ninja-gcc: + except: + refs: + - schedules + variables: + CMAKE_GENERATOR: Ninja + CMAKE_OPTIONS: -DENABLE_PQCRYPTO=ON + CC: gcc + CXX: g++ + extends: .job-linux-desktop + <<: *docker_image_platform_and_runner_tag + +job-ubuntu1804-ninja-gcc-smallsdk: + except: + refs: + - schedules + variables: + CMAKE_OPTIONS: -DENABLE_VIDEO=NO -DENABLE_ADVANCED_IM=NO -DENABLE_DB_STORAGE=NO -DENABLE_PQCRYPTO=OFF + extends: job-ubuntu1804-ninja-gcc + + +################################################# +# Nightly +################################################# + +job-ubuntu1804-makefile-gcc: + only: + variables: + - $NIGHTLY_MASTER + variables: + CMAKE_GENERATOR: Unix Makefiles + CMAKE_OPTIONS: -DENABLE_PQCRYPTO=ON + CC: gcc + CXX: g++ + ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS + extends: .job-linux-desktop + <<: *docker_image_platform_and_runner_tag + +job-ubuntu1804-ninja-gcc-novideo: + only: + variables: + - $NIGHTLY_MASTER + variables: + CMAKE_OPTIONS: -DENABLE_VIDEO=NO -DENABLE_PQCRYPTO=OFF + extends: job-ubuntu1804-ninja-gcc + +job-ubuntu1804-ninja-clang: + only: + variables: + - $NIGHTLY_MASTER + variables: + CMAKE_OPTIONS: -DENABLE_DOC=ON -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=ON + CMAKE_GENERATOR: Ninja + CC: clang + CXX: clang++ + extends: .job-linux-desktop + <<: *docker_image_platform_and_runner_tag + +job-ubuntu1804-ninja-clang-novideo: + only: + variables: + - $NIGHTLY_MASTER + variables: + CMAKE_OPTIONS: -DENABLE_VIDEO=NO -DENABLE_PQCRYPTO=OFF + extends: job-ubuntu1804-ninja-clang + +job-ubuntu1804-makefile-gcc: + only: + variables: + - $NIGHTLY_MASTER + - $DEPLOY_PLUGINS + variables: + CMAKE_OPTIONS: -DLINPHONE_BUILDER_SIGNING_IDENTITY=$GPG_SIGNING_KEYID -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=ON + CMAKE_GENERATOR: Unix Makefiles + CC: gcc + CXX: g++ + ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS + APPIMAGETOOL_SIGN_PASSPHRASE: $GPG_SIGNING_PASS + script: + - echo "$GPG_SIGNING_PUB" > file.key && sed -i 's/\r /\n/g' file.key && chmod 600 file.key + - gpg --import file.key + - rm -f file.key + - echo "$GPG_SIGNING_KEY" > file.key && sed -i 's/\r /\n/g' file.key && chmod 600 file.key + - base64 -w 0 file.key | base64 -d | gpg --import --no-tty --batch --yes + - rm -f file.key + - cmake --version + - export CC=$CC + - export CXX=$CXX + - mkdir -p build/OUTPUT + - echo $CI_BUILD_TYPE + - echo $CMAKE_GENERATOR + - echo $DEFAULT_LINUX_CMAKE_OPTIONS + - echo $CMAKE_SANITIZER_OPTIONS + - cd build + - cmake .. -G "$CMAKE_GENERATOR" -DCMAKE_VERBOSE_MAKEFILE=ON -DLINPHONESDK_PLATFORM=Desktop -DCMAKE_BUILD_TYPE=$CI_BUILD_TYPE $DEFAULT_LINUX_CMAKE_OPTIONS $CMAKE_OPTIONS $SCHEDULE_CMAKE_OPTIONS $CMAKE_SANITIZER_OPTIONS + - cmake --build . --target install --config $CI_BUILD_TYPE $LBC_NODEBUG_OPTIONS + extends: .job-linux-desktop + <<: *docker_image_platform_and_runner_tag + +################################################# +# Package - Nightly +################################################# + +job-ubuntu1804-makefile-gcc-package: + stage: package + tags: [ "docker-test-liblinphone" ] + image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-ubuntu-18-04-lts:$UBUNTU_1804_IMAGE_VERSION + dependencies: [] + only: + variables: + - $NIGHTLY_MASTER + - $PACKAGE_LINUX + - $DEPLOY_LINUX + variables: + CMAKE_OPTIONS: -DENABLE_APP_PACKAGING=YES -DLINPHONE_BUILDER_SIGNING_IDENTITY=$GPG_SIGNING_KEYID -DENABLE_G729=ON -DLINPHONE_SDK_MAKE_RELEASE_FILE_URL=$MAKE_RELEASE_FILE_URL/$LINUX_PLATFORM/$APP_FOLDER -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=ON + CMAKE_GENERATOR: Unix Makefiles + CC: gcc + CXX: g++ + APPIMAGETOOL_SIGN_PASSPHRASE: $GPG_SIGNING_PASS + extends: .job-linux-desktop + script: + - echo "$GPG_SIGNING_PUB" > file.key && sed -i 's/\r /\n/g' file.key && chmod 600 file.key + - gpg --import file.key + - rm -f file.key + - echo "$GPG_SIGNING_KEY" > file.key && sed -i 's/\r /\n/g' file.key && chmod 600 file.key + - base64 -w 0 file.key | base64 -d | gpg --import --no-tty --batch --yes + - rm -f file.key + - cmake --version + - export CC=$CC + - export CXX=$CXX + - mkdir -p build/OUTPUT + - echo $CI_BUILD_TYPE + - echo $CMAKE_GENERATOR + - echo $DEFAULT_LINUX_CMAKE_OPTIONS + - echo $CMAKE_SANITIZER_OPTIONS + - cd build + - cmake .. -G "$CMAKE_GENERATOR" -DCMAKE_VERBOSE_MAKEFILE=ON -DLINPHONESDK_PLATFORM=Desktop -DCMAKE_BUILD_TYPE=$CI_BUILD_TYPE $DEFAULT_LINUX_CMAKE_OPTIONS $CMAKE_OPTIONS $SCHEDULE_CMAKE_OPTIONS $CMAKE_SANITIZER_OPTIONS + - cmake --build . --target install --config $CI_BUILD_TYPE $LBC_NODEBUG_OPTIONS + artifacts: + paths: + - build/OUTPUT/* + expire_in: 1 week + +################################################# +# Deploy - Nightly +################################################# + +#job-ubuntu1804-makefile-gcc-deploy: +# stage: deploy +# tags: [ "deploy" ] +# needs: +# - job-ubuntu1804-makefile-gcc-package +# only: +# variables: +# - $NIGHTLY_MASTER +# - $DEPLOY_LINUX +# script: +# - rsync -rlv --ignore-existing build/OUTPUT/Packages/*.AppImage $DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$LINUX_PLATFORM/$APP_FOLDER +# - rsync -rlv build/OUTPUT/RELEASE $DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$LINUX_PLATFORM +# - rsync -rlv build/OUTPUT/RELEASE $MAIN_DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$LINUX_PLATFORM + + +#job-ubuntu1804-makefile-gcc-plugins-deploy: +# stage: deploy +# tags: [ "deploy" ] +# needs: +# - job-ubuntu1804-makefile-gcc +# only: +# variables: +# - $DEPLOY_PLUGINS +# script: +# - rsync -rlv --ignore-existing build/OUTPUT/plugins/app/*.so $DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$LINUX_PLATFORM/$APP_FOLDER/plugins/ + diff --git a/.gitlab-ci-files/job-linux-desktop-ubuntu-rolling.yml b/.gitlab-ci-files/job-linux-desktop-ubuntu-rolling.yml index 25304c964..cb3034ac7 100644 --- a/.gitlab-ci-files/job-linux-desktop-ubuntu-rolling.yml +++ b/.gitlab-ci-files/job-linux-desktop-ubuntu-rolling.yml @@ -92,7 +92,7 @@ job-ubuntu-rolling-ninja-clang-novideo: # - $NIGHTLY_MASTER # - $DEPLOY_LINUX # variables: -# CMAKE_OPTIONS: -DENABLE_APP_PACKAGING=YES -DENABLE_G729=ON +# CMAKE_OPTIONS: -DENABLE_APP_PACKAGING=YES -DENABLE_G729=ON -DENABLE_GPL_THIRD_PARTIES=ON # extends: job-ubuntu-rolling-makefile-clang # artifacts: # paths: diff --git a/.gitlab-ci-files/job-macosx-desktop.yml b/.gitlab-ci-files/job-macosx-desktop.yml index cb804cbec..92443a964 100644 --- a/.gitlab-ci-files/job-macosx-desktop.yml +++ b/.gitlab-ci-files/job-macosx-desktop.yml @@ -5,8 +5,10 @@ .build_all_script: &build_all_script | ccache -s - export Qt5_DIR=~/Qt/$QT_MAC_VER/lib/cmake/Qt5 + export Qt6_DIR=~/Qt/$QT_MAC_VER/lib/cmake/Qt6 + echo $Qt6_DIR export PATH=~/Qt/$QT_MAC_VER/bin:$PATH + echo $PATH if [ -d "build" ]; then rm -rf build; fi; mkdir -p build/OUTPUT cd build @@ -16,22 +18,18 @@ echo $DEFAULT_MACOS_CMAKE_OPTIONS echo $CMAKE_OPTIONS echo $ADDITIONAL_BUILD_OPTIONS - cmake .. -G "$CMAKE_GENERATOR" -DLINPHONESDK_PLATFORM=Desktop -DCMAKE_OSX_DEPLOYMENT_TARGET=10.9 -DCMAKE_BUILD_TYPE=$CI_BUILD_TYPE $DEFAULT_MACOS_CMAKE_OPTIONS $XCODE_OPTIONS $CMAKE_OPTIONS $SCHEDULE_CMAKE_OPTIONS -DLINPHONE_BUILDER_SIGNING_IDENTITY="$MACOS_SIGNING_IDENTITY" -DLINPHONESDK_MACOS_ARCHS="$LINPHONESDK_MACOS_ARCHS" -DLINPHONESDK_OPENSSL_ROOT_DIR_X86_64="$LINPHONESDK_OPENSSL_ROOT_DIR_X86_64" -DLINPHONESDK_OPENSSL_ROOT_DIR_ARM64="$LINPHONESDK_OPENSSL_ROOT_DIR_ARM64" $RELEASE_FILE + cmake .. -G "$CMAKE_GENERATOR" -DCMAKE_OSX_DEPLOYMENT_TARGET=10.15 -DCMAKE_BUILD_TYPE=$CI_BUILD_TYPE $DEFAULT_MACOS_CMAKE_OPTIONS -DLINPHONE_BUILDER_SIGNING_IDENTITY="$MACOS_SIGNING_IDENTITY" $XCODE_OPTIONS $CMAKE_OPTIONS $SCHEDULE_CMAKE_OPTIONS $RELEASE_FILE cmake --build . --target install --config $CI_BUILD_TYPE $LBC_NODEBUG_OPTIONS -- $ADDITIONAL_BUILD_OPTIONS ccache -s .job-macosx-desktop: stage: build - tags: [ "macmini-m1-bis-xcode13" ] + tags: [ "macos-xcode13" ] script: - *build_all_script - variables: - LINPHONESDK_MACOS_ARCHS: "x86_64" - LINPHONESDK_OPENSSL_ROOT_DIR_X86_64: "/usr/local/opt/openssl@1.1" - LINPHONESDK_OPENSSL_ROOT_DIR_ARM64: "/opt/homebrew/opt/openssl@1.1" artifacts: paths: - - build/OUTPUT + - build/OUTPUT/* when: always expire_in: 1 week @@ -39,13 +37,14 @@ # On each push ################################################# +#TODO: reactivate pcrypto when liboqs is fixed for 'Vortex' CPU. job-macosx-ninja: except: refs: - schedules variables: CMAKE_GENERATOR: Ninja - CMAKE_OPTIONS: -DENABLE_PQCRYPTO=ON + CMAKE_OPTIONS: -DENABLE_PQCRYPTO=OFF extends: .job-macosx-desktop ################################################# @@ -59,7 +58,7 @@ job-macosx-makefile: - $DEPLOY_PLUGINS variables: CMAKE_GENERATOR: Unix Makefiles - CMAKE_OPTIONS: -DENABLE_PQCRYPTO=ON + CMAKE_OPTIONS: -DENABLE_PQCRYPTO=OFF ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS extends: .job-macosx-desktop @@ -68,7 +67,7 @@ job-macosx-ninja-novideo: variables: - $NIGHTLY_MASTER variables: - CMAKE_OPTIONS: -DENABLE_VIDEO=NO -DENABLE_PQCRYPTO=ON + CMAKE_OPTIONS: -DENABLE_VIDEO=OFF -DENABLE_PQCRYPTO=OFF CMAKE_GENERATOR: Ninja extends: .job-macosx-desktop @@ -90,7 +89,7 @@ job-macosx-ninja-novideo: # WAIT for QT6 for arm64 job-macosx-makefile-package: stage: package - tags: [ "macmini-m1-bis-xcode13" ] + tags: [ "macos-xcode13" ] dependencies: [] only: variables: @@ -98,9 +97,8 @@ job-macosx-makefile-package: - $PACKAGE_MACOSX - $DEPLOY_MACOSX variables: - CMAKE_OPTIONS: -DENABLE_APP_PACKAGING=YES -DENABLE_G729=ON + CMAKE_OPTIONS: -DENABLE_APP_PACKAGING=ON -DENABLE_GPL_THIRD_PARTIES=ON -DENABLE_G729=ON RELEASE_FILE: -DLINPHONE_SDK_MAKE_RELEASE_FILE_URL=$MAKE_RELEASE_FILE_URL/$MACOSX_PLATFORM/$APP_FOLDER - LINPHONESDK_MACOS_ARCHS: "x86_64" extends: job-macosx-makefile script: - if [[ $MAKE_RELEASE_FILE_URL == "" ]]; then export RELEASE_FILE=""; fi @@ -114,7 +112,7 @@ job-macosx-makefile-package: job-macosx-codesigning: stage: signing - tags: [ "macmini-m1-bis-xcode13" ] + tags: [ "macos-xcode13" ] needs: - job-macosx-makefile-package only: @@ -124,7 +122,7 @@ job-macosx-codesigning: - $DEPLOY_MACOSX script: - cd build - - codesign --options runtime,library --verbose -s "$MACOS_SIGNING_IDENTITY" OUTPUT/Packages/*.dmg + - codesign --timestamp --options runtime,library --verbose -s "$MACOS_SIGNING_IDENTITY" OUTPUT/linphone-app/macos/Packages/Linphone*.dmg - ./../tools/app_notarization.sh artifacts: when: always @@ -137,32 +135,32 @@ job-macosx-codesigning: # Deploy - Nightly ################################################# -job-macosx-makefile-deploy: - stage: deploy - tags: [ "macmini-m1-bis-xcode13" ] - needs: - - job-macosx-codesigning - only: - variables: - - $NIGHTLY_MASTER - - $DEPLOY_MACOSX - script: - - rsync -rlv --ignore-existing build/OUTPUT/Packages/Linphone*.dmg $DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$MACOSX_PLATFORM/$APP_FOLDER - - |- - if [[ $MAKE_RELEASE_FILE_URL != "" ]]; then - rsync -rlv build/OUTPUT/RELEASE $DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$MACOSX_PLATFORM - rsync -rlv build/OUTPUT/RELEASE $MAIN_DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$MACOSX_PLATFORM - fi +#job-macosx-makefile-deploy: +# stage: deploy +# tags: [ "macos-xcode13" ] +# needs: +# - job-macosx-codesigning +# only: +# variables: +# - $NIGHTLY_MASTER +# - $DEPLOY_MACOSX +# script: +# - rsync -rlv --ignore-existing build/OUTPUT/linphone-app/macos/Packages/Linphone*.dmg $DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$MACOSX_PLATFORM/$APP_FOLDER +# - |- +# if [[ $MAKE_RELEASE_FILE_URL != "" ]]; then +# rsync -rlv build/OUTPUT/RELEASE $DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$MACOSX_PLATFORM +# rsync -rlv build/OUTPUT/RELEASE $MAIN_DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$MACOSX_PLATFORM +# fi -job-macosx-makefile-plugins-deploy: - stage: deploy - tags: [ "macmini-m1-bis-xcode13" ] - needs: - - job-macosx-makefile - only: - variables: - - $DEPLOY_PLUGINS - script: - - rsync -rlv --ignore-existing build/OUTPUT/plugins/app/*.dylib $DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$MACOSX_PLATFORM/$APP_FOLDER/plugins +#job-macosx-makefile-plugins-deploy: +# stage: deploy +# tags: [ "macos-xcode13" ] +# needs: +# - job-macosx-makefile +# only: +# variables: +# - $DEPLOY_PLUGINS +# script: +# - rsync -rlv --ignore-existing build/OUTPUT/plugins/app/*.dylib $DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$MACOSX_PLATFORM/$APP_FOLDER/plugins diff --git a/.gitlab-ci-files/job-windows-desktop.yml b/.gitlab-ci-files/job-windows-desktop.yml index c0b81ec0c..f875d572a 100644 --- a/.gitlab-ci-files/job-windows-desktop.yml +++ b/.gitlab-ci-files/job-windows-desktop.yml @@ -10,7 +10,7 @@ - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $DOCKER_UPDATE == null && $SKIP_WINDOWS == null - if: $CI_PIPELINE_SOURCE == "schedule" && $DOCKER_UPDATE == null && $SKIP_WINDOWS == null variables: - CMAKE_OPTIONS: -DLINPHONE_WINDOWS_SIGN_TOOL=$WINDOWS_SIGN_TOOL -DLINPHONE_WINDOWS_SIGN_TIMESTAMP_URL=$WINDOWS_SIGN_TIMESTAMP_URL -DLINPHONE_WINDOWS_SIGN_HASH=$WINDOWS_SIGN_HASH -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON + CMAKE_OPTIONS: -DLINPHONE_WINDOWS_SIGN_TOOL=$WINDOWS_SIGN_TOOL -DLINPHONE_WINDOWS_SIGN_TIMESTAMP_URL=$WINDOWS_SIGN_TIMESTAMP_URL -DLINPHONE_WINDOWS_SIGN_HASH=$WINDOWS_SIGN_HASH -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=ON LINPHONESDK_PLATFORM: Desktop OUTPUT_ZIP_FOLDER: win64 MINGW_TYPE: mingw64 @@ -84,9 +84,6 @@ - if ($SHOW_SEARCH_STATUS_SCRIPT) { Invoke-Expression "$SHOW_SEARCH_STATUS_SCRIPT" } else { Write-Output "SHOW_SEARCH_STATUS_SCRIPT is null" } - if ($LAUNCH_SEARCH_STATUS_SCRIPT) { Invoke-Expression "$LAUNCH_SEARCH_STATUS_SCRIPT" -ErrorAction stop } else { Write-Output "LAUNCH_SEARCH_STATUS_SCRIPT is null" } - C:\PROGRA~1\Python37\Scripts\cl -s - - cd linphone-sdk - - mkdir $OUTPUT_ZIP_FOLDER - - Copy-Item -Path "*.zip" -Destination "$CI_PROJECT_DIR/build-desktop/linphone-sdk/$OUTPUT_ZIP_FOLDER" -Recurse ################ artifacts: @@ -95,13 +92,14 @@ - build-desktop\ninja_buildlog.txt - build-desktop\invertSearch.ps1 - build-desktop\OUTPUT\* + - build-desktop\external\linphone-sdk\openh264-prefix\src\openh264-stamp\* when: always expire_in: 1 week .windows-vs2019-msvc: extends: .windows-vs2019 variables: - CMAKE_OPTIONS: -DENABLE_UNIT_TESTS=ON -DLINPHONE_WINDOWS_SIGN_TOOL=$WINDOWS_SIGN_TOOL -DLINPHONE_WINDOWS_SIGN_TIMESTAMP_URL=$WINDOWS_SIGN_TIMESTAMP_URL -DLINPHONE_WINDOWS_SIGN_HASH=$WINDOWS_SIGN_HASH -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON + CMAKE_OPTIONS: -DENABLE_UNIT_TESTS=ON -DLINPHONE_WINDOWS_SIGN_TOOL=$WINDOWS_SIGN_TOOL -DLINPHONE_WINDOWS_SIGN_TIMESTAMP_URL=$WINDOWS_SIGN_TIMESTAMP_URL -DLINPHONE_WINDOWS_SIGN_HASH=$WINDOWS_SIGN_HASH -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=ON LINPHONESDK_PLATFORM: Desktop CMAKE_GENERATOR: "Visual Studio 16 2019" BUILD_TARGET: install @@ -157,35 +155,35 @@ vs2019-win64-package: - if: $PACKAGE_WINDOWS - if: $DEPLOY_WINDOWS variables: - CMAKE_OPTIONS: -DENABLE_APP_PACKAGING=YES -DLINPHONE_WINDOWS_SIGN_TOOL=$WINDOWS_SIGN_TOOL -DLINPHONE_WINDOWS_SIGN_TIMESTAMP_URL=$WINDOWS_SIGN_TIMESTAMP_URL -DLINPHONE_WINDOWS_SIGN_HASH=$WINDOWS_SIGN_HASH -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON + CMAKE_OPTIONS: -DENABLE_APP_PACKAGING=YES -DLINPHONE_WINDOWS_SIGN_TOOL=$WINDOWS_SIGN_TOOL -DLINPHONE_WINDOWS_SIGN_TIMESTAMP_URL=$WINDOWS_SIGN_TIMESTAMP_URL -DLINPHONE_WINDOWS_SIGN_HASH=$WINDOWS_SIGN_HASH -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=ON RELEASE_FILE: -DLINPHONE_SDK_MAKE_RELEASE_FILE_URL=$MAKE_RELEASE_FILE_URL/$WINDOWS_PLATFORM/$APP_FOLDER ################################################# # DEPLOY ################################################# -vs2019-win64-upload: - stage: deploy - tags: [ "windows-powershell"] - rules: - - if: $NIGHTLY_MASTER - - if: $DEPLOY_WINDOWS - needs: - - vs2019-win64-package - script: - - scp -pr build-desktop/OUTPUT/Packages/*.exe ${DEPLOY_SERVER}:${UPLOAD_ROOT_PATH}/${WINDOWS_PLATFORM}/${APP_FOLDER} - - if ($MAKE_RELEASE_FILE_URL) { scp -pr build-desktop/OUTPUT/RELEASE ${DEPLOY_SERVER}:${UPLOAD_ROOT_PATH}/${WINDOWS_PLATFORM}/ } - - if ($MAKE_RELEASE_FILE_URL) { scp -pr build-desktop/OUTPUT/RELEASE ${MAIN_DEPLOY_SERVER}:${UPLOAD_ROOT_PATH}/${WINDOWS_PLATFORM}/ } +#vs2019-win64-upload: +# stage: deploy +# tags: [ "windows-powershell"] +# rules: +# - if: $NIGHTLY_MASTER +# - if: $DEPLOY_WINDOWS +# needs: +# - vs2019-win64-package +# script: +# - scp -pr build-desktop/OUTPUT/Packages/*.exe ${DEPLOY_SERVER}:${UPLOAD_ROOT_PATH}/${WINDOWS_PLATFORM}/${APP_FOLDER} +# - if ($MAKE_RELEASE_FILE_URL) { scp -pr build-desktop/OUTPUT/RELEASE ${DEPLOY_SERVER}:${UPLOAD_ROOT_PATH}/${WINDOWS_PLATFORM}/ } +# - if ($MAKE_RELEASE_FILE_URL) { scp -pr build-desktop/OUTPUT/RELEASE ${MAIN_DEPLOY_SERVER}:${UPLOAD_ROOT_PATH}/${WINDOWS_PLATFORM}/ } -vs2019-win64-plugins-upload: - stage: deploy - tags: [ "windows"] - rules: - - if: $DEPLOY_PLUGINS - needs: - - vs2019-win64-scheduled-windows - script: - - scp "build-desktop/OUTPUT/plugins/app/*.dll" "%DEPLOY_SERVER%:%WINDOWS_UPLOAD_DIRECTORY%/plugins" +#vs2019-win64-plugins-upload: +# stage: deploy +# tags: [ "windows"] +# rules: +# - if: $DEPLOY_PLUGINS +# needs: +# - vs2019-win64-scheduled-windows +# script: +# - scp "build-desktop/OUTPUT/plugins/app/*.dll" "%DEPLOY_SERVER%:%WINDOWS_UPLOAD_DIRECTORY%/plugins" diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d04cdf026..8694d4a2e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -26,6 +26,7 @@ variables: DEBIAN_9_QT_IMAGE_VERSION: 20230417_qtopen_gstreamer DEBIAN_10_IMAGE_VERSION: 20210217_python3 UBUNTU_ROLLING_IMAGE_VERSION: 20211012_add_qtwebview + UBUNTU_1804_IMAGE_VERSION: 20230706_add_deps_for_av1 workflow: @@ -48,13 +49,13 @@ workflow: include: # - '.gitlab-ci-files/job-linux-prepare.yml' # - '.gitlab-ci-files/job-linux-desktop.yml' -# - '.gitlab-ci-files/job-linux-desktop-debian9.yml' -# - '.gitlab-ci-files/job-windows-desktop.yml' -# - '.gitlab-ci-files/job-macosx-desktop.yml' +# - '.gitlab-ci-files/job-linux-desktop-ubuntu-1804.yml' + - '.gitlab-ci-files/job-windows-desktop.yml' + - '.gitlab-ci-files/job-macosx-desktop.yml' -#stages: -# - build -# - package -# - signing -# - deploy +stages: + - build + - package + - signing + - deploy diff --git a/CMakeLists.txt b/CMakeLists.txt index b1185914e..f0c6a60d4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -183,6 +183,7 @@ endif() # Set some SDK variables to configure the APP build as we want it set(ENABLE_CXX_WRAPPER ON CACHE BOOL "Build the C++ wrapper for Liblinphone." FORCE) +set(ENABLE_CSHARP_WRAPPER OFF CACHE BOOL "Build the CSharp wrapper for Liblinphone." FORCE) set(ENABLE_THEORA OFF) set(ENABLE_QT_GL ${ENABLE_VIDEO}) @@ -251,4 +252,4 @@ else() include(cmake/TasksMacos.cmake) endif() -file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/cmake/hook/pre-commit" DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/.git/hooks/") \ No newline at end of file +file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/cmake/hook/pre-commit" DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/.git/hooks/") diff --git a/Linphone/CMakeLists.txt b/Linphone/CMakeLists.txt index cd6867072..f015f0e37 100644 --- a/Linphone/CMakeLists.txt +++ b/Linphone/CMakeLists.txt @@ -37,10 +37,15 @@ set(QT_PACKAGES Core Quick Qml Widgets)# Search Core at first for initialize Qt find_package(Qt6 REQUIRED COMPONENTS Core) find_package(Qt6 REQUIRED COMPONENTS ${QT_PACKAGES}) -#qt6_standard_project_setup() -set(CMAKE_AUTOMOC ON) -set(CMAKE_AUTORCC ON) -set(CMAKE_AUTOUIC ON) + +if(${Qt6_VERSION} VERSION_LESS "6.3.0") + set(CMAKE_AUTOMOC ON) + set(CMAKE_AUTORCC ON) + set(CMAKE_AUTOUIC ON) +else() + qt6_standard_project_setup() +endif() + set(_LINPHONEAPP_SOURCES main.cpp) set(_LINPHONEAPP_QML_FILES) diff --git a/Linphone/model/logger/LoggerModel.cpp b/Linphone/model/logger/LoggerModel.cpp index 4a368b755..2a467656c 100644 --- a/Linphone/model/logger/LoggerModel.cpp +++ b/Linphone/model/logger/LoggerModel.cpp @@ -64,7 +64,8 @@ void LoggerModel::onLog(QtMsgType type, QString contextFile, int contextLine, QS contextStr = QStringLiteral("%1:%2: ").arg(fileToDisplay).arg(contextLine); } #else - Q_UNUSED(context); + Q_UNUSED(contextFile) + Q_UNUSED(contextLine) #endif auto serviceMsg = Utils::appStringToCoreString(contextStr + msg); diff --git a/cmake/GenerateAppMacos.cmake b/cmake/GenerateAppMacos.cmake new file mode 100644 index 000000000..fa02454e4 --- /dev/null +++ b/cmake/GenerateAppMacos.cmake @@ -0,0 +1,135 @@ +################################################################################ +# GenerateFrameworks.cmake +# Copyright (c) 2021-2023 Belledonne Communications SARL. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +################################################################################ + +cmake_policy(SET CMP0009 NEW) # Do not follow symlinks when doing file(GLOB_RECURSE) + +include("${LINPHONESDK_DIR}/cmake/LinphoneSdkUtils.cmake") + + +linphone_sdk_convert_comma_separated_list_to_cmake_list("${LINPHONEAPP_MACOS_ARCHS}" _MACOS_ARCHS) +list(GET _MACOS_ARCHS 0 _FIRST_ARCH) + +set(MAIN_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/${LINPHONEAPP_NAME}) #OUTPUT/linphone-app/macos + +################################ +# Create the desktop directory that will contain the merged content of all architectures +################################ + +execute_process( + COMMAND "${CMAKE_COMMAND}" "-E" "remove_directory" "${MAIN_INSTALL_DIR}" + COMMAND "${CMAKE_COMMAND}" "-E" "make_directory" "${MAIN_INSTALL_DIR}" +) + +################################ +# Copy outside folders that should be in .app package +################################ + +function( copy_outside_folders _ARCH) +# Prepare .app + execute_process(COMMAND rsync -a --force "${MAIN_INSTALL_DIR}-${_ARCH}/Frameworks/" "${MAIN_INSTALL_DIR}-${_ARCH}/${CMAKE_INSTALL_LIBDIR}/") + execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory "${MAIN_INSTALL_DIR}-${_ARCH}/include/" "${MAIN_INSTALL_DIR}-${_ARCH}/${CMAKE_INSTALL_INCLUDEDIR}/") +# move share + execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory "${MAIN_INSTALL_DIR}-${_ARCH}/share/" "${MAIN_INSTALL_DIR}-${_ARCH}/${CMAKE_INSTALL_DATAROOTDIR}/") +# move mkspecs + execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory "${MAIN_INSTALL_DIR}-${_ARCH}/mkspecs/" "${MAIN_INSTALL_DIR}-${_ARCH}/${CMAKE_INSTALL_DATAROOTDIR}/") +endfunction() + +set(_COPIED FALSE) +foreach(_ARCH IN LISTS ${_MACOS_ARCHS}) + set(_COPIED TRUE) + message(STATUS "Copying outside folders for ${_ARCH}") + copy_outside_folders(${_ARCH}) +endforeach() + +if(NOT _COPIED) # this is a bug on cmake as there is one element but foreach doesn't do loop. + message(STATUS "Copying outside folders for ${_FIRST_ARCH}") + copy_outside_folders(${_FIRST_ARCH}) +endif() + +################################ +# Copy and merge content of all architectures in the desktop directory +################################ +# Do not use copy_directory because of symlinks +message(STATUS "Copying ${_FIRST_ARCH} into main") +execute_process(COMMAND rsync -a --force "${MAIN_INSTALL_DIR}-${_FIRST_ARCH}/" "${MAIN_INSTALL_DIR}" WORKING_DIRECTORY "${LINPHONEAPP_BUILD_DIR}") + +#if(NOT ENABLE_FAT_BINARY) +# execute_process( +# COMMAND "${CMAKE_COMMAND}" "-E" "remove_directory" "${CMAKE_INSTALL_PREFIX}/Frameworks" +# COMMAND "${CMAKE_COMMAND}" "-E" "make_directory" "${CMAKE_INSTALL_PREFIX}/XCFrameworks" +# ) +#endif() + +################################ +##### MIX (TODO) +################################ +message(STATUS "Mixing") +# Get all files in output +file(GLOB_RECURSE _BINARIES RELATIVE "${MAIN_INSTALL_DIR}-${_FIRST_ARCH}/" "${MAIN_INSTALL_DIR}-${_FIRST_ARCH}/*") + +if(NOT ENABLE_FAT_BINARY) + # Remove all .framework inputs from the result + list(FILTER _BINARIES EXCLUDE REGEX ".*\\.framework.*") +endif() + +foreach(_FILE IN LISTS ${_BINARIES}) + get_filename_component(ABSOLUTE_FILE "${MAIN_INSTALL_DIR}-${_FIRST_ARCH}/${_FILE}" ABSOLUTE) + if(NOT IS_SYMLINK ${ABSOLUTE_FILE}) + # Check if lipo can detect an architecture + execute_process(COMMAND lipo -archs "${MAIN_INSTALL_DIR}-${_FIRST_ARCH}/${_FILE}" + OUTPUT_VARIABLE FILE_ARCHITECTURE + OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY "${LINPHONEAPP_BUILD_DIR}" + ERROR_QUIET + ) + if(NOT "${FILE_ARCHITECTURE}" STREQUAL "") + # There is at least one architecture : Use this candidate to mix with another architecture + set(_ALL_ARCH_FILES) + foreach(_ARCH IN LISTS ${_ARCHS}) + list(APPEND _ALL_ARCH_FILES "${MAIN_INSTALL_DIR}-${_ARCH}/${_FILE}") + endforeach() + string(REPLACE ";" " " _ARCH_STRING "${_ARCHS}") + message(STATUS "Mixing ${_FILE} for archs [${_ARCH_STRING}]") + execute_process( + COMMAND "lipo" "-create" "-output" "${MAIN_INSTALL_DIR}/${_FILE}" ${_ALL_ARCH_FILES} + WORKING_DIRECTORY "${LINPHONEAPP_BUILD_DIR}" + ) + endif() + endif() +endforeach() +#[[ +if(NOT ENABLE_FAT_BINARY) + # Generate XCFrameworks + file(GLOB _FRAMEWORKS "${LINPHONEAPP_BUILD_DIR}/${MAIN_INSTALL_DIR}-${_FIRST_ARCH}/Frameworks/*.framework") + foreach(_FRAMEWORK IN LISTS _FRAMEWORKS) + get_filename_component(_FRAMEWORK_NAME "${_FRAMEWORK}" NAME_WE) + set(_ALL_ARCH_FRAMEWORKS) + foreach(_ARCH IN LISTS _MACOS_ARCHS) + list(APPEND _ALL_ARCH_FRAMEWORKS "-framework") + list(APPEND _ALL_ARCH_FRAMEWORKS "${LINPHONEAPP_BUILD_DIR}/${LINPHONEAPP_NAME}/${LINPHONEAPP_PLATFORM}-${_ARCH}/Frameworks/${_FRAMEWORK_NAME}.framework") + endforeach() + string(REPLACE ";" " " _ARCH_STRING "${_MACOS_ARCHS}") + message(STATUS "Creating XCFramework for ${_FRAMEWORK_NAME} for archs [${_ARCH_STRING}]") + execute_process( + COMMAND "xcodebuild" "-create-xcframework" "-output" "${CMAKE_INSTALL_PREFIX}/XCFrameworks/${_FRAMEWORK_NAME}.xcframework" ${_ALL_ARCH_FRAMEWORKS} + WORKING_DIRECTORY "${LINPHONEAPP_BUILD_DIR}" + ) + endforeach() +endif() +#]] diff --git a/cmake/TasksMacos.cmake b/cmake/TasksMacos.cmake new file mode 100644 index 000000000..ef967aedb --- /dev/null +++ b/cmake/TasksMacos.cmake @@ -0,0 +1,86 @@ +############################################################################ +# TasksMacos.cmake +# Copyright (C) 2010-2023 Belledonne Communications, Grenoble France +# +############################################################################ +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +############################################################################ + +set(LINPHONEAPP_MACOS_ARCHS "x86_64" CACHE STRING "MacOS architectures to build: comma-separated list of values in [arm64, x86_64]") +option(ENABLE_FAT_BINARY "Enable fat binary generation using lipo." ON) + +set(_MACOS_ARCHS ${LINPHONEAPP_MACOS_ARCHS}) +#linphone_sdk_convert_comma_separated_list_to_cmake_list("${LINPHONESDK_MACOS_ARCHS}" _MACOS_ARCHS) + +set(LINPHONEAPP_NAME "Linphone") +set(LINPHONEAPP_PLATFORM "macos") +set(SUB_TARGET app_macos) +string(TOLOWER "${LINPHONEAPP_PLATFORM}" LINPHONEAPP_PLATFORM_LOWER) +set(_MACOS_INSTALL_RELATIVE_DIR "${LINPHONEAPP_NAME}/${LINPHONEAPP_PLATFORM_LOWER}") # Linphone/macos +set(_MACOS_INSTALL_DIR "${APPLICATION_OUTPUT_DIR}/${_MACOS_INSTALL_RELATIVE_DIR}") # build/OUTPUT/Linphone/macos +# Use APPLICATION_OUTPUT_DIR. CMAKE_INSTALL_PREFIX can be in Linphone.app/Contents + +############################################################################ +# Build each selected architecture +############################################################################ + +#linphone_sdk_get_inherited_cmake_args(_CMAKE_CONFIGURE_ARGS _CMAKE_BUILD_ARGS) +#linphone_sdk_get_enable_cmake_args(_MACOS_CMAKE_ARGS) + +set(_MACOS_TARGETS) +foreach(_MACOS_ARCH IN LISTS _MACOS_ARCHS) + set(_TARGET_NAME ${SUB_TARGET}-${_MACOS_ARCH}) # app_macos-x86_64 + set(_MACOS_ARCH_BINARY_DIR "${PROJECT_BINARY_DIR}/${_TARGET_NAME}") # build/app_macos-x86_64 + set(_MACOS_ARCH_INSTALL_DIR "${_MACOS_INSTALL_DIR}-${_MACOS_ARCH}") # build/OUTPUT/Linphone/macos-x86_64 + + add_custom_target(${_TARGET_NAME} ALL + COMMAND ${CMAKE_COMMAND} -B ${_MACOS_ARCH_BINARY_DIR} -DMONO_ARCH=${_MACOS_ARCH} ${USER_ARGS} ${OPTION_LIST} ${_MACOS_CMAKE_ARGS} -DLINPHONEAPP_INSTALL_PREFIX=${_MACOS_ARCH_INSTALL_DIR} -DCMAKE_TOOLCHAIN_FILE=${PROJECT_SOURCE_DIR}/cmake/toolchains/toolchain-mac-x86_64.cmake -DLINPHONEAPP_BUILD_TYPE="Normal" + COMMAND ${CMAKE_COMMAND} --build ${_MACOS_ARCH_BINARY_DIR} --target install ${_CMAKE_BUILD_ARGS} + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + COMMENT "Building Linphone APP for MacOS ${_MACOS_ARCH}" + USES_TERMINAL + COMMAND_EXPAND_LISTS + ) + list(APPEND _MACOS_TARGETS ${_TARGET_NAME}) +endforeach() + + +############################################################################ +# Generate the aggregated apps +############################################################################ +add_custom_target(gen-apps ALL + COMMAND "${CMAKE_COMMAND}" + "-DLINPHONESDK_DIR=${PROJECT_SOURCE_DIR}/external/linphone-sdk" + "-DLINPHONEAPP_BUILD_DIR=${CMAKE_BINARY_DIR}" + "-DLINPHONEAPP_MACOS_ARCHS=${LINPHONEAPP_MACOS_ARCHS}" + "-DLINPHONEAPP_NAME=${_MACOS_INSTALL_RELATIVE_DIR}" + "-DLINPHONEAPP_PLATFORM=${LINPHONEAPP_PLATFORM_LOWER}" + "-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}" + "-DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR}" + "-DCMAKE_INSTALL_INCLUDEDIR=${CMAKE_INSTALL_INCLUDEDIR}" + "-DCMAKE_INSTALL_BINDIR=${CMAKE_INSTALL_BINDIR}" + "-DCMAKE_INSTALL_DATAROOTDIR=${CMAKE_INSTALL_DATAROOTDIR}" + "-DENABLE_FAT_BINARY=${ENABLE_FAT_BINARY}" + "-P" "${PROJECT_SOURCE_DIR}/cmake/GenerateAppMacos.cmake" + DEPENDS ${_MACOS_TARGETS} + WORKING_DIRECTORY ${PROJECT_BINARY_DIR} + COMMENT "Aggregating applications of all architectures" + USES_TERMINAL +) + +install(CODE "message(\"Dummy install target\")") + diff --git a/cmake/toolchains/toolchain-mac-arm64.cmake b/cmake/toolchains/toolchain-mac-arm64.cmake new file mode 100644 index 000000000..213974cc1 --- /dev/null +++ b/cmake/toolchains/toolchain-mac-arm64.cmake @@ -0,0 +1,24 @@ +################################################################################ +# +# Copyright (c) 2021-2023 Belledonne Communications SARL. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +################################################################################ +message(FATAL_ERROR A) +set(CMAKE_SYSTEM_PROCESSOR "arm64") +set(CMAKE_OSX_ARCHITECTURES "arm64") +set(CLANG_TARGET "arm64-apple-macos") + +include("${CMAKE_CURRENT_LIST_DIR}/toolchain-mac-common.cmake") diff --git a/cmake/toolchains/toolchain-mac-common.cmake b/cmake/toolchains/toolchain-mac-common.cmake new file mode 100644 index 000000000..369eb45ab --- /dev/null +++ b/cmake/toolchains/toolchain-mac-common.cmake @@ -0,0 +1,106 @@ +############################################################################ +# Copyright (c) 2021-2023 Belledonne Communications SARL. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +############################################################################ + +# Building for Mac is only available under APPLE systems +if(NOT APPLE) + message(FATAL_ERROR "You need to build using a Mac OS X system") +endif() +execute_process(COMMAND xcode-select -print-path + RESULT_VARIABLE XCODE_SELECT_RESULT + OUTPUT_VARIABLE XCODE_PATH + OUTPUT_STRIP_TRAILING_WHITESPACE +) +if(NOT ${XCODE_SELECT_RESULT} EQUAL 0) + message(FATAL_ERROR "xcode-select failed: ${XCODE_SELECT_RESULT}. You may need to install Xcode.") +endif() + +execute_process(COMMAND xcrun --sdk macosx --show-sdk-version + RESULT_VARIABLE XCRUN_SHOW_SDK_VERSION_RESULT + OUTPUT_VARIABLE MACOS_SDK_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE +) +if(NOT ${XCRUN_SHOW_SDK_VERSION_RESULT} EQUAL 0) + message(FATAL_ERROR "xcrun failed: ${XCRUN_SHOW_SDK_VERSION_RESULT}. You may need to install Xcode.") +endif() + +execute_process(COMMAND xcrun --sdk macosx --show-sdk-platform-path + RESULT_VARIABLE XCRUN_SHOW_SDK_PATH_RESULT + OUTPUT_VARIABLE CMAKE_OSX_SYSROOT + OUTPUT_STRIP_TRAILING_WHITESPACE +) +if(NOT ${XCRUN_SHOW_SDK_PATH_RESULT} EQUAL 0) + message(FATAL_ERROR "xcrun failed: ${XCRUN_SHOW_SDK_PATH_RESULT}. You may need to install Xcode.") +endif() +set(CMAKE_OSX_SYSROOT "${CMAKE_OSX_SYSROOT}/Developer/SDKs/MacOSX.sdk") + +execute_process(COMMAND xcrun --sdk macosx --find clang + RESULT_VARIABLE XCRUN_FIND_CLANG_RESULT + OUTPUT_VARIABLE CLANG_PATH + OUTPUT_STRIP_TRAILING_WHITESPACE +) +if(NOT ${XCRUN_FIND_CLANG_RESULT} EQUAL 0) + message(FATAL_ERROR "xcrun failed: ${XCRUN_FIND_CLANG_RESULT}. You may need to install Xcode.") +endif() +get_filename_component(TOOLCHAIN_PATH "${CLANG_PATH}" DIRECTORY) + +message(STATUS "Using sysroot path: ${CMAKE_OSX_SYSROOT}") +message(STATUS "Using sdk version: ${MACOS_SDK_VERSION}") +set(SDK_BIN_PATH "${CMAKE_OSX_SYSROOT}/../../usr/bin") + +set(TOOLCHAIN_CC "${TOOLCHAIN_PATH}/clang") +set(TOOLCHAIN_CXX "${TOOLCHAIN_PATH}/clang++") +set(TOOLCHAIN_OBJC "${TOOLCHAIN_PATH}/clang") +set(TOOLCHAIN_LD "${TOOLCHAIN_PATH}/ld") +set(TOOLCHAIN_AR "${TOOLCHAIN_PATH}/ar") +set(TOOLCHAIN_RANLIB "${TOOLCHAIN_PATH}/ranlib") +set(TOOLCHAIN_STRIP "${TOOLCHAIN_PATH}/strip") +set(TOOLCHAIN_NM "${TOOLCHAIN_PATH}/nm") + +execute_process(COMMAND xcodebuild -version OUTPUT_VARIABLE XCODE_VERSION_RAW OUTPUT_STRIP_TRAILING_WHITESPACE) +STRING(REGEX REPLACE "Xcode ([^\n]*).*" "\\1" XCODE_VERSION "${XCODE_VERSION_RAW}") + +include(CMakeForceCompiler) + +set(CMAKE_CROSSCOMPILING FALSE) + +# Define name of the target system +set(CMAKE_SYSTEM_NAME "Darwin") +set(CMAKE_SYSTEM_VERSION ${MACOS_SDK_VERSION}) + +# The following variables are needed to build correctly with Xcode +if(CMAKE_GENERATOR STREQUAL "Xcode") + set(CMAKE_MACOSX_BUNDLE NO)#if YES, cmake try_compile will not be able to test executable.app and then API info will fail. + set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED NO) + set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED NO) + set(CMAKE_XCODE_ATTRIBUTE_BITCODE_GENERATION_MODE "bitcode") +endif() + +# Define the compiler +set(CMAKE_C_COMPILER "${TOOLCHAIN_CC}") +set(CMAKE_C_COMPILER_TARGET "${CLANG_TARGET}") +set(CMAKE_CXX_COMPILER "${TOOLCHAIN_CXX}") +set(CMAKE_CXX_COMPILER_TARGET "${CLANG_TARGET}") +set(CMAKE_AR "${TOOLCHAIN_AR}" CACHE FILEPATH "ar") +set(CMAKE_RANLIB "${TOOLCHAIN_RANLIB}" CACHE FILEPATH "ranlib") +set(CMAKE_LINKER "${TOOLCHAIN_LD}" CACHE FILEPATH "linker") +set(CMAKE_NM "${TOOLCHAIN_NM}" CACHE FILEPATH "nm") + +set(CMAKE_FIND_ROOT_PATH ${CMAKE_OSX_SYSROOT} ${CMAKE_INSTALL_PREFIX}) + +#important: the GUI identifier is required so that executables can be launched on simulators +set(MACOSX_BUNDLE_GUI_IDENTIFIER "org.linphone.\${PRODUCT_NAME:identifier}") diff --git a/cmake/toolchains/toolchain-mac-x86_64.cmake b/cmake/toolchains/toolchain-mac-x86_64.cmake new file mode 100644 index 000000000..baba3c760 --- /dev/null +++ b/cmake/toolchains/toolchain-mac-x86_64.cmake @@ -0,0 +1,24 @@ +################################################################################ +# +# Copyright (c) 2021-2023 Belledonne Communications SARL. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +################################################################################ + +set(CMAKE_SYSTEM_PROCESSOR "x86_64") +set(CMAKE_OSX_ARCHITECTURES "x86_64") +set(CLANG_TARGET "x86_64-apple-darwin") + +include("${CMAKE_CURRENT_LIST_DIR}/toolchain-mac-common.cmake") diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index c4522642e..bec868965 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -1,23 +1,2 @@ - - -if( APPLE ) - set(LINPHONESDK_BUILD_TYPE "Macos") - set(ENABLE_FAT_BINARY "ON") - if( NOT CMAKE_OSX_DEPLOYMENT_TARGET) - set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9" CACHE STRING "Minimum OS X deployment version") - endif() - if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "arm64")# TODO: add universal build - set(LINPHONESDK_MACOS_ARCHS "x86_64" CACHE STRING "MacOS architectures to build for: comma-separated list of values in [x86_64]") - else() - set(LINPHONESDK_MACOS_ARCHS "x86_64" CACHE STRING "MacOS architectures to build for: comma-separated list of values in [x86_64]") - endif() - set(CMAKE_OSX_ARCHITECTURES ${LINPHONESDK_MACOS_ARCHS} CACHE STRING "") - set(CMAKE_SYSTEM_PROCESSOR "x86_64") -elseif(WIN32) - set(LINPHONESDK_BUILD_TYPE "Default") -endif() - - - add_subdirectory(linphone-sdk/)