Merge pull request #11242 from akallabeth/mingw-update

Mingw update
This commit is contained in:
akallabeth
2025-02-25 16:47:46 +01:00
committed by GitHub
40 changed files with 1554 additions and 1239 deletions

26
.github/workflows/bash-format.yml vendored Normal file
View File

@@ -0,0 +1,26 @@
name: bash-format
on:
workflow_dispatch:
branches: [ master, stable* ]
pull_request:
branches: [ master, stable* ]
schedule:
- cron: '30 4 * * SUN'
jobs:
build:
runs-on: ubuntu-latest
name: "bash-format"
steps:
- name: "Check out source"
uses: actions/checkout@v4
- name: "Prepare environment"
run: |
sudo apt-get update -q -y
sudo apt-get install -q -y \
shfmt
- name: "Run shfmt..."
run: |
./scripts/bash-format.sh

26
.github/workflows/cmake-format.yml vendored Normal file
View File

@@ -0,0 +1,26 @@
name: cmake-format
on:
workflow_dispatch:
branches: [ master, stable* ]
pull_request:
branches: [ master, stable* ]
schedule:
- cron: '30 4 * * SUN'
jobs:
build:
runs-on: ubuntu-latest
name: "cmake-format"
steps:
- name: "Check out source"
uses: actions/checkout@v4
- name: "Prepare environment"
run: |
sudo apt-get update -q -y
sudo apt-get install -q -y \
cmake-format
- name: "Run shfmt..."
run: |
./scripts/cmake-format.sh

View File

@@ -3,6 +3,12 @@ Overview
More documentation might be found at https://github.com/FreeRDP/FreeRDP/wiki/Compilation
A sample build script is part of the repository at scripts/mingw.sh
It is periodically run as part of the https://github.com/FreeRDP/FreeRDP/actions/workflows/mingw.yml workflow.
If you want to do your own build, check the script and the dependency versions checked out (we only use it for the ci builder,
so updates are not always done in a timely fashion)
FreeRDP can be built for Windows using llvm-mingw (https://github.com/mstorsjo/llvm-mingw) with both msvcrt and ucrt.
MinGW builds are not actively maintained at the moment and every once in a while the build process may stop working. Pull requests to maintain MinGW support are always welcome.

View File

@@ -3,4 +3,4 @@
rm -rf $(pwd)/build/$TARGET_ARCH
mkdir -p $(pwd)/build/$TARGET_ARCH
docker build -t win32-builder --build-arg ARCH .
docker compose up dist-builder
docker compose up dist-builder

View File

@@ -1,4 +1,4 @@
#!/bin/sh
export ARCH=aarch64
. ./_build.sh
export ARCH=aarch64
. ./_build.sh

View File

@@ -1,4 +1,4 @@
#!/bin/sh
export ARCH=x86_64
. ./_build.sh
export ARCH=x86_64
. ./_build.sh

View File

@@ -1,12 +1,11 @@
#!/bin/bash -xe
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
MANIFEST=com.freerdp.FreeRDP
BUILD_BASE=$(mktemp -d)
if [ $# -gt 0 ];
then
BUILD_BASE=$1
if [ $# -gt 0 ]; then
BUILD_BASE=$1
fi
echo "Using $BUILD_BASE as temporary build directory"
@@ -15,17 +14,15 @@ BUILD=$BUILD_BASE/build
STATE=$BUILD_BASE/state
BUILDER=$(which flatpak-builder)
if [ ! -x "$BUILDER" ];
then
echo "command 'flatpak-builder' could not be found, please install and add to PATH"
exit 1
if [ ! -x "$BUILDER" ]; then
echo "command 'flatpak-builder' could not be found, please install and add to PATH"
exit 1
fi
FLATPAK=$(which flatpak)
if [ ! -x "$FLATPAK" ];
then
echo "command 'flatpak' could not be found, please install and add to PATH"
exit 1
if [ ! -x "$FLATPAK" ]; then
echo "command 'flatpak' could not be found, please install and add to PATH"
exit 1
fi
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo --user

View File

@@ -1,13 +1,21 @@
{
"add-build-extensions": {
"org.freedesktop.Platform.ffmpeg-full": {
"add-ld-path": ".",
"directory": "lib/ffmpeg",
"version": "24.08"
},
"org.freedesktop.Platform.openh264": {
"add-ld-path": ".",
"directory": "lib/openh264",
"version": "2.5.0"
}
},
"app-id": "com.freerdp.FreeRDP",
"runtime": "org.freedesktop.Platform",
"runtime-version": "23.08",
"sdk": "org.freedesktop.Sdk",
"build-options": {
"cflags": "-O3",
"cxxflags": "-O3"
},
"command": "freerdp.sh",
"cleanup": [
"*.a",
"*.la",
@@ -19,33 +27,17 @@
"/share/examples",
"/share/man"
],
"command": "freerdp.sh",
"finish-args": [
"--device=dri",
/* X11 + XShm access */
"--share=ipc",
"--socket=x11",
/* Needs to talk to the network */
"--share=network",
/* Play sounds redirected from guests */
"--socket=pulseaudio",
"--socket=cups",
/* Wayland access */
"--socket=wayland",
/* Allow rw access to download folder */
"--filesystem=xdg-download"
],
"add-build-extensions": {
"org.freedesktop.Platform.ffmpeg-full": {
"directory": "lib/ffmpeg",
"version": "23.08",
"add-ld-path": "."
},
"org.freedesktop.Platform.openh264": {
"directory": "lib/openh264",
"version": "2.4.1",
"add-ld-path": "."
}
},
"modules": [
"modules/openssl.json",
"modules/libusb.json",
@@ -55,10 +47,13 @@
"modules/pcsc.json",
"modules/krb5.json",
"modules/opensc.json",
"modules/pkcs11-helper.json",
"modules/SDL3.json",
"modules/SDL3_image.json",
"modules/SDL3_ttf.json",
{
"name": "freerdp",
"buildsystem": "cmake-ninja",
"builddir": true,
"buildsystem": "cmake-ninja",
"cleanup": [],
"config-opts": [
"-DCMAKE_VERBOSE_MAKEFILE=ON",
@@ -92,27 +87,31 @@
"-DWITH_WEBVIEW:BOOL=OFF",
"-DWITH_PULSE:BOOL=ON"
],
"name": "freerdp",
"sources": [
{
"type": "dir",
"path": "../.."
"path": "../..",
"type": "dir"
}
]
},
{
"name": "wrapper",
"buildsystem": "simple",
"build-commands": [
"install -D freerdp.sh /app/bin/freerdp.sh",
"mkdir -p /app/lib/ffmpeg",
"mkdir -p /app/lib/openh264"
],
"buildsystem": "simple",
"name": "wrapper",
"sources": [
{
"type": "file",
"path": "freerdp.sh"
"path": "freerdp.sh",
"type": "file"
}
]
}
]
],
"runtime": "org.freedesktop.Platform",
"runtime-version": "24.08",
"sdk": "org.freedesktop.Sdk"
}

View File

@@ -1,34 +1,29 @@
#!/bin/sh
if [ -z ${FREERDP_SDL_OFF} ];
then
echo "SDL $(which sdl-freerdp)"
sdl-freerdp $@
exit $rc
if [ -z ${FREERDP_SDL_OFF} ]; then
echo "SDL $(which sdl-freerdp)"
sdl-freerdp $@
exit $rc
else
if [ -z $XDG_SESSION_TYPE ];
then
echo "XDG_SESSION_TYPE undefined"
exit -1
elif [ "$XDG_SESSION_TYPE" = "wayland" ];
then
if [ -z $FREERDP_WAYLAND_OFF ];
then
echo "wayland $(which wlfreerdp)"
wlfreerdp $@
exit $rc
else
echo "X11 $(which xfreerdp)"
xfreerdp $@
exit $rc
fi
elif [ "$XDG_SESSION_TYPE" = "x11" ];
then
echo "X11 $(which xfreerdp)"
xfreerdp $@
exit $rc
else
echo "XDG_SESSION_TYPE $XDG_SESSION_TYPE not handled"
exit -1
fi
if [ -z $XDG_SESSION_TYPE ]; then
echo "XDG_SESSION_TYPE undefined"
exit -1
elif [ "$XDG_SESSION_TYPE" = "wayland" ]; then
if [ -z $FREERDP_WAYLAND_OFF ]; then
echo "wayland $(which wlfreerdp)"
wlfreerdp $@
exit $rc
else
echo "X11 $(which xfreerdp)"
xfreerdp $@
exit $rc
fi
elif [ "$XDG_SESSION_TYPE" = "x11" ]; then
echo "X11 $(which xfreerdp)"
xfreerdp $@
exit $rc
else
echo "XDG_SESSION_TYPE $XDG_SESSION_TYPE not handled"
exit -1
fi
fi

View File

@@ -0,0 +1,33 @@
{
"builddir": true,
"buildsystem": "cmake-ninja",
"cleanup": [
"/include",
"/lib/*.la",
"/lib/*.a",
"/lib/cmake",
"/share/aclocal",
"/lib/pkgconfig"
],
"config-opts": [
"-DCMAKE_VERBOSE_MAKEFILE=ON",
"-DCMAKE_BUILD_TYPE:STRING=Release",
"-DCMAKE_INSTALL_LIBDIR:PATH=lib"
],
"name": "SDL2_image",
"sources": [
{
"sha256": "f7c06a8783952cfe960adccdd3d8472b63ab31475b4390d10cfdcc1aea61238f",
"type": "archive",
"url":
"https://github.com/libsdl-org/SDL_image/releases/download/release-2.8.4/SDL2_image-2.8.4.tar.gz",
"x-checker-data": {
"project-id": 4781,
"stable-only": true,
"type": "anitya",
"url-template":
"https://github.com/libsdl-org/SDL_image/releases/download/release-${version0}.${version1}.${version2}/SDL2_image-${version0}.${version1}.${version2}.tar.gz"
}
}
]
}

View File

@@ -0,0 +1,33 @@
{
"builddir": true,
"buildsystem": "cmake-ninja",
"cleanup": [
"/include",
"/lib/*.la",
"/lib/*.a",
"/lib/cmake",
"/share/aclocal",
"/lib/pkgconfig"
],
"config-opts": [
"-DCMAKE_VERBOSE_MAKEFILE=ON",
"-DCMAKE_BUILD_TYPE:STRING=Release",
"-DCMAKE_INSTALL_LIBDIR:PATH=lib"
],
"name": "SDL2_ttf",
"sources": [
{
"sha256": "0b2bf1e7b6568adbdbc9bb924643f79d9dedafe061fa1ed687d1d9ac4e453bfd",
"type": "archive",
"url":
"https://github.com/libsdl-org/SDL_ttf/releases/download/release-2.24.0/SDL2_ttf-2.24.0.tar.gz",
"x-checker-data": {
"project-id": 4784,
"stable-only": true,
"type": "anitya",
"url-template":
"https://github.com/libsdl-org/SDL_ttf/releases/download/release-${version0}.${version1}.${version2}/SDL2_ttf-${version0}.${version1}.${version2}.tar.gz"
}
}
]
}

View File

@@ -0,0 +1,33 @@
{
"builddir": true,
"buildsystem": "cmake-ninja",
"cleanup": [
"/include",
"/lib/*.la",
"/lib/*.a",
"/lib/cmake",
"/share/aclocal",
"/lib/pkgconfig"
],
"config-opts": [
"-DCMAKE_VERBOSE_MAKEFILE=ON",
"-DCMAKE_BUILD_TYPE:STRING=Release",
"-DCMAKE_INSTALL_LIBDIR:PATH=lib"
],
"name": "SDL3",
"sources": [
{
"sha256": "2938328317301dfbe30176d79c251733aa5e7ec5c436c800b99ed4da7adcb0f0",
"type": "archive",
"url":
"https://github.com/libsdl-org/SDL/releases/download/release-3.2.4/SDL3-3.2.4.tar.gz",
"x-checker-data": {
"project-id": 4781,
"stable-only": true,
"type": "anitya",
"url-template":
"https://github.com/libsdl-org/SDL_image/releases/download/release-${version0}.${version1}.${version2}/SDL3-${version0}.${version1}.${version2}.tar.gz"
}
}
]
}

View File

@@ -0,0 +1,33 @@
{
"builddir": true,
"buildsystem": "cmake-ninja",
"cleanup": [
"/include",
"/lib/*.la",
"/lib/*.a",
"/lib/cmake",
"/share/aclocal",
"/lib/pkgconfig"
],
"config-opts": [
"-DCMAKE_VERBOSE_MAKEFILE=ON",
"-DCMAKE_BUILD_TYPE:STRING=Release",
"-DCMAKE_INSTALL_LIBDIR:PATH=lib"
],
"name": "SDL3_image",
"sources": [
{
"sha256": "1690baea71b2b4ded9895126cddbc03a1000b027d099a4fb4669c4d23d73b19f",
"type": "archive",
"url":
"https://github.com/libsdl-org/SDL_image/releases/download/release-3.2.0/SDL3_image-3.2.0.tar.gz",
"x-checker-data": {
"project-id": 4781,
"stable-only": true,
"type": "anitya",
"url-template":
"https://github.com/libsdl-org/SDL_image/releases/download/release-${version0}.${version1}.${version2}/SDL3_image-${version0}.${version1}.${version2}.tar.gz"
}
}
]
}

View File

@@ -0,0 +1,33 @@
{
"builddir": true,
"buildsystem": "cmake-ninja",
"cleanup": [
"/include",
"/lib/*.la",
"/lib/*.a",
"/lib/cmake",
"/share/aclocal",
"/lib/pkgconfig"
],
"config-opts": [
"-DCMAKE_VERBOSE_MAKEFILE=ON",
"-DCMAKE_BUILD_TYPE:STRING=Release",
"-DCMAKE_INSTALL_LIBDIR:PATH=lib"
],
"name": "SDL3_ttf",
"sources": [
{
"sha256": "0ac7c23d9a037d3e3922ea1027fd8e923f03b0840042a49cca7652d2b49989a6",
"type": "archive",
"url":
"https://github.com/libsdl-org/SDL_ttf/releases/download/prerelease-3.1.2/SDL3_ttf-3.1.2.tar.gz",
"x-checker-data": {
"project-id": 4784,
"stable-only": true,
"type": "anitya",
"url-template":
"https://github.com/libsdl-org/SDL_ttf/releases/download/release-${version0}.${version1}.${version2}/SDL3_ttf-${version0}.${version1}.${version2}.tar.gz"
}
}
]
}

View File

@@ -1,18 +1,26 @@
{
"name": "cjson",
"builddir": true,
"buildsystem": "cmake-ninja",
"cleanup": [],
"config-opts": [
"-DCMAKE_VERBOSE_MAKEFILE=ON",
"-DCMAKE_BUILD_TYPE:STRING=Release",
"-DCMAKE_INSTALL_LIBDIR:PATH=lib"
"-DCMAKE_INSTALL_LIBDIR:PATH=lib",
"-DWITH_PULSE:BOOL=ON"
],
"name": "cjson",
"sources": [
{
"type": "git",
"url": "https://github.com/DaveGamble/cJSON.git",
"tag": "v1.7.17",
"commit": "87d8f0961a01bf09bef98ff89bae9fdec42181ee"
"sha256": "3aa806844a03442c00769b83e99970be70fbef03735ff898f4811dd03b9f5ee5",
"type": "archive",
"url": "https://github.com/DaveGamble/cJSON/archive/refs/tags/v1.7.18.tar.gz",
"x-checker-data": {
"project-id": 21330,
"stable-only": true,
"type": "anitya",
"url-template":
"https://github.com/DaveGamble/cJSON/archive/refs/tags/v${version0}.${version1}.${version2}.tar.gz"
}
}
]
}

View File

@@ -1,12 +1,19 @@
{
"name": "krb5",
"buildsystem": "autotools",
"subdir": "src",
"name": "krb5",
"sources": [
{
"sha256": "b7a4cd5ead67fb08b980b21abd150ff7217e85ea320c9ed0c6dadd304840ad35",
"type": "archive",
"url": "https://kerberos.org/dist/krb5/1.21/krb5-1.21.2.tar.gz",
"sha256": "9560941a9d843c0243a71b17a7ac6fe31c7cebb5bce3983db79e52ae7e850491"
"url": "https://kerberos.org/dist/krb5/1.21/krb5-1.21.3.tar.gz",
"x-checker-data": {
"project-id": 13287,
"stable-only": true,
"type": "anitya",
"url-template":
"https://kerberos.org/dist/krb5/${version0}.${version1}/krb5-${version0}.${version1}.${version2}.tar.gz"
}
}
]
],
"subdir": "src"
}

View File

@@ -1,22 +1,22 @@
{
"name": "libusb",
"config-opts": [
"--disable-static"
],
"cleanup": [
"/lib/*.la",
"/lib/pkgconfig",
"/include"
],
"sources": [
{
"type": "archive",
"url":
"https://github.com/libusb/libusb/releases/download/v1.0.27/libusb-1.0.27.tar.bz2",
"sha256": "ffaa41d741a8a3bee244ac8e54a72ea05bf2879663c098c82fc5757853441575"
}
"config-opts": [
"--disable-static"
],
"name": "libusb",
"post-install": [
"install -Dm644 COPYING /app/share/licenses/libusb/COPYING"
],
"sources": [
{
"sha256": "ffaa41d741a8a3bee244ac8e54a72ea05bf2879663c098c82fc5757853441575",
"type": "archive",
"url":
"https://github.com/libusb/libusb/releases/download/v1.0.27/libusb-1.0.27.tar.bz2"
}
]
}

View File

@@ -1,13 +1,25 @@
{
"name": "opensc",
"buildsystem": "autotools",
"cleanup": [],
"config-opts": [],
"config-opts": [
"--disable-assert",
"--disable-fuzzing",
"--disable-man",
"--disable-strict"
],
"name": "opensc",
"sources": [
{
"sha256": "f16291a031d86e570394762e9f35eaf2fcbc2337a49910f3feae42d54e1688cb",
"type": "archive",
"url": "https://github.com/OpenSC/OpenSC/releases/download/0.25.0/opensc-0.25.0.tar.gz",
"sha256": "e6d7b66e2a508a377ac9d67aa463025d3c54277227be10bd08872e3407d6622f"
"url": "https://github.com/OpenSC/OpenSC/releases/download/0.26.1/opensc-0.26.1.tar.gz",
"x-checker-data": {
"project-id": 13287,
"stable-only": true,
"type": "anitya",
"url-template":
"https://github.com/OpenSC/OpenSC/tags/${version0}.${version1}.${version2}"
}
}
]
}

View File

@@ -1,17 +1,18 @@
{
"name": "openssl",
"buildsystem": "simple",
"build-commands": [
"./config --prefix=/app --openssldir=/app --libdir=lib shared",
"make -j build_sw",
"make -j install_sw"
],
"buildsystem": "simple",
"cleanup": [],
"name": "openssl",
"sources": [
{
"sha256": "002a2d6b30b58bf4bea46c43bdd96365aaf8daa6c428782aa4feee06da197df3",
"type": "archive",
"url": "https://openssl.org/source/openssl-3.1.5.tar.gz",
"sha256": "6ae015467dabf0469b139ada93319327be24b98251ffaeceda0221848dc09262"
"url":
"https://github.com/openssl/openssl/releases/download/openssl-3.4.1/openssl-3.4.1.tar.gz"
}
]
}

View File

@@ -1,23 +1,29 @@
{
"name": "pcsc",
"cleanup": [
"/share/doc",
"/share/man"
],
"config-opts": [
"--disable-libsystemd",
"--enable-pic",
"--disable-libusb",
"--disable-polkit",
"--enable-shared",
"--disable-polkit",
"--with-systemdsystemunitdir=/app/lib/systemd/"
],
"name": "pcsc",
"sources": [
{
"type": "git",
"url": "https://github.com/LudovicRousseau/PCSC.git",
"tag": "2.0.3",
"commit": "c4e7f6f9c6fe56fafd3f13c31fcc4f670ad6d022"
"sha256": "7fcb59f66a323f63cf1ab492579a57d899806835c52ba377af9ac57df68bf39b",
"type": "archive",
"url": "https://github.com/LudovicRousseau/PCSC/archive/refs/tags/2.3.1.tar.gz",
"x-checker-data": {
"project-id": 2611,
"stable-only": true,
"type": "anitya",
"url-template":
"https://github.com/LudovicRousseau/PCSC/tags/${version0}.${version1}.${version2}"
}
}
],
"cleanup": [
"/share/doc",
"/share/man"
]
}

View File

@@ -0,0 +1,39 @@
{
"name": "pcsc",
"config-opts": [
"--disable-libsystemd",
"--enable-pic",
"--disable-libusb",
"--enable-shared",
<<<<<<< HEAD
=======
"--disable-polkit",
>>>>>>> beta
"--with-systemdsystemunitdir=/app/lib/systemd/"
],
"sources": [
{
<<<<<<< HEAD
"type": "git",
"url": "https://github.com/LudovicRousseau/PCSC.git",
"tag": "2.0.0",
"commit": "549922c1355fdd1e85eb0a952fefda7bb96e286a"
=======
"type": "git",
"url": "https://github.com/LudovicRousseau/PCSC.git",
"tag": "2.3.0",
"commit": "a2c25c5fa25b5e2400fe6a002ea2263069ebd94f",
"x-checker-data": {
"type": "anitya",
"project-id": 2611,
"stable-only": true,
"url-template": "https://github.com/LudovicRousseau/PCSC/tags/${version0}.${version1}.${version2}"
}
>>>>>>> beta
}
],
"cleanup": [
"/share/doc",
"/share/man"
]
}

View File

@@ -0,0 +1,26 @@
{
"buildsystem": "autotools",
"name": "pkcs11-helper",
"sources": [
{
"sha256": "076c9f664812a45f2da25efc157338b0b8bb1949117f0144050fec176b6fdf78",
"type": "archive",
"url":
"https://github.com/OpenSC/pkcs11-helper/archive/refs/tags/pkcs11-helper-1.30.0.tar.gz",
"x-checker-data": {
"project-id": 91990,
"stable-only": true,
"type": "anitya",
"url-template":
"https://github.com/OpenSC/pkcs11-helper/archive/refs/tags/pkcs11-helper-$version.tar.gz"
}
},
{
"commands": [
"autoreconf -vfi"
],
"dest-filename": "autogen.sh",
"type": "script"
}
]
}

View File

@@ -1,23 +1,28 @@
{
"name": "uriparser",
"buildsystem": "cmake-ninja",
"cleanup": [
],
"config-opts": [
"-DCMAKE_VERBOSE_MAKEFILE=ON",
"-DCMAKE_BUILD_TYPE:STRING=Release",
"-DCMAKE_INSTALL_LIBDIR:PATH=lib",
"-DURIPARSER_BUILD_TESTS:BOOL=OFF",
"-DURIPARSER_BUILD_DOCS:BOOL=OFF",
"-DURIPARSER_BUILD_TOOLS:BOOL=OFF",
"-DURIPARSER_BUILD_WCHAR_T:BOOL=OFF"
],
"sources": [
{
"type": "git",
"url": "https://github.com/uriparser/uriparser.git",
"tag": "uriparser-0.9.7",
"commit": "634b678fa858abf1d1ebc0634e96e9e29596e92a"
}
]
"builddir": true,
"buildsystem": "cmake-ninja",
"cleanup": [],
"config-opts": [
"-DCMAKE_VERBOSE_MAKEFILE=ON",
"-DCMAKE_BUILD_TYPE:STRING=Release",
"-DCMAKE_INSTALL_LIBDIR:PATH=lib",
"-DURIPARSER_BUILD_DOCS:BOOL=OFF",
"-DURIPARSER_BUILD_TESTS:BOOL=OFF"
],
"name": "urlparser",
"sources": [
{
"sha256": "1d71c054837ea32a31e462bce5a1af272379ecf511e33448e88100b87ff73b2e",
"type": "archive",
"url":
"https://github.com/uriparser/uriparser/releases/download/uriparser-0.9.8/uriparser-0.9.8.tar.xz",
"x-checker-data": {
"project-id": 10160,
"stable-only": true,
"type": "anitya",
"url-template":
"https://github.com/uriparser/uriparser/releases/download/uriparser-${version0}.${version1}.${version2}/uriparser-${version0}.${version1}.${version2}.tar.xz"
}
}
]
}

View File

@@ -1,14 +1,21 @@
{
"name": "xprop",
"sources": [
{
"type": "archive",
"url": "https://xorg.freedesktop.org/releases/individual/app/xprop-1.2.7.tar.xz",
"sha256": "4436e3148bb91a162406230d9f736a49ca8b50b74790015dc15d78d6ce8e825f"
}
],
"cleanup": [
"/share/doc",
"/share/man"
],
"name": "xprop",
"sources": [
{
"sha256": "d689e2adb7ef7b439f6469b51cda8a7daefc83243854c2a3b8f84d0f029d67ee",
"type": "archive",
"url": "https://xorg.freedesktop.org/releases/individual/app/xprop-1.2.8.tar.xz",
"x-checker-data": {
"project-id": 14958,
"stable-only": true,
"type": "anitya",
"url-template":
"https://xorg.freedesktop.org/releases/individual/app/xprop-${version0}.${version1}.${version2}.tar.xz"
}
}
]
}

View File

@@ -6,11 +6,10 @@ SCRIPT_PATH=$(realpath "$SCRIPT_PATH")
BUILD_DEPS=$(/usr/bin/which dpkg-checkbuilddeps)
BUILD_PKG=$(/usr/bin/which dpkg-buildpackage)
if [ -z "$BUILD_DEPS" ] || [ -z "$BUILD_PKG" ];
then
echo "dpkg-buildpackage [$BUILD_PKG] and dpkg-checkbuilddeps [$BUILD_DEPS] required"
echo "Install with 'sudo apt install dpkg-dev'"
exit 1
if [ -z "$BUILD_DEPS" ] || [ -z "$BUILD_PKG" ]; then
echo "dpkg-buildpackage [$BUILD_PKG] and dpkg-checkbuilddeps [$BUILD_DEPS] required"
echo "Install with 'sudo apt install dpkg-dev'"
exit 1
fi
# First create a link to the debian/control folder

View File

@@ -1,4 +1,4 @@
#!/bin/sh
ln -s packaging/deb/freerdp-nightly debian
git rev-parse --short HEAD > .source_version
ln -s packaging/deb/freerdp-nightly debian
git rev-parse --short HEAD >.source_version

View File

@@ -1,3 +1,3 @@
#!/bin/bash
git rev-parse --short HEAD > source_version
git rev-parse --short HEAD >source_version

View File

@@ -22,20 +22,19 @@ CMAKE_CMD_ARGS="-DANDROID_NDK=$ANDROID_NDK \
-DCMAKE_MAKE_PROGRAM=make"
BASE=$(pwd)
for ARCH in $BUILD_ARCH
do
common_run cd $BASE
common_run mkdir -p $BUILD_SRC/cJSON-build/$ARCH
common_run cd $BUILD_SRC/cJSON-build/$ARCH
common_run export ANDROID_NDK=$ANDROID_NDK
common_run $CMAKE_PROGRAM $CMAKE_CMD_ARGS \
-DANDROID_ABI=$ARCH \
-DCMAKE_INSTALL_PREFIX=$BUILD_DST/$ARCH \
-DCMAKE_INSTALL_LIBDIR=. \
-B . \
-S $BUILD_SRC
echo $(pwd)
common_run $CMAKE_PROGRAM --build . --target install
for ARCH in $BUILD_ARCH; do
common_run cd $BASE
common_run mkdir -p $BUILD_SRC/cJSON-build/$ARCH
common_run cd $BUILD_SRC/cJSON-build/$ARCH
common_run export ANDROID_NDK=$ANDROID_NDK
common_run $CMAKE_PROGRAM $CMAKE_CMD_ARGS \
-DANDROID_ABI=$ARCH \
-DCMAKE_INSTALL_PREFIX=$BUILD_DST/$ARCH \
-DCMAKE_INSTALL_LIBDIR=. \
-B . \
-S $BUILD_SRC
echo $(pwd)
common_run $CMAKE_PROGRAM --build . --target install
done
echo "Successfully build library for architectures $BUILD_ARCH"

View File

@@ -1,332 +1,309 @@
#!/bin/bash -x
SCRIPT_NAME="${BASH_SOURCE[0]}"
SCRIPT_PATH=$(dirname "${BASH_SOURCE[0]}")
SCRIPT_PATH=$(realpath "$SCRIPT_PATH")
FIND_ARGS="-type f -print -quit"
case "$(uname -s)" in
Darwin)
FIND_ARGS="-perm +111 $FIND_ARGS"
;;
Darwin)
FIND_ARGS="-perm +111 $FIND_ARGS"
;;
*)
FIND_ARGS="-executable $FIND_ARGS"
;;
*)
FIND_ARGS="-executable $FIND_ARGS"
;;
esac
if [ -z $BUILD_ARCH ]; then
BUILD_ARCH="armeabi-v7a x86 x86_64 arm64-v8a"
BUILD_ARCH="armeabi-v7a x86 x86_64 arm64-v8a"
fi
if [ -z $NDK_TARGET ]; then
NDK_TARGET=21
NDK_TARGET=21
fi
if [ -z $CMAKE_PROGRAM ]; then
CMAKE_PROGRAM="cmake-missing"
CMAKE_PROGRAM="cmake-missing"
fi
if [ -z $CCACHE ]; then
CCACHE=$(which ccache)
CCACHE=$(which ccache)
fi
if [ -z $ANDROID_NDK ]; then
ANDROID_NDK="ndk-missing"
ANDROID_NDK="ndk-missing"
fi
if [ -z $ANDROID_SDK ]; then
ANDROID_SDK="sdk-missing"
ANDROID_SDK="sdk-missing"
fi
if [ -z $BUILD_DST ]; then
BUILD_DST=$(pwd)/libs
BUILD_DST=$(pwd)/libs
fi
if [ -z $BUILD_SRC ]; then
BUILD_SRC=$(pwd)/src
BUILD_SRC=$(pwd)/src
fi
if [ -z $SCM_URL ]; then
SCM_URL="missing"
SCM_URL="missing"
fi
if [ -z $SCM_TAG ]; then
SCM_TAG=master
SCM_TAG=master
fi
if [ -z $SCM_HASH ]; then
SCM_HASH="missing"
SCM_HASH="missing"
fi
CLEAN_BUILD_DIR=0
function common_help {
echo "$(BASHSOURCE[0]) supports the following arguments:"
echo " --ndk The base directory of your android NDK defa"
echo " ANDROID_NDK=$ANDROID_NDK"
echo " --sdk The base directory of your android SDK defa"
echo " ANDROID_SDK=$ANDROID_SDK"
echo " --arch A list of architectures to build"
echo " BUILD_ARCH=$BUILD_ARCH"
echo " --dst The destination directory for include and library files"
echo " BUILD_DST=$BUILD_DST"
echo " --src The source directory for SCM checkout"
echo " BUILD_SRC=$BUILD_SRC"
echo " --url The SCM source url"
echo " SCM_URL=$SCM_URL"
echo " --tag The SCM branch or tag to check out"
echo " SCM_TAG=$SCM_TAG"
echo " --hash The SCM commit or hash to check out"
echo " SCM_HASH=$SCM_HASH"
echo " --clean Clean the destination before build"
echo " --help Display this help"
exit 0
echo "$SCRIPT_NAME supports the following arguments:"
echo " --ndk The base directory of your android NDK defa"
echo " ANDROID_NDK=$ANDROID_NDK"
echo " --sdk The base directory of your android SDK defa"
echo " ANDROID_SDK=$ANDROID_SDK"
echo " --arch A list of architectures to build"
echo " BUILD_ARCH=$BUILD_ARCH"
echo " --dst The destination directory for include and library files"
echo " BUILD_DST=$BUILD_DST"
echo " --src The source directory for SCM checkout"
echo " BUILD_SRC=$BUILD_SRC"
echo " --url The SCM source url"
echo " SCM_URL=$SCM_URL"
echo " --tag The SCM branch or tag to check out"
echo " SCM_TAG=$SCM_TAG"
echo " --hash The SCM commit or hash to check out"
echo " SCM_HASH=$SCM_HASH"
echo " --clean Clean the destination before build"
echo " --help Display this help"
exit 0
}
function common_run {
echo "[RUN] $@"
"$@"
RES=$?
if [[ $RES -ne 0 ]];
then
echo "[ERROR] $@ returned $RES"
exit 1
fi
echo "[RUN] $@"
"$@"
RES=$?
if [[ $RES -ne 0 ]]; then
echo "[ERROR] $@ returned $RES"
exit 1
fi
}
function common_check_requirements {
if [[ ! -d $ANDROID_NDK ]];
then
echo "export ANDROID_NDK to point to your NDK location."
exit 1
fi
if [[ ! -d $ANDROID_NDK ]]; then
echo "export ANDROID_NDK to point to your NDK location."
exit 1
fi
if [[ ! -d $ANDROID_SDK ]];
then
echo "export ANDROID_SDK to point to your SDK location."
exit 1
fi
if [[ -z $BUILD_DST ]];
then
echo "Destination directory not valid"
exit 1
fi
if [[ ! -d $ANDROID_SDK ]]; then
echo "export ANDROID_SDK to point to your SDK location."
exit 1
fi
if [[ -z $BUILD_DST ]]; then
echo "Destination directory not valid"
exit 1
fi
if [[ -z $BUILD_SRC ]];
then
echo "Source directory not valid"
exit 1
fi
if [[ -z $BUILD_SRC ]]; then
echo "Source directory not valid"
exit 1
fi
if [[ -z $SCM_URL ]];
then
echo "Source URL not defined! Define SCM_URL"
exit 1
fi
if [[ -z $SCM_URL ]]; then
echo "Source URL not defined! Define SCM_URL"
exit 1
fi
if [[ -z $SCM_TAG ]];
then
echo "SCM_TAG / BRANCH not defined! Define SCM_TAG"
exit 1
fi
if [[ -z $SCM_TAG ]]; then
echo "SCM_TAG / BRANCH not defined! Define SCM_TAG"
exit 1
fi
if [[ -z $SCM_HASH ]];
then
echo "SCM_HASH not defined! Define SCM_HASH"
exit 1
fi
if [[ -z $SCM_HASH ]]; then
echo "SCM_HASH not defined! Define SCM_HASH"
exit 1
fi
if [[ -z $NDK_TARGET ]];
then
echo "Android platform NDK_TARGET not defined"
exit 1
fi
if [[ -z $NDK_TARGET ]]; then
echo "Android platform NDK_TARGET not defined"
exit 1
fi
if [ -z $CMAKE_PROGRAM ] || [ "$CMAKE_PROGRAM" == "cmake-missing" ]; then
CMAKE_PROGRAM=$(find $ANDROID_SDK/cmake -name cmake $FIND_ARGS)
if [ -z $CMAKE_PROGRAM ]; then
echo "CMake not found in $ANDROID_SDK, install CMake from the android SDK!"
exit 1
fi
fi
if [ -z $CMAKE_PROGRAM ] || [ "$CMAKE_PROGRAM" == "cmake-missing" ]; then
CMAKE_PROGRAM=$(find $ANDROID_SDK/cmake -name cmake $FIND_ARGS)
if [ -z $CMAKE_PROGRAM ]; then
echo "CMake not found in $ANDROID_SDK, install CMake from the android SDK!"
exit 1
fi
fi
for CMD in make git $CMAKE_PROGRAM
do
if ! type $CMD >/dev/null; then
echo "Command $CMD not found. Install and add it to the PATH."
exit 1
fi
done
for CMD in make git $CMAKE_PROGRAM; do
if ! type $CMD >/dev/null; then
echo "Command $CMD not found. Install and add it to the PATH."
exit 1
fi
done
if [ "${BUILD_SRC:0:1}" != "/" ];
then
BUILD_SRC=$(pwd)/$BUILD_SRC
fi
if [ "${BUILD_DST:0:1}" != "/" ];
then
BUILD_DST=$(pwd)/$BUILD_DST
fi
if [ "${BUILD_SRC:0:1}" != "/" ]; then
BUILD_SRC=$(pwd)/$BUILD_SRC
fi
if [ "${BUILD_DST:0:1}" != "/" ]; then
BUILD_DST=$(pwd)/$BUILD_DST
fi
}
function common_parse_arguments {
while [[ $# > 0 ]]
do
key="$1"
case $key in
--conf)
source "$2" || exit 1
shift
;;
while [[ $# > 0 ]]; do
key="$1"
case $key in
--conf)
source "$2" || exit 1
shift
;;
--target)
NDK_TARGET="$2"
shift
;;
--target)
NDK_TARGET="$2"
shift
;;
--ndk)
ANDROID_NDK="$2"
shift
;;
--ndk)
ANDROID_NDK="$2"
shift
;;
--sdk)
ANDROID_SDK="$2"
shift
;;
--sdk)
ANDROID_SDK="$2"
shift
;;
--arch)
BUILD_ARCH="$2"
shift
;;
--arch)
BUILD_ARCH="$2"
shift
;;
--dst)
BUILD_DST="$2"
shift
;;
--dst)
BUILD_DST="$2"
shift
;;
--src)
BUILD_SRC="$2"
shift
;;
--src)
BUILD_SRC="$2"
shift
;;
--url)
SCM_URL="$2"
shift
;;
--url)
SCM_URL="$2"
shift
;;
--tag)
SCM_TAG="$2"
shift
;;
--tag)
SCM_TAG="$2"
shift
;;
--hash)
SCM_HASH="$2"
shift
;;
--hash)
SCM_HASH="$2"
shift
;;
--clean)
CLEAN_BUILD_DIR=1
shift
;;
--clean)
CLEAN_BUILD_DIR=1
shift
;;
--help)
common_help
shift
;;
--help)
common_help
shift
;;
*) # Unknown
;;
esac
shift
done
*) # Unknown
;;
esac
shift
done
common_check_requirements
common_check_requirements
}
function common_update {
if [ $# -ne 4 ];
then
echo "Invalid arguments to update function $@"
exit 1
fi
SCM_URL=$1
SCM_TAG=$2
BUILD_SRC=$3
SCM_HASH=$4
if [ $# -ne 4 ]; then
echo "Invalid arguments to update function $@"
exit 1
fi
SCM_URL=$1
SCM_TAG=$2
BUILD_SRC=$3
SCM_HASH=$4
echo "Preparing checkout..."
BASE=$(pwd)
CACHE=$(realpath $SCRIPT_PATH/../cache)
common_run mkdir -p $CACHE
TARFILE="$CACHE/$SCM_TAG.tar.gz"
echo "Preparing checkout..."
BASE=$(pwd)
CACHE=$(realpath $SCRIPT_PATH/../cache)
common_run mkdir -p $CACHE
TARFILE="$CACHE/$SCM_TAG.tar.gz"
if [[ ! -f "$TARFILE" ]];
then
WGET=$(which wget)
CURL=$(which curl)
if [ -x "$CURL" ];
then
common_run $CURL -L -o "$TARFILE" "$SCM_URL/$SCM_TAG.tar.gz"
elif [ -x "$WGET" ];
then
common_run $WGET -O "$TARFILE" "$SCM_URL/$SCM_TAG.tar.gz"
else
echo "Neither wget nor curl installed, aborting"
exit -1
fi
fi
if [[ ! -f "$TARFILE" ]]; then
WGET=$(which wget)
CURL=$(which curl)
if [ -x "$CURL" ]; then
common_run $CURL -L -o "$TARFILE" "$SCM_URL/$SCM_TAG.tar.gz"
elif [ -x "$WGET" ]; then
common_run $WGET -O "$TARFILE" "$SCM_URL/$SCM_TAG.tar.gz"
else
echo "Neither wget nor curl installed, aborting"
exit -1
fi
fi
echo "$SCM_HASH $TARFILE" > $TARFILE.sha256sum
common_run sha256sum -c $TARFILE.sha256sum
echo "$SCM_HASH $TARFILE" >$TARFILE.sha256sum
common_run sha256sum -c $TARFILE.sha256sum
if [[ -d $BUILD_SRC ]];
then
common_run rm -rf $BUILD_SRC
fi
common_run mkdir -p $BUILD_SRC
common_run cd $BUILD_SRC
common_run tar zxf "$TARFILE" --strip 1
common_run cd $BASE
if [[ -d $BUILD_SRC ]]; then
common_run rm -rf $BUILD_SRC
fi
common_run mkdir -p $BUILD_SRC
common_run cd $BUILD_SRC
common_run tar zxf "$TARFILE" --strip 1
common_run cd $BASE
}
function common_clean {
if [ $CLEAN_BUILD_DIR -ne 1 ];
then
return
fi
if [ $CLEAN_BUILD_DIR -ne 1 ]; then
return
fi
if [ $# -ne 1 ];
then
echo "Invalid arguments to clean function $@"
exit 1
fi
if [ $# -ne 1 ]; then
echo "Invalid arguments to clean function $@"
exit 1
fi
echo "Cleaning up $1..."
common_run rm -rf $1
echo "Cleaning up $1..."
common_run rm -rf $1
}
function common_copy {
if [ $# -ne 2 ];
then
echo "Invalid arguments to copy function $@"
exit 1
fi
if [ ! -d $1 ] || [ ! -d $1/include ] || [ ! -d $1/libs ];
then
echo "Invalid source $1"
exit 1
fi
if [ -z $2 ];
then
echo "Invalid destination $2"
exit 1
fi
if [ $# -ne 2 ]; then
echo "Invalid arguments to copy function $@"
exit 1
fi
if [ ! -d $1 ] || [ ! -d $1/include ] || [ ! -d $1/libs ]; then
echo "Invalid source $1"
exit 1
fi
if [ -z $2 ]; then
echo "Invalid destination $2"
exit 1
fi
if [ ! -d $2 ];
then
common_run mkdir -p $2
fi
common_run cp -L -r $1/include $2
common_run cp -L -r $1/libs/* $2
if [ ! -d $2 ]; then
common_run mkdir -p $2
fi
common_run cp -L -r $1/include $2
common_run cp -L -r $1/libs/* $2
}

View File

@@ -8,212 +8,210 @@ OLD_PATH=$PATH
source $(dirname "${BASH_SOURCE[0]}")/android-build-common.sh
function get_toolchain() {
HOST_OS=$(uname -s)
case ${HOST_OS} in
Darwin) HOST_OS=darwin;;
Linux) HOST_OS=linux;;
FreeBsd) HOST_OS=freebsd;;
CYGWIN*|*_NT-*) HOST_OS=cygwin;;
esac
HOST_OS=$(uname -s)
case ${HOST_OS} in
Darwin) HOST_OS=darwin ;;
Linux) HOST_OS=linux ;;
FreeBsd) HOST_OS=freebsd ;;
CYGWIN* | *_NT-*) HOST_OS=cygwin ;;
esac
HOST_ARCH=$(uname -m)
case ${HOST_ARCH} in
i?86) HOST_ARCH=x86;;
x86_64|amd64) HOST_ARCH=x86_64;;
esac
HOST_ARCH=$(uname -m)
case ${HOST_ARCH} in
i?86) HOST_ARCH=x86 ;;
x86_64 | amd64) HOST_ARCH=x86_64 ;;
esac
echo "${HOST_OS}-${HOST_ARCH}"
echo "${HOST_OS}-${HOST_ARCH}"
}
function get_build_host() {
case ${ARCH} in
armeabi-v7a)
echo "arm-linux-androideabi"
;;
arm64-v8a)
echo "aarch64-linux-android"
;;
x86)
echo "i686-linux-android"
;;
x86_64)
echo "x86_64-linux-android"
;;
esac
case ${ARCH} in
armeabi-v7a)
echo "arm-linux-androideabi"
;;
arm64-v8a)
echo "aarch64-linux-android"
;;
x86)
echo "i686-linux-android"
;;
x86_64)
echo "x86_64-linux-android"
;;
esac
}
function get_clang_target_host() {
case ${ARCH} in
armeabi-v7a)
echo "armv7a-linux-androideabi${NDK_TARGET}"
;;
arm64-v8a)
echo "aarch64-linux-android${NDK_TARGET}"
;;
x86)
echo "i686-linux-android${NDK_TARGET}"
;;
x86_64)
echo "x86_64-linux-android${NDK_TARGET}"
;;
esac
case ${ARCH} in
armeabi-v7a)
echo "armv7a-linux-androideabi${NDK_TARGET}"
;;
arm64-v8a)
echo "aarch64-linux-android${NDK_TARGET}"
;;
x86)
echo "i686-linux-android${NDK_TARGET}"
;;
x86_64)
echo "x86_64-linux-android${NDK_TARGET}"
;;
esac
}
function get_arch_specific_ldflags() {
case ${ARCH} in
armeabi-v7a)
echo "-march=armv7-a -mfpu=neon -mfloat-abi=softfp -Wl,--fix-cortex-a8"
;;
arm64-v8a)
echo "-march=armv8-a"
;;
x86)
echo "-march=i686"
;;
x86_64)
echo "-march=x86-64"
;;
esac
case ${ARCH} in
armeabi-v7a)
echo "-march=armv7-a -mfpu=neon -mfloat-abi=softfp -Wl,--fix-cortex-a8"
;;
arm64-v8a)
echo "-march=armv8-a"
;;
x86)
echo "-march=i686"
;;
x86_64)
echo "-march=x86-64"
;;
esac
}
function set_toolchain_clang_paths {
TOOLCHAIN=$(get_toolchain)
TOOLCHAIN=$(get_toolchain)
common_run export PATH=$PATH:${ANDROID_NDK}/toolchains/llvm/prebuilt/${TOOLCHAIN}/bin
AR=llvm-ar
NM=llvm-nm
RANLIB=llvm-ranlib
STRIP=llvm-strip
CC=$(get_clang_target_host)-clang
CXX=$(get_clang_target_host)-clang++
common_run export PATH=$PATH:${ANDROID_NDK}/toolchains/llvm/prebuilt/${TOOLCHAIN}/bin
AR=llvm-ar
NM=llvm-nm
RANLIB=llvm-ranlib
STRIP=llvm-strip
CC=$(get_clang_target_host)-clang
CXX=$(get_clang_target_host)-clang++
case ${ARCH} in
arm64-v8a)
common_run export ac_cv_c_bigendian=no
;;
esac
case ${ARCH} in
arm64-v8a)
common_run export ac_cv_c_bigendian=no
;;
esac
}
function build {
echo "Building FFmpeg architecture $1..."
BASE=$(pwd)
common_run cd $BUILD_SRC
echo "Building FFmpeg architecture $1..."
BASE=$(pwd)
common_run cd $BUILD_SRC
BUILD_HOST=$(get_build_host)
set_toolchain_clang_paths
LDFLAGS=$(get_arch_specific_ldflags)
BUILD_HOST=$(get_build_host)
set_toolchain_clang_paths
LDFLAGS=$(get_arch_specific_ldflags)
CARCH=$TARGET_ARCH
if [ "$CARCH" == "x86_64" ]; then
CARCH="x86-64"
fi
PATH=$ANDROID_NDK:$PATH
common_run ./configure \
--cross-prefix="${BUILD_HOST}-" \
--sysroot="${ANDROID_NDK}/toolchains/llvm/prebuilt/${TOOLCHAIN}/sysroot" \
--arch="${CARCH}" \
--cpu="${TARGET_CPU}" \
--cc="${CC}" \
--cxx="${CXX}" \
--ar="${AR}" \
--nm="${NM}" \
--ranlib="${RANLIB}" \
--strip="${STRIP}" \
--extra-ldflags="${LDFLAGS}" \
--prefix="${BUILD_DST}/${ARCH}" \
--pkg-config="${HOST_PKG_CONFIG_PATH}" \
--target-os=android \
${ARCH_OPTIONS} \
--enable-cross-compile \
--enable-pic \
--enable-lto \
--enable-jni \
--enable-mediacodec \
--enable-shared \
--disable-vulkan \
--disable-stripping \
--disable-programs \
--disable-doc \
--disable-avdevice \
--disable-avfilter \
--disable-avformat \
--disable-everything \
--enable-encoder=aac \
--enable-encoder=libfdk_aac \
--enable-encoder=libgsm \
--enable-encoder=libgsm_ms \
--enable-encoder=libopenh264 \
--enable-encoder=libopus \
--enable-encoder=pcm_alaw \
--enable-encoder=pcm_mulaw \
--enable-encoder=pcm_s16le \
--enable-encoder=pcm_u16le \
--enable-encoder=h264 \
--enable-encoder=h264_omx \
--enable-encoder=h264_mediacodec \
--enable-encoder=h264_vulkan \
--enable-decoder=aac \
--enable-decoder=aac_mediacodec \
--enable-decoder=adpcm_g722 \
--enable-decoder=adpcm_g726 \
--enable-decoder=adpcm_g726le \
--enable-decoder=gsm \
--enable-decoder=gsm_ms \
--enable-decoder=mp3 \
--enable-decoder=mp3_mediacodec \
--enable-decoder=h264 \
--enable-decoder=h264_mediacodec \
--enable-decoder=libopus \
--enable-decoder=pcm_alaw \
--enable-decoder=pcm_mulaw \
--enable-decoder=pcm_s16le \
--enable-decoder=pcm_u16le
CARCH=$TARGET_ARCH
if [ "$CARCH" == "x86_64" ]; then
CARCH="x86-64"
fi
PATH=$ANDROID_NDK:$PATH
common_run ./configure \
--cross-prefix="${BUILD_HOST}-" \
--sysroot="${ANDROID_NDK}/toolchains/llvm/prebuilt/${TOOLCHAIN}/sysroot" \
--arch="${CARCH}" \
--cpu="${TARGET_CPU}" \
--cc="${CC}" \
--cxx="${CXX}" \
--ar="${AR}" \
--nm="${NM}" \
--ranlib="${RANLIB}" \
--strip="${STRIP}" \
--extra-ldflags="${LDFLAGS}" \
--prefix="${BUILD_DST}/${ARCH}" \
--pkg-config="${HOST_PKG_CONFIG_PATH}" \
--target-os=android \
${ARCH_OPTIONS} \
--enable-cross-compile \
--enable-pic \
--enable-lto \
--enable-jni \
--enable-mediacodec \
--enable-shared \
--disable-vulkan \
--disable-stripping \
--disable-programs \
--disable-doc \
--disable-avdevice \
--disable-avfilter \
--disable-avformat \
--disable-everything \
--enable-encoder=aac \
--enable-encoder=libfdk_aac \
--enable-encoder=libgsm \
--enable-encoder=libgsm_ms \
--enable-encoder=libopenh264 \
--enable-encoder=libopus \
--enable-encoder=pcm_alaw \
--enable-encoder=pcm_mulaw \
--enable-encoder=pcm_s16le \
--enable-encoder=pcm_u16le \
--enable-encoder=h264 \
--enable-encoder=h264_omx \
--enable-encoder=h264_mediacodec \
--enable-encoder=h264_vulkan \
--enable-decoder=aac \
--enable-decoder=aac_mediacodec \
--enable-decoder=adpcm_g722 \
--enable-decoder=adpcm_g726 \
--enable-decoder=adpcm_g726le \
--enable-decoder=gsm \
--enable-decoder=gsm_ms \
--enable-decoder=mp3 \
--enable-decoder=mp3_mediacodec \
--enable-decoder=h264 \
--enable-decoder=h264_mediacodec \
--enable-decoder=libopus \
--enable-decoder=pcm_alaw \
--enable-decoder=pcm_mulaw \
--enable-decoder=pcm_s16le \
--enable-decoder=pcm_u16le
common_run make clean
common_run make -j
common_run make install
common_run make clean
common_run make -j
common_run make install
}
# Run the main program.
common_parse_arguments $@
common_update $SCM_URL $SCM_TAG $BUILD_SRC $SCM_HASH
HOST_PKG_CONFIG_PATH=`command -v pkg-config`
HOST_PKG_CONFIG_PATH=$(command -v pkg-config)
if [ -z ${HOST_PKG_CONFIG_PATH} ]; then
echo "(*) pkg-config command not found\n"
exit 1
echo "(*) pkg-config command not found\n"
exit 1
fi
for ARCH in $BUILD_ARCH; do
case ${ARCH} in
armeabi-v7a)
TARGET_CPU="armv7-a"
TARGET_ARCH="armv7-a"
ARCH_OPTIONS=" --enable-neon --enable-asm --enable-inline-asm"
;;
arm64-v8a)
TARGET_CPU="armv8-a"
TARGET_ARCH="aarch64"
ARCH_OPTIONS=" --enable-neon --enable-asm --enable-inline-asm"
;;
x86)
TARGET_CPU="i686"
TARGET_ARCH="i686"
for ARCH in $BUILD_ARCH
do
case ${ARCH} in
armeabi-v7a)
TARGET_CPU="armv7-a"
TARGET_ARCH="armv7-a"
ARCH_OPTIONS=" --enable-neon --enable-asm --enable-inline-asm"
;;
arm64-v8a)
TARGET_CPU="armv8-a"
TARGET_ARCH="aarch64"
ARCH_OPTIONS=" --enable-neon --enable-asm --enable-inline-asm"
;;
x86)
TARGET_CPU="i686"
TARGET_ARCH="i686"
# asm disabled due to this ticker https://trac.ffmpeg.org/ticket/4928
ARCH_OPTIONS=" --disable-neon --disable-asm --disable-inline-asm"
;;
x86_64)
TARGET_CPU="x86_64"
TARGET_ARCH="x86_64"
ARCH_OPTIONS=" --disable-neon --enable-asm --enable-inline-asm"
;;
esac
# asm disabled due to this ticker https://trac.ffmpeg.org/ticket/4928
ARCH_OPTIONS=" --disable-neon --disable-asm --disable-inline-asm"
;;
x86_64)
TARGET_CPU="x86_64"
TARGET_ARCH="x86_64"
ARCH_OPTIONS=" --disable-neon --enable-asm --enable-inline-asm"
;;
esac
build
common_run cp -L $BUILD_DST/$ARCH/lib/*.so $BUILD_DST/$ARCH/
build
common_run cp -L $BUILD_DST/$ARCH/lib/*.so $BUILD_DST/$ARCH/
common_run export PATH=$OLD_PATH
common_run export PATH=$OLD_PATH
done

View File

@@ -28,74 +28,70 @@ source $SCRIPT_PATH/android-build.conf
# Parse arguments.
REMAINING=""
while [[ $# > 0 ]]
do
key="$1"
case $key in
--freerdp-src)
SRC_DIR="$2"
shift
;;
--openh264)
WITH_OPENH264=1
shift
;;
--openh264-ndk)
shift
ANDROID_NDK_OPENH264=$1
shift
;;
--ffmpeg)
WITH_FFMPEG=1
shift
;;
--cjson)
WITH_AAD=1
shift
;;
--openssl)
WITH_OPENSSL=1
shift
;;
--debug)
CMAKE_BUILD_TYPE=Debug
shift
;;
--release)
CMAKE_BUILD_TYPE=Release
shift
;;
--relWithDebug)
CMAKE_BUILD_TYPE=RelWithDebug
shift
;;
--build-deps)
BUILD_DEPS=1
shift
;;
*)
REMAINING="$REMAINING $key"
shift
;;
esac
while [[ $# > 0 ]]; do
key="$1"
case $key in
--freerdp-src)
SRC_DIR="$2"
shift
;;
--openh264)
WITH_OPENH264=1
shift
;;
--openh264-ndk)
shift
ANDROID_NDK_OPENH264=$1
shift
;;
--ffmpeg)
WITH_FFMPEG=1
shift
;;
--cjson)
WITH_AAD=1
shift
;;
--openssl)
WITH_OPENSSL=1
shift
;;
--debug)
CMAKE_BUILD_TYPE=Debug
shift
;;
--release)
CMAKE_BUILD_TYPE=Release
shift
;;
--relWithDebug)
CMAKE_BUILD_TYPE=RelWithDebug
shift
;;
--build-deps)
BUILD_DEPS=1
shift
;;
*)
REMAINING="$REMAINING $key"
shift
;;
esac
done
common_parse_arguments $REMAINING
if [ -z ${WITH_MEDIACODEC+x} ];
then
common_run echo "WITH_MEDIACODEC unset, defining WITH_MEDIACODEC=1"
WITH_MEDIACODEC=1
if [ -z ${WITH_MEDIACODEC+x} ]; then
common_run echo "WITH_MEDIACODEC unset, defining WITH_MEDIACODEC=1"
WITH_MEDIACODEC=1
fi
# clean up top
if [ -d $BUILD_SRC ];
then
common_clean $BUILD_SRC
if [ -d $BUILD_SRC ]; then
common_clean $BUILD_SRC
fi
if [ -d $BUILD_DST ];
then
common_run mkdir -p $BUILD_DST
if [ -d $BUILD_DST ]; then
common_run mkdir -p $BUILD_DST
fi
# Prepare the environment
@@ -115,105 +111,93 @@ CMAKE_CMD_ARGS="-DANDROID_NDK=$ANDROID_NDK \
-DCMAKE_MAKE_PROGRAM=make"
BASE=$(pwd)
for ARCH in $BUILD_ARCH
do
# build dependencies.
if [ $WITH_OPENH264 -ne 0 ];
then
if [ -z "$ANDROID_NDK_OPENH264" ]
then
echo
echo "Warning: Missing openh264-ndk, using $ANDROID_NDK" >&2
echo
ANDROID_NDK_OPENH264=$ANDROID_NDK
fi
if [ $BUILD_DEPS -ne 0 ];
then
common_run bash $SCRIPT_PATH/android-build-openh264.sh \
--src $BUILD_SRC/openh264 --dst $BUILD_DST \
--sdk "$ANDROID_SDK" \
--ndk "$ANDROID_NDK_OPENH264" \
--arch $ARCH \
--target $NDK_TARGET \
--tag $OPENH264_TAG \
--hash $OPENH264_HASH
fi
CMAKE_CMD_ARGS="$CMAKE_CMD_ARGS -DWITH_OPENH264=ON"
else
CMAKE_CMD_ARGS="$CMAKE_CMD_ARGS -DWITH_OPENH264=OFF"
fi
for ARCH in $BUILD_ARCH; do
# build dependencies.
if [ $WITH_OPENH264 -ne 0 ]; then
if [ -z "$ANDROID_NDK_OPENH264" ]; then
echo
echo "Warning: Missing openh264-ndk, using $ANDROID_NDK" >&2
echo
ANDROID_NDK_OPENH264=$ANDROID_NDK
fi
if [ $BUILD_DEPS -ne 0 ]; then
common_run bash $SCRIPT_PATH/android-build-openh264.sh \
--src $BUILD_SRC/openh264 --dst $BUILD_DST \
--sdk "$ANDROID_SDK" \
--ndk "$ANDROID_NDK_OPENH264" \
--arch $ARCH \
--target $NDK_TARGET \
--tag $OPENH264_TAG \
--hash $OPENH264_HASH
fi
CMAKE_CMD_ARGS="$CMAKE_CMD_ARGS -DWITH_OPENH264=ON"
else
CMAKE_CMD_ARGS="$CMAKE_CMD_ARGS -DWITH_OPENH264=OFF"
fi
if [ $WITH_MEDIACODEC -ne 0 ];
then
CMAKE_CMD_ARGS="$CMAKE_CMD_ARGS -DWITH_MEDIACODEC=ON"
else
CMAKE_CMD_ARGS="$CMAKE_CMD_ARGS -DWITH_MEDIACODEC=OFF"
fi
if [ $WITH_MEDIACODEC -ne 0 ]; then
CMAKE_CMD_ARGS="$CMAKE_CMD_ARGS -DWITH_MEDIACODEC=ON"
else
CMAKE_CMD_ARGS="$CMAKE_CMD_ARGS -DWITH_MEDIACODEC=OFF"
fi
if [ $WITH_FFMPEG -ne 0 ];
then
if [ $BUILD_DEPS -ne 0 ];
then
common_run bash $SCRIPT_PATH/android-build-ffmpeg.sh \
--src $BUILD_SRC/ffmpeg --dst $BUILD_DST \
--sdk "$ANDROID_SDK" \
--ndk "$ANDROID_NDK" \
--arch $ARCH \
--target $NDK_TARGET \
--tag $FFMPEG_TAG \
--hash $FFMPEG_HASH
fi
CMAKE_CMD_ARGS="$CMAKE_CMD_ARGS -DWITH_FFMPEG=ON -DWITH_SWCALE=ON"
else
CMAKE_CMD_ARGS="$CMAKE_CMD_ARGS -DWITH_FFMPEG=OFF -DWITH_SWSCALE=OFF"
fi
if [ $WITH_AAD -ne 0 ];
then
if [ $BUILD_DEPS -ne 0 ];
then
common_run bash $SCRIPT_PATH/android-build-cjson.sh \
--src $BUILD_SRC/cjson --dst $BUILD_DST \
--sdk "$ANDROID_SDK" \
--ndk "$ANDROID_NDK" \
--arch $ARCH \
--target $NDK_TARGET \
--tag $CJSON_TAG \
--hash $CJSON_HASH
fi
fi
if [ $WITH_OPENSSL -ne 0 ];
then
if [ $BUILD_DEPS -ne 0 ];
then
common_run bash $SCRIPT_PATH/android-build-openssl.sh \
--src $BUILD_SRC/openssl --dst $BUILD_DST \
--sdk "$ANDROID_SDK" \
--ndk $ANDROID_NDK \
--arch $ARCH \
--target $NDK_TARGET \
--tag $OPENSSL_TAG \
--hash $OPENSSL_HASH
fi
fi
if [ $WITH_FFMPEG -ne 0 ]; then
if [ $BUILD_DEPS -ne 0 ]; then
common_run bash $SCRIPT_PATH/android-build-ffmpeg.sh \
--src $BUILD_SRC/ffmpeg --dst $BUILD_DST \
--sdk "$ANDROID_SDK" \
--ndk "$ANDROID_NDK" \
--arch $ARCH \
--target $NDK_TARGET \
--tag $FFMPEG_TAG \
--hash $FFMPEG_HASH
fi
CMAKE_CMD_ARGS="$CMAKE_CMD_ARGS -DWITH_FFMPEG=ON -DWITH_SWCALE=ON"
else
CMAKE_CMD_ARGS="$CMAKE_CMD_ARGS -DWITH_FFMPEG=OFF -DWITH_SWSCALE=OFF"
fi
if [ $WITH_AAD -ne 0 ]; then
if [ $BUILD_DEPS -ne 0 ]; then
common_run bash $SCRIPT_PATH/android-build-cjson.sh \
--src $BUILD_SRC/cjson --dst $BUILD_DST \
--sdk "$ANDROID_SDK" \
--ndk "$ANDROID_NDK" \
--arch $ARCH \
--target $NDK_TARGET \
--tag $CJSON_TAG \
--hash $CJSON_HASH
fi
fi
if [ $WITH_OPENSSL -ne 0 ]; then
if [ $BUILD_DEPS -ne 0 ]; then
common_run bash $SCRIPT_PATH/android-build-openssl.sh \
--src $BUILD_SRC/openssl --dst $BUILD_DST \
--sdk "$ANDROID_SDK" \
--ndk $ANDROID_NDK \
--arch $ARCH \
--target $NDK_TARGET \
--tag $OPENSSL_TAG \
--hash $OPENSSL_HASH
fi
fi
# Build and install the library.
if [ $DEPS_ONLY -eq 0 ];
then
common_run cd $BASE
common_run mkdir -p $BUILD_SRC/freerdp-build/$ARCH
common_run cd $BUILD_SRC/freerdp-build/$ARCH
common_run export ANDROID_NDK=$ANDROID_NDK
common_run $CMAKE_PROGRAM $CMAKE_CMD_ARGS \
-DANDROID_ABI=$ARCH \
-DCMAKE_INSTALL_PREFIX=$BUILD_DST/$ARCH \
-DCMAKE_INSTALL_LIBDIR=. \
-DCMAKE_PREFIX_PATH=$BUILD_DST/$ARCH \
-DCMAKE_SHARED_LINKER_FLAGS="-L$BUILD_DST/$ARCH" \
-DcJSON_DIR=$BUILD_DST/$ARCH/cmake/cJSON \
$SRC_DIR
echo $(pwd)
common_run $CMAKE_PROGRAM --build . --target install
fi
# Build and install the library.
if [ $DEPS_ONLY -eq 0 ]; then
common_run cd $BASE
common_run mkdir -p $BUILD_SRC/freerdp-build/$ARCH
common_run cd $BUILD_SRC/freerdp-build/$ARCH
common_run export ANDROID_NDK=$ANDROID_NDK
common_run $CMAKE_PROGRAM $CMAKE_CMD_ARGS \
-DANDROID_ABI=$ARCH \
-DCMAKE_INSTALL_PREFIX=$BUILD_DST/$ARCH \
-DCMAKE_INSTALL_LIBDIR=. \
-DCMAKE_PREFIX_PATH=$BUILD_DST/$ARCH \
-DCMAKE_SHARED_LINKER_FLAGS="-L$BUILD_DST/$ARCH" \
-DcJSON_DIR=$BUILD_DST/$ARCH/cmake/cJSON \
$SRC_DIR
echo $(pwd)
common_run $CMAKE_PROGRAM --build . --target install
fi
done
echo "Successfully build library for architectures $BUILD_ARCH"

View File

@@ -6,59 +6,55 @@ SCM_HASH=94c8ca364db990047ec4ec3481b04ce0d791e62561ef5601443011bdc00825e3
source $(dirname "${BASH_SOURCE[0]}")/android-build-common.sh
function build {
echo "Building architecture $1..."
BASE=$(pwd)
common_run cd $BUILD_SRC
PATH=$ANDROID_NDK:$PATH
MAKE="make LDFLAGS=-static-libstdc++ PATH=$PATH ENABLEPIC=Yes OS=android NDKROOT=$ANDROID_NDK NDK_TOOLCHAIN_VERSION=clang TARGET=android-$2 NDKLEVEL=$2 ARCH=$1 -j libraries"
echo "Building architecture $1..."
BASE=$(pwd)
common_run cd $BUILD_SRC
PATH=$ANDROID_NDK:$PATH
MAKE="make LDFLAGS=-static-libstdc++ PATH=$PATH ENABLEPIC=Yes OS=android NDKROOT=$ANDROID_NDK NDK_TOOLCHAIN_VERSION=clang TARGET=android-$2 NDKLEVEL=$2 ARCH=$1 -j libraries"
common_run export QUIET_AR="$CCACHE "
common_run export QUIET_ASM="$CCACHE "
common_run export QUIET_CC="$CCACHE "
common_run export QUIET_CCAR="$CCACHE "
common_run export QUIET_CXX="$CCACHE "
common_run export QUIET_AR="$CCACHE "
common_run export QUIET_ASM="$CCACHE "
common_run export QUIET_CC="$CCACHE "
common_run export QUIET_CCAR="$CCACHE "
common_run export QUIET_CXX="$CCACHE "
common_run $MAKE
# Install creates a non optimal directory layout, fix that
common_run $MAKE PREFIX=$BUILD_SRC/libs/$1 install
common_run cd $BASE
common_run $MAKE
# Install creates a non optimal directory layout, fix that
common_run $MAKE PREFIX=$BUILD_SRC/libs/$1 install
common_run cd $BASE
}
# Run the main program.
common_parse_arguments $@
common_update $SCM_URL $SCM_TAG $BUILD_SRC $SCM_HASH
for ARCH in $BUILD_ARCH; do
case $ARCH in
"armeabi")
OARCH="arm"
;;
"armeabi-v7a")
OARCH="arm"
;;
"arm64-v8a")
OARCH="arm64"
;;
*)
OARCH=$ARCH
;;
esac
for ARCH in $BUILD_ARCH
do
case $ARCH in
"armeabi")
OARCH="arm"
;;
"armeabi-v7a")
OARCH="arm"
;;
"arm64-v8a")
OARCH="arm64"
;;
*)
OARCH=$ARCH
;;
esac
echo "$ARCH=$OARCH"
echo "$ARCH=$OARCH"
build $OARCH $NDK_TARGET
build $OARCH $NDK_TARGET
if [ ! -d $BUILD_DST/$ARCH/include ]; then
common_run mkdir -p $BUILD_DST/$ARCH/include
fi
if [ ! -d $BUILD_DST/$ARCH/include ];
then
common_run mkdir -p $BUILD_DST/$ARCH/include
fi
common_run cp -L -r $BUILD_SRC/libs/$OARCH/include/ $BUILD_DST/$ARCH/
if [ ! -d $BUILD_DST/$ARCH ];
then
common_run mkdir -p $BUILD_DST/$ARCH
fi
common_run cp -L $BUILD_SRC/libs/$OARCH/lib/*.so $BUILD_DST/$ARCH/
common_run cp -L -r $BUILD_SRC/libs/$OARCH/include/ $BUILD_DST/$ARCH/
if [ ! -d $BUILD_DST/$ARCH ]; then
common_run mkdir -p $BUILD_DST/$ARCH
fi
common_run cp -L $BUILD_SRC/libs/$OARCH/lib/*.so $BUILD_DST/$ARCH/
done

View File

@@ -9,36 +9,34 @@ COMPILER=4.9
source $(dirname "${BASH_SOURCE[0]}")/android-build-common.sh
function build {
if [ $# -ne 2 ];
then
echo "Invalid arguments $@"
exit 1
fi
if [ $# -ne 2 ]; then
echo "Invalid arguments $@"
exit 1
fi
CONFIG=$1
DST_PREFIX=$2
CONFIG=$1
DST_PREFIX=$2
common_run export CC=clang
common_run export PATH=$(${SCRIPT_PATH}/toolchains_path.py --ndk ${ANDROID_NDK}):$ORG_PATH
common_run export ANDROID_NDK
common_run export CC=clang
common_run export PATH=$(${SCRIPT_PATH}/toolchains_path.py --ndk ${ANDROID_NDK}):$ORG_PATH
common_run export ANDROID_NDK
echo "CONFIG=$CONFIG"
echo "DST_PREFIX=$DST_PREFIX"
echo "PATH=$PATH"
echo "CONFIG=$CONFIG"
echo "DST_PREFIX=$DST_PREFIX"
echo "PATH=$PATH"
BASE=$(pwd)
DST_DIR=$BUILD_DST/$DST_PREFIX
common_run cd $BUILD_SRC
common_run ./Configure ${CONFIG} -D__ANDROID_API__=$NDK_TARGET
common_run make SHLIB_EXT=.so -j build_libs
BASE=$(pwd)
DST_DIR=$BUILD_DST/$DST_PREFIX
common_run cd $BUILD_SRC
common_run ./Configure ${CONFIG} -D__ANDROID_API__=$NDK_TARGET
common_run make SHLIB_EXT=.so -j build_libs
if [ ! -d $DST_DIR ];
then
common_run mkdir -p $DST_DIR
fi
if [ ! -d $DST_DIR ]; then
common_run mkdir -p $DST_DIR
fi
common_run cp *.so $DST_DIR/
common_run cd $BASE
common_run cp *.so $DST_DIR/
common_run cd $BASE
}
# Run the main program.
@@ -48,38 +46,36 @@ SCM_MOD_TAG=$SCM_TAG
# Workaround for naming of OpenSSL releases changing with every major version
case $SCM_TAG in OpenSSL_*)
SCM_MOD_TAG=${SCM_TAG//OpenSSL_/openssl-}
SCM_MOD_TAG=${SCM_MOD_TAG//_/.}
SCM_MOD_TAG=${SCM_TAG//OpenSSL_/openssl-}
SCM_MOD_TAG=${SCM_MOD_TAG//_/.}
;;
esac
common_update "$SCM_URL/$SCM_TAG" $SCM_MOD_TAG $BUILD_SRC $SCM_HASH
ORG_PATH=$PATH
for ARCH in $BUILD_ARCH
do
for ARCH in $BUILD_ARCH; do
case $ARCH in
"armeabi-v7a")
build "android-arm" "armeabi-v7a"
;;
"x86")
build "android-x86" "x86"
;;
"arm64-v8a")
build "android-arm64" "arm64-v8a"
;;
"x86_64")
build "android-x86_64" "x86_64"
;;
*)
echo "[WARNING] Skipping unsupported architecture $ARCH"
continue
;;
esac
case $ARCH in
"armeabi-v7a")
build "android-arm" "armeabi-v7a"
;;
"x86")
build "android-x86" "x86"
;;
"arm64-v8a")
build "android-arm64" "arm64-v8a"
;;
"x86_64")
build "android-x86_64" "x86_64"
;;
*)
echo "[WARNING] Skipping unsupported architecture $ARCH"
continue
;;
esac
done
if [ ! -d $BUILD_DST/$ARCH/include ];
then
common_run mkdir -p $BUILD_DST/$ARCH/include
if [ ! -d $BUILD_DST/$ARCH/include ]; then
common_run mkdir -p $BUILD_DST/$ARCH/include
fi
common_run cp -L -R $BUILD_SRC/include/openssl $BUILD_DST/$ARCH/include/

33
scripts/bash-format.sh Executable file
View File

@@ -0,0 +1,33 @@
#!/bin/bash -e
#
SCRIPT_PATH=$(dirname "${BASH_SOURCE[0]}")
SCRIPT_PATH=$(realpath "$SCRIPT_PATH")
SRC_PATH="${SCRIPT_PATH}/.."
if [ $# -ne 0 ]; then
if [ "$1" = "--help" ] || [ "$1" = "-h" ]; then
echo "usage: $0 [options]"
echo "\t--check.-c ... run format check only, no files changed (default)"
echo "\t--format,-f ... format files in place"
echo "\t--help,-h ... print this help"
exit 1
fi
if [ "$1" = "--check" ] || [ "$1" = "-c" ]; then
FORMAT_ARG=""
REST_ARGS="${@:2}"
fi
if [ "$1" = "--format" ] || [ "$1" = "-f" ]; then
FORMAT_ARG="-w"
REST_ARGS="${@:2}"
fi
fi
SCRIPTS=$(find ${SRC_PATH} -name "*.sh" -not -path "${SRC_PATH}/.git/*")
for script in $SCRIPTS; do
echo $script
shfmt -i 2 $FORMAT_ARG $script
done

View File

@@ -1,5 +1,5 @@
#!/bin/bash -xe
SCRIPT_PATH="$(dirname -- "${BASH_SOURCE[0]}")" # relative
SCRIPT_PATH="$(dirname -- "${BASH_SOURCE[0]}")" # relative
SCRIPT_PATH="$(cd -- "$SCRIPT_PATH" && pwd)" # absolutized and normalized
BASE=$(pwd)
@@ -14,7 +14,7 @@ DATADIR=Resources
DEPLOYMENT_ARCH='arm64 x86_64'
DEPLOYMENT_TARGET=12
usage () {
usage() {
echo "${BASH_SOURCE[0]} [-a|--arch 'arch1 arch2 ...'] [-t|--target target][-h|--help]"
echo ""
echo "default options:"
@@ -23,100 +23,90 @@ usage () {
}
check_tools() {
for TOOL in mkdir rm mv git dirname pwd find cut basename grep xargs cmake ninja autoconf automake aclocal autoheader glibtoolize lipo otool install_name_tool;
do
set +e
TOOL_PATH=$(which "$TOOL")
set -e
echo "$TOOL: $TOOL_PATH"
for TOOL in mkdir rm mv git dirname pwd find cut basename grep xargs cmake ninja autoconf automake aclocal autoheader glibtoolize lipo otool install_name_tool; do
set +e
TOOL_PATH=$(which "$TOOL")
set -e
echo "$TOOL: $TOOL_PATH"
if [ ! -f "$TOOL_PATH" ];
then
echo "Missing $TOOL! please install and add to PATH."
exit 1
fi
done
if [ ! -f "$TOOL_PATH" ]; then
echo "Missing $TOOL! please install and add to PATH."
exit 1
fi
done
}
while [[ $# -gt 0 ]]; do
case $1 in
-a|--arch)
DEPLOYMENT_ARCH="$2"
shift # past argument
shift # past value
;;
-t|--target)
DEPLOYMENT_TARGET="$2"
shift # past argument
shift # past value
;;
-t|--target)
usage
exit 0
;;
-*|--*)
usage
exit 1
;;
*)
usage
exit 1
;;
-a | --arch)
DEPLOYMENT_ARCH="$2"
shift # past argument
shift # past value
;;
-t | --target)
DEPLOYMENT_TARGET="$2"
shift # past argument
shift # past value
;;
-t | --target)
usage
exit 0
;;
-* | --*)
usage
exit 1
;;
*)
usage
exit 1
;;
esac
done
check_tools
fix_rpath() {
SEARCH_PATH=$1
FIX_PATH=$1
EXT=".dylib"
if [ "$#" -gt 1 ];
then
FIX_PATH=$2
fi
if [ "$#" -gt 2 ];
then
EXT=$3
fi
SEARCH_PATH=$1
FIX_PATH=$1
EXT=".dylib"
if [ "$#" -gt 1 ]; then
FIX_PATH=$2
fi
if [ "$#" -gt 2 ]; then
EXT=$3
fi
# some build systems do not handle @rpath on mac os correctly.
# do check that and fix it.
DYLIB_ABS_NAMES=$(find $SEARCH_PATH -type f -name "*$EXT")
for DYLIB_ABS in $DYLIB_ABS_NAMES;
do
DYLIB_NAME=$(basename $DYLIB_ABS)
install_name_tool -id @rpath/$DYLIB_NAME $DYLIB_ABS
for DYLIB_ABS in $DYLIB_ABS_NAMES; do
DYLIB_NAME=$(basename $DYLIB_ABS)
install_name_tool -id @rpath/$DYLIB_NAME $DYLIB_ABS
for DYLIB_DEP in $(otool -L $DYLIB_ABS | grep "$FIX_PATH" | cut -d' ' -f1);
do
if [[ $DYLIB_DEP == $DYLIB_ABS ]];
then
continue
elif [[ $DYLIB_DEP == $FIX_PATH/* ]];
then
DEP_BASE=$(basename $DYLIB_DEP)
install_name_tool -change $DYLIB_DEP @rpath/$DEP_BASE $DYLIB_ABS
fi
done
for DYLIB_DEP in $(otool -L $DYLIB_ABS | grep "$FIX_PATH" | cut -d' ' -f1); do
if [[ $DYLIB_DEP == $DYLIB_ABS ]]; then
continue
elif [[ $DYLIB_DEP == $FIX_PATH/* ]]; then
DEP_BASE=$(basename $DYLIB_DEP)
install_name_tool -change $DYLIB_DEP @rpath/$DEP_BASE $DYLIB_ABS
fi
done
done
}
replace_rpath() {
FILE=$1
for PTH in $(otool -l $FILE | grep -A2 LC_RPATH | grep path | xargs -J ' ' | cut -d ' ' -f2);
do
install_name_tool -delete_rpath $PTH $FILE
done
install_name_tool -add_rpath @loader_path/../$LIBDIR $FILE
FILE=$1
for PTH in $(otool -l $FILE | grep -A2 LC_RPATH | grep path | xargs -J ' ' | cut -d ' ' -f2); do
install_name_tool -delete_rpath $PTH $FILE
done
install_name_tool -add_rpath @loader_path/../$LIBDIR $FILE
}
CMAKE_ARCHS=
OSSL_FLAGS="-mmacosx-version-min=$DEPLOYMENT_TARGET -I$INSTALL/include -L$INSTALL/lib"
for ARCH in $DEPLOYMENT_ARCH;
do
OSSL_FLAGS="$OSSL_FLAGS -arch $ARCH"
CMAKE_ARCHS="$ARCH;$CMAKE_ARCHS"
for ARCH in $DEPLOYMENT_ARCH; do
OSSL_FLAGS="$OSSL_FLAGS -arch $ARCH"
CMAKE_ARCHS="$ARCH;$CMAKE_ARCHS"
done
echo "build arch [$DEPLOYMENT_ARCH]"
@@ -140,36 +130,33 @@ CMAKE_ARGS="-DCMAKE_SKIP_INSTALL_ALL_DEPENDENCY=ON \
-DCMAKE_IGNORE_PREFIX_PATH='/opt/local;/usr/local;/opt/homebrew;/Library;~/Library'
"
if [ ! -d $SRC ];
then
mkdir -p $SRC
cd $SRC
git clone --depth 1 -b openssl-3.3.1 https://github.com/openssl/openssl.git
git clone --depth 1 -b v1.3.1 https://github.com/madler/zlib.git
git clone --depth 1 -b uriparser-0.9.8 https://github.com/uriparser/uriparser.git
git clone --depth 1 -b v1.7.18 https://github.com/DaveGamble/cJSON.git
git clone --depth 1 -b release-2.30.4 https://github.com/libsdl-org/SDL.git
git clone --depth 1 --shallow-submodules --recurse-submodules -b release-2.22.0 https://github.com/libsdl-org/SDL_ttf.git
git clone --depth 1 --shallow-submodules --recurse-submodules -b release-2.8.2 https://github.com/libsdl-org/SDL_image.git
git clone --depth 1 --shallow-submodules --recurse-submodules -b v1.0.27-1 https://github.com/libusb/libusb-cmake.git
git clone --depth 1 -b n7.0.1 https://github.com/FFmpeg/FFmpeg.git
git clone --depth 1 -b v2.4.1 https://github.com/cisco/openh264.git
git clone --depth 1 -b v1.5.2 https://gitlab.xiph.org/xiph/opus.git
git clone --depth 1 -b 2.11.1 https://github.com/knik0/faad2.git
git clone --depth 1 -b 1.18.0 https://gitlab.freedesktop.org/cairo/cairo.git
git clone --depth 1 -b 1_30 https://github.com/knik0/faac.git
cd faac
./bootstrap
if [ ! -d $SRC ]; then
mkdir -p $SRC
cd $SRC
git clone --depth 1 -b openssl-3.3.1 https://github.com/openssl/openssl.git
git clone --depth 1 -b v1.3.1 https://github.com/madler/zlib.git
git clone --depth 1 -b uriparser-0.9.8 https://github.com/uriparser/uriparser.git
git clone --depth 1 -b v1.7.18 https://github.com/DaveGamble/cJSON.git
git clone --depth 1 -b release-2.30.4 https://github.com/libsdl-org/SDL.git
git clone --depth 1 --shallow-submodules --recurse-submodules -b release-2.22.0 https://github.com/libsdl-org/SDL_ttf.git
git clone --depth 1 --shallow-submodules --recurse-submodules -b release-2.8.2 https://github.com/libsdl-org/SDL_image.git
git clone --depth 1 --shallow-submodules --recurse-submodules -b v1.0.27-1 https://github.com/libusb/libusb-cmake.git
git clone --depth 1 -b n7.0.1 https://github.com/FFmpeg/FFmpeg.git
git clone --depth 1 -b v2.4.1 https://github.com/cisco/openh264.git
git clone --depth 1 -b v1.5.2 https://gitlab.xiph.org/xiph/opus.git
git clone --depth 1 -b 2.11.1 https://github.com/knik0/faad2.git
git clone --depth 1 -b 1.18.0 https://gitlab.freedesktop.org/cairo/cairo.git
git clone --depth 1 -b 1_30 https://github.com/knik0/faac.git
cd faac
./bootstrap
fi
if [ -d $INSTALL ];
then
rm -rf $INSTALL
if [ -d $INSTALL ]; then
rm -rf $INSTALL
fi
if [ -d $BUILD ];
then
rm -rf $BUILD
if [ -d $BUILD ]; then
rm -rf $BUILD
fi
mkdir -p $BUILD
@@ -180,7 +167,7 @@ cmake --build zlib
cmake --install zlib
cmake -GNinja -Buriparser -S$SRC/uriparser $CMAKE_ARGS -DURIPARSER_BUILD_DOCS=OFF -DURIPARSER_BUILD_TESTS=OFF \
-DURIPARSER_BUILD_TOOLS=OFF
-DURIPARSER_BUILD_TOOLS=OFF
cmake --build uriparser
cmake --install uriparser
@@ -201,7 +188,7 @@ cmake --build SDL
cmake --install SDL
cmake -GNinja -BSDL_ttf -S$SRC/SDL_ttf $CMAKE_ARGS -DSDL2TTF_HARFBUZZ=ON -DSDL2TTF_FREETYPE=ON -DSDL2TTF_VENDORED=ON \
-DFT_DISABLE_ZLIB=OFF -DSDL2TTF_SAMPLES=OFF
-DFT_DISABLE_ZLIB=OFF -DSDL2TTF_SAMPLES=OFF
cmake --build SDL_ttf
cmake --install SDL_ttf
@@ -210,7 +197,7 @@ cmake --build SDL_image
cmake --install SDL_image
cmake -GNinja -Blibusb-cmake -S$SRC/libusb-cmake $CMAKE_ARGS -DLIBUSB_BUILD_EXAMPLES=OFF -DLIBUSB_BUILD_TESTING=OFF \
-DLIBUSB_ENABLE_DEBUG_LOGGING=OFF -DLIBUSB_BUILD_SHARED_LIBS=ON
-DLIBUSB_ENABLE_DEBUG_LOGGING=OFF -DLIBUSB_BUILD_SHARED_LIBS=ON
cmake --build libusb-cmake
cmake --install libusb-cmake
@@ -226,29 +213,28 @@ mkdir -p faac
cd faac
# undefine __SSE2__, symbol clashes with universal build
CFLAGS="$OSSL_FLAGS -U__SSE2__" LDFLAGS=$OSSL_FLAGS $SRC/faac/configure --prefix=$INSTALL --libdir="$INSTALL/lib" \
--enable-shared --disable-static
--enable-shared --disable-static
CFLAGS="$OSSL_FLAGS -U__SSE2__" LDFLAGS=$OSSL_FLAGS make -j
CFLAGS="$OSSL_FLAGS -U__SSE2__" LDFLAGS=$OSSL_FLAGS make -j install
cd $BUILD
meson setup --prefix="$INSTALL" -Doptimization=3 -Db_lto=true -Db_pie=true -Dc_args="$OSSL_FLAGS" -Dc_link_args="$OSSL_FLAGS" \
-Dcpp_args="$OSSL_FLAGS" -Dcpp_link_args="$OSSL_FLAGS" -Dpkgconfig.relocatable=true -Dtests=disabled \
-Dlibdir=lib openh264 $SRC/openh264
-Dcpp_args="$OSSL_FLAGS" -Dcpp_link_args="$OSSL_FLAGS" -Dpkgconfig.relocatable=true -Dtests=disabled \
-Dlibdir=lib openh264 $SRC/openh264
ninja -C openh264 install
for ARCH in $DEPLOYMENT_ARCH;
do
mkdir -p $BUILD/FFmpeg/$ARCH
cd $BUILD/FFmpeg/$ARCH
FFCFLAGS="-arch $ARCH -mmacosx-version-min=$DEPLOYMENT_TARGET"
FINSTPATH=$BUILD/FFmpeg/install/$ARCH
CFLAGS=$FFCFLAGS LDFLAGS=$FFCFLAGS $SRC/FFmpeg/configure --prefix=$FINSTPATH --disable-all \
--enable-shared --disable-static --enable-swscale --disable-asm --disable-libxcb \
--disable-securetransport --disable-xlib --enable-cross-compile
CFLAGS=$FFCFLAGS LDFLAGS=$FFCFLAGS make -j
CFLAGS=$FFCFLAGS LDFLAGS=$FFCFLAGS make -j install
fix_rpath "$FINSTPATH/lib"
for ARCH in $DEPLOYMENT_ARCH; do
mkdir -p $BUILD/FFmpeg/$ARCH
cd $BUILD/FFmpeg/$ARCH
FFCFLAGS="-arch $ARCH -mmacosx-version-min=$DEPLOYMENT_TARGET"
FINSTPATH=$BUILD/FFmpeg/install/$ARCH
CFLAGS=$FFCFLAGS LDFLAGS=$FFCFLAGS $SRC/FFmpeg/configure --prefix=$FINSTPATH --disable-all \
--enable-shared --disable-static --enable-swscale --disable-asm --disable-libxcb \
--disable-securetransport --disable-xlib --enable-cross-compile
CFLAGS=$FFCFLAGS LDFLAGS=$FFCFLAGS make -j
CFLAGS=$FFCFLAGS LDFLAGS=$FFCFLAGS make -j install
fix_rpath "$FINSTPATH/lib"
done
BASE_ARCH="${DEPLOYMENT_ARCH%% *}"
@@ -259,37 +245,36 @@ find lib -type l -exec cp -P {} $INSTALL/lib/ \;
BASE_LIBS=$(find lib -type f -name "*.dylib" -exec basename {} \;)
cd $BUILD/FFmpeg/install
for LIB in $BASE_LIBS;
do
LIBS=$(find . -name $LIB)
lipo $LIBS -output $INSTALL/lib/$LIB -create
for LIB in $BASE_LIBS; do
LIBS=$(find . -name $LIB)
lipo $LIBS -output $INSTALL/lib/$LIB -create
done
cd $BUILD
cmake -GNinja -Bfreerdp -S"$SCRIPT_PATH/.." \
$CMAKE_ARGS \
-DWITH_PLATFORM_SERVER=OFF \
-DWITH_SIMD=ON \
-DWITH_FFMPEG=OFF \
-DWITH_VERBOSE_WINPR_ASSERT=OFF \
-DWITH_OPENH264=ON \
-DWITH_SWSCALE=ON \
-DWITH_OPUS=ON \
-DWITH_WEBVIEW=OFF \
-DWITH_FAAD2=ON \
-DWITH_FAAC=ON \
-DWITH_INTERNAL_RC4=ON \
-DWITH_INTERNAL_MD4=ON \
-DWITH_INTERNAL_MD5=ON \
-DCHANNEL_RDPEAR=OFF \
-DWITH_CJSON_REQUIRED=ON
$CMAKE_ARGS \
-DWITH_PLATFORM_SERVER=OFF \
-DWITH_SIMD=ON \
-DWITH_FFMPEG=OFF \
-DWITH_VERBOSE_WINPR_ASSERT=OFF \
-DWITH_OPENH264=ON \
-DWITH_SWSCALE=ON \
-DWITH_OPUS=ON \
-DWITH_WEBVIEW=OFF \
-DWITH_FAAD2=ON \
-DWITH_FAAC=ON \
-DWITH_INTERNAL_RC4=ON \
-DWITH_INTERNAL_MD4=ON \
-DWITH_INTERNAL_MD5=ON \
-DCHANNEL_RDPEAR=OFF \
-DWITH_CJSON_REQUIRED=ON
cmake --build freerdp
cmake --install freerdp
# remove unused stuff from bin
find "$INSTALL" -name "*.a" -exec rm -f {} \;
find "$INSTALL" -name "*.la" -exec rm -f {} \;
find "$INSTALL" -name "*.a" -exec rm -f {} \;
find "$INSTALL" -name "*.la" -exec rm -f {} \;
find "$INSTALL" -name sdl2-config -exec rm -f {} \;
fix_rpath "$INSTALL/lib"
@@ -301,14 +286,12 @@ mv lib $LIBDIR
mv bin $BINDIR
# update RPATH
for LIB in $(find $LIBDIR -type f -name "*.dylib");
do
replace_rpath $LIB
for LIB in $(find $LIBDIR -type f -name "*.dylib"); do
replace_rpath $LIB
done
for BIN in $(find $BINDIR -type f);
do
replace_rpath $BIN
for BIN in $(find $BINDIR -type f); do
replace_rpath $BIN
done
# clean up unused data

View File

@@ -6,38 +6,32 @@ SRC_PATH="${SCRIPT_PATH}/.."
FORMAT_ARG="--check"
REST_ARGS=$@
if [ $# -ne 0 ]
then
if [ "$1" = "--help" ] || [ "$1" = "-h" ];
then
echo "usage: $0 [options] [file, file, ...]"
echo "\t--check.-c ... run format check only, no files changed (default)"
echo "\t--format,-f ... format files in place"
echo "\t--help,-h ... print this help"
if [ $# -ne 0 ]; then
if [ "$1" = "--help" ] || [ "$1" = "-h" ]; then
echo "usage: $0 [options] [file, file, ...]"
echo "\t--check.-c ... run format check only, no files changed (default)"
echo "\t--format,-f ... format files in place"
echo "\t--help,-h ... print this help"
exit 1
fi
exit 1
fi
if [ "$1" = "--check" ] || [ "$1" = "-c" ];
then
FORMAT_ARG="--check"
REST_ARGS="${@:2}"
fi
if [ "$1" = "--format" ] || [ "$1" = "-f" ];
then
FORMAT_ARG="-i"
REST_ARGS="${@:2}"
fi
if [ "$1" = "--check" ] || [ "$1" = "-c" ]; then
FORMAT_ARG="--check"
REST_ARGS="${@:2}"
fi
if [ "$1" = "--format" ] || [ "$1" = "-f" ]; then
FORMAT_ARG="-i"
REST_ARGS="${@:2}"
fi
fi
if [ ! -n "$REST_ARGS" ];
then
CMAKE_FILES=$(find ${SRC_PATH} -name "*.cmake" -o -name "CMakeLists.txt")
CMAKE_CI_FILES=$(find ${SRC_PATH}/ci -name "*.txt")
if [ ! -n "$REST_ARGS" ]; then
CMAKE_FILES=$(find ${SRC_PATH} -name "*.cmake" -o -name "CMakeLists.txt")
CMAKE_CI_FILES=$(find ${SRC_PATH}/ci -name "*.txt")
fi
for FILE in $CMAKE_FILES $CMAKE_CI_FILES $REST_ARGS;
do
echo "processing file $FILE..."
cmake-format -c "$SCRIPT_PATH/cmake-format.yml" $FORMAT_ARG $FILE
for FILE in $CMAKE_FILES $CMAKE_CI_FILES $REST_ARGS; do
echo "processing file $FILE..."
cmake-format -c "$SCRIPT_PATH/cmake-format.yml" $FORMAT_ARG $FILE
done

View File

@@ -10,7 +10,7 @@ SCRIPT_PATH=$(realpath "$SCRIPT_PATH")
# 3. Every word prefixed by e.g. '\tSome text', e.g. format string escapes
codespell --version
codespell \
-I "$SCRIPT_PATH/codespell.ignore" \
-S ".git,*.ai,*.svg,*.rtf,*/assets/de_*,*/res/values-*,*/protocols/xdg*,*/test/*" \
--ignore-regex "\b[a-zA-Z][a-zA-Z]\b|\bp[A-Z].*|\\\\[a-z][a-zA-Z].*" \
--count $SCRIPT_PATH/..
-I "$SCRIPT_PATH/codespell.ignore" \
-S ".git,*.ai,*.svg,*.rtf,*/assets/de_*,*/res/values-*,*/protocols/xdg*,*/test/*" \
--ignore-regex "\b[a-zA-Z][a-zA-Z]\b|\bp[A-Z].*|\\\\[a-z][a-zA-Z].*" \
--count $SCRIPT_PATH/..

View File

@@ -1,55 +1,56 @@
#!/bin/bash -e
function run {
"$@"
RES=$?
if [[ $RES -ne 0 ]];
then
echo "[ERROR] $@ returned $RES" >&2
exit 1
fi
"$@"
RES=$?
if [[ $RES -ne 0 ]]; then
echo "[ERROR] $@ returned $RES" >&2
exit 1
fi
}
if [ -z ${TAG:-} ];then
echo "No TAG set - trying to detect"
TAG=$(git describe --tags)
echo "Is the TAG ${TAG} ok (YES|NO)?"
read answ
case "$answ" in
YES):
;;
*)
echo 'stopping here'
exit 1
esac
if [ -z ${TAG:-} ]; then
echo "No TAG set - trying to detect"
TAG=$(git describe --tags)
echo "Is the TAG ${TAG} ok (YES|NO)?"
read answ
case "$answ" in
YES)
:
;;
*)
echo 'stopping here'
exit 1
;;
esac
fi
function create_hash {
NAME=$1
run md5sum ${NAME} > ${NAME}.md5
run sha1sum ${NAME} > ${NAME}.sha1
run sha256sum ${NAME} > ${NAME}.sha256
run sha512sum ${NAME} > ${NAME}.sha512
NAME=$1
run md5sum ${NAME} >${NAME}.md5
run sha1sum ${NAME} >${NAME}.sha1
run sha256sum ${NAME} >${NAME}.sha256
run sha512sum ${NAME} >${NAME}.sha512
}
function create_tar {
ARGS=$1
EXT=$2
TAG=$3
ARGS=$1
EXT=$2
TAG=$3
NAME=freerdp-${TAG}${EXT}
run tar $ARGS ${NAME} freerdp-${TAG}
create_hash ${NAME}
NAME=freerdp-${TAG}${EXT}
run tar $ARGS ${NAME} freerdp-${TAG}
create_hash ${NAME}
}
TMPDIR=$(mktemp -d -t release-${TAG}-XXXXXXXXXX)
run git archive --prefix=freerdp-${TAG}/ --format=tar.gz -o ${TMPDIR}/freerdp-${TAG}.tar.gz ${TAG}
run tar xzvf ${TMPDIR}/freerdp-${TAG}.tar.gz -C ${TMPDIR}
run echo ${TAG} > ${TMPDIR}/freerdp-${TAG}/.source_version
run echo ${TAG} >${TMPDIR}/freerdp-${TAG}/.source_version
pushd .
cd $TMPDIR
cd $TMPDIR
create_tar czf .tar.gz ${TAG}
create_tar cvjSf .tar.bz2 ${TAG}
create_tar cfJ .tar.xz ${TAG}
@@ -60,9 +61,8 @@ create_hash ${ZIPNAME}
popd
# Sign the release tarballs
for EXT in tar.gz tar.bz2 tar.xz zip;
do
run gpg --local-user 0xA49454A3FC909FD5 --sign --armor --output ${TMPDIR}/freerdp-${TAG}.${EXT}.asc --detach-sig ${TMPDIR}/freerdp-${TAG}.${EXT}
for EXT in tar.gz tar.bz2 tar.xz zip; do
run gpg --local-user 0xA49454A3FC909FD5 --sign --armor --output ${TMPDIR}/freerdp-${TAG}.${EXT}.asc --detach-sig ${TMPDIR}/freerdp-${TAG}.${EXT}
done
run mv ${TMPDIR}/freerdp-${TAG}.tar* .
@@ -70,9 +70,8 @@ run mv ${TMPDIR}/freerdp-${TAG}.zip* .
run rm -rf ${TMPDIR}
# Verify the release tarball signatures
for EXT in tar.gz tar.bz2 tar.xz zip;
do
run gpg --verify freerdp-${TAG}.${EXT}.asc
for EXT in tar.gz tar.bz2 tar.xz zip; do
run gpg --verify freerdp-${TAG}.${EXT}.asc
done
exit 0

View File

@@ -1,10 +1,10 @@
#!/bin/bash -xe
#
# mingw build script
# mingw build script
#
# TODO: Replace with CMake FetchContent
# https://cmake.org/cmake/help/latest/module/FetchContent.html
#
#
SCRIPT_PATH=$(dirname "${BASH_SOURCE[0]}")
SCRIPT_PATH=$(realpath "$SCRIPT_PATH")
@@ -16,193 +16,225 @@ CLONE=1
DEPS=1
BUILD=1
FFMPEG=0
OPENH264=0
for i in "$@"
do
case $i in
-b|--no-build)
ARG_SHARED=1
CMAKE_DEFAULT_FLAGS=""
ARG_SHARED_MESON="-Ddefault_library=shared"
ARG_SHARED_FFMPEG="--disable-static --enable-shared"
for i in "$@"; do
case $i in
-b | --no-build)
BUILD=0
;;
-d|--no-deps)
DEPS=0
;;
-c|--no-clone)
-c | --no-clone)
CLONE=0
;;
-f|--with-ffmpeg)
-d | --no-deps)
DEPS=0
;;
-f | --with-ffmpeg)
FFMPEG=1
;;
*)
# unknown option
echo "unknown option, quit"
echo "$0 [-d|--no-deps] [-c|--no-clone]"
exit 1
-o | --with-openh264)
OPENH264=1
;;
esac
-s | --static)
ARG_SHARED=0
CMAKE_DEFAULT_FLAGS="-static -static-libgcc -static-libstdc++"
ARG_SHARED_MESON="-Ddefault_library=static"
ARG_SHARED_FFMPEG=""
;;
*)
# unknown option
echo "unknown option '$i', quit"
echo "usage:\n\t$0 [-b|--no-build] [-c|--no-clone] [-d|--no-deps] [-f|--with-ffmpeg] [-o|--with-openh264] [-s|--static]"
exit 1
;;
esac
done
function do_clone {
version=$1
url=$2
dir=$3
ARG_COMPILED_RES=1
if [ $ARG_SHARED -ne 0 ]; then
ARG_COMPILED_RES=0
fi
if [ -d "$dir" ];
then
(
cd "$dir"
git fetch --all
git clean -xdf
git reset --hard $version
git checkout $version
git submodule update --init --recursive
)
else
git clone --depth 1 --shallow-submodules --recurse-submodules -b $version $url $dir
fi
function do_clone {
version=$1
url=$2
dir=$3
if [ -d "$dir" ]; then
(
cd "$dir"
git fetch --all
git clean -xdf
git reset --hard $version
git checkout $version
git submodule update --init --recursive
)
else
git clone --depth 1 --shallow-submodules --recurse-submodules -b $version $url $dir
fi
}
function do_cmake_build {
cmake \
-GNinja \
-DCMAKE_TOOLCHAIN_FILE="$SCRIPT_PATH/mingw64.cmake" \
-DCMAKE_PREFIX_PATH="$INSTALL_BASE/lib/cmake;$INSTALL_BASE/lib;$INSTALL_BASE" \
-DCMAKE_MODULE_PATH="$INSTALL_BASE/lib/cmake;$INSTALL_BASE/lib;$INSTALL_BASE" \
-DCMAKE_INSTALL_PREFIX="$INSTALL_BASE" \
-B "$1" \
${@:2}
cmake --build "$1"
cmake --install "$1"
cmake \
-GNinja \
-DCMAKE_TOOLCHAIN_FILE="$SCRIPT_PATH/mingw64.cmake" \
-DCMAKE_PREFIX_PATH="$INSTALL_BASE/lib/cmake;$INSTALL_BASE/lib;$INSTALL_BASE" \
-DCMAKE_MODULE_PATH="$INSTALL_BASE/lib/cmake;$INSTALL_BASE/lib;$INSTALL_BASE" \
-DCMAKE_INSTALL_PREFIX="$INSTALL_BASE" \
-DBUILD_SHARED_LIBS=$ARG_SHARED \
-DCMAKE_INTERPROZEDURAL_OPTIMIZATION=OFF \
-DCMAKE_EXE_LINKER_FLAGS="$CMAKE_DEFAULT_FLAGS" \
-B "$1" \
${@:2}
cmake --build "$1"
cmake --install "$1"
}
mkdir -p "$SRC_BASE"
mkdir -p "$BUILD_BASE"
cd "$SRC_BASE"
if [ $CLONE -ne 0 ];
then
do_clone v1.3.1 https://github.com/madler/zlib.git zlib
do_clone uriparser-0.9.7 https://github.com/uriparser/uriparser.git uriparser
do_clone v1.7.17 https://github.com/DaveGamble/cJSON.git cJSON
do_clone release-2.30.0 https://github.com/libsdl-org/SDL.git SDL
if [ $FFMPEG -ne 0 ];
then
do_clone n6.1.1 https://github.com/FFmpeg/FFmpeg.git FFmpeg
fi
do_clone v2.4.1 https://github.com/cisco/openh264.git openh264
do_clone v1.0.27 https://github.com/libusb/libusb-cmake.git libusb-cmake
do_clone release-2.8.2 https://github.com/libsdl-org/SDL_image.git SDL_image
do_clone release-2.22.0 https://github.com/libsdl-org/SDL_ttf.git SDL_ttf
do_clone v3.8.2 https://github.com/libressl/portable.git libressl
(
cd libressl
./update.sh
)
if [ $CLONE -ne 0 ]; then
do_clone v1.3.1 https://github.com/madler/zlib.git zlib
do_clone uriparser-0.9.8 https://github.com/uriparser/uriparser.git uriparser
do_clone v1.7.18 https://github.com/DaveGamble/cJSON.git cJSON
do_clone release-3.2.4 https://github.com/libsdl-org/SDL.git SDL
if [ $FFMPEG -ne 0 ]; then
do_clone n7.1 https://github.com/FFmpeg/FFmpeg.git FFmpeg
fi
if [ $OPENH264 -ne 0 ]; then
do_clone v2.6.0 https://github.com/cisco/openh264.git openh264
fi
do_clone v1.0.27-1 https://github.com/libusb/libusb-cmake.git libusb-cmake
do_clone release-3.2.0 https://github.com/libsdl-org/SDL_image.git SDL_image
do_clone prerelease-3.1.2 https://github.com/libsdl-org/SDL_ttf.git SDL_ttf
do_clone v3.9.2 https://github.com/libressl/portable.git libressl
(
cd libressl
./update.sh
)
fi
if [ $BUILD -eq 0 ];
then
exit 0
if [ $BUILD -eq 0 ]; then
exit 0
fi
if [ $DEPS -ne 0 ];
then
do_cmake_build \
"$BUILD_BASE/libressl" \
-S libressl \
-DLIBRESSL_APPS=OFF \
-DLIBRESSL_TESTS=OFF
if [ $DEPS -ne 0 ]; then
do_cmake_build \
"$BUILD_BASE/libressl" \
-S libressl \
-DLIBRESSL_APPS=OFF \
-DLIBRESSL_TESTS=OFF
do_cmake_build \
"$BUILD_BASE/zlib" \
-S zlib
do_cmake_build \
"$BUILD_BASE/zlib" \
-S zlib \
-DZLIB_BUILD_EXAMPLES=OFF
do_cmake_build \
"$BUILD_BASE/uriparser" \
-S uriparser \
-DURIPARSER_BUILD_DOCS=OFF \
-DURIPARSER_BUILD_TESTS=OFF
do_cmake_build \
"$BUILD_BASE/uriparser" \
-S uriparser \
-DURIPARSER_BUILD_TOOLS=OFF \
-DURIPARSER_BUILD_DOCS=OFF \
-DURIPARSER_BUILD_TESTS=OFF
do_cmake_build \
"$BUILD_BASE/cJSON" \
-S cJSON \
-DENABLE_CJSON_TEST=OFF \
-DBUILD_SHARED_AND_STATIC_LIBS=ON
do_cmake_build \
"$BUILD_BASE/cJSON" \
-S cJSON \
-DENABLE_CJSON_TEST=OFF \
-DENABLE_CUSTOM_COMPILER_FLAGS=OFF \
-DENABLE_HIDDEN_SYMBOLS=ON \
-DBUILD_SHARED_AND_STATIC_LIBS=OFF \
-DCJSON_BUILD_SHARED_LIBS=$ARG_SHARED
do_cmake_build \
"$BUILD_BASE/SDL" \
-S SDL \
-DSDL_TEST=OFF \
-DSDL_TESTS=OFF \
-DSDL_STATIC_PIC=ON
do_cmake_build \
"$BUILD_BASE/SDL" \
-S SDL \
-DSDL_TEST=OFF \
-DSDL_TESTS=OFF \
-DSDL_STATIC_PIC=ON
do_cmake_build \
"$BUILD_BASE/SDL_ttf" \
-S SDL_ttf \
-DSDL2TTF_HARFBUZZ=ON \
-DSDL2TTF_FREETYPE=ON \
-DSDL2TTF_VENDORED=ON \
-DFT_DISABLE_ZLIB=OFF \
-DSDL2TTF_SAMPLES=OFF
do_cmake_build \
"$BUILD_BASE/SDL_ttf" \
-S SDL_ttf \
-DSDLTTF_HARFBUZZ=ON \
-DSDLTTF_FREETYPE=ON \
-DSDLTTF_VENDORED=ON \
-DFT_DISABLE_ZLIB=OFF \
-DSDLTTF_SAMPLES=OFF \
-DSDLTTF_PLUTOSVG=OFF
do_cmake_build \
"$BUILD_BASE/SDL_image" \
-S SDL_image \
-DSDL2IMAGE_SAMPLES=OFF \
-DSDL2IMAGE_DEPS_SHARED=OFF
do_cmake_build \
"$BUILD_BASE/SDL_image" \
-S SDL_image \
-DSDLIMAGE_SAMPLES=OFF \
-DSDLIMAGE_DEPS_SHARED=OFF
do_cmake_build \
"$BUILD_BASE/libusb-cmake" \
-S libusb-cmake \
-DLIBUSB_BUILD_EXAMPLES=OFF \
-DLIBUSB_BUILD_TESTING=OFF \
-DLIBUSB_ENABLE_DEBUG_LOGGING=OFF
do_cmake_build \
"$BUILD_BASE/libusb-cmake" \
-S libusb-cmake \
-DLIBUSB_BUILD_EXAMPLES=OFF \
-DLIBUSB_BUILD_TESTING=OFF \
-DLIBUSB_ENABLE_DEBUG_LOGGING=OFF
# TODO: This takes ages to compile, disable
if [ $FFMPEG -ne 0 ];
then
(
cd "$BUILD_BASE"
mkdir -p FFmpeg
cd FFmpeg
"$SRC_BASE/FFmpeg/configure" \
--arch=x86_64 \
--target-os=mingw64 \
--cross-prefix=x86_64-w64-mingw32- \
--prefix="$INSTALL_BASE"
make -j
make -j install
)
fi
# TODO: This takes ages to compile, disable
if [ $FFMPEG -ne 0 ]; then
(
cd "$BUILD_BASE"
mkdir -p FFmpeg
cd FFmpeg
"$SRC_BASE/FFmpeg/configure" \
--arch=x86_64 \
--target-os=mingw64 \
--cross-prefix=x86_64-w64-mingw32- \
--disable-programs \
--disable-doc \
--prefix="$INSTALL_BASE" $ARG_SHARED_FFMPEG
make -j
make -j install
)
fi
meson setup --cross-file "$SCRIPT_PATH/mingw-meson.conf" \
-Dprefix="$INSTALL_BASE" \
-Db_pie=true \
-Db_lto=true \
-Dbuildtype=release \
-Dtests=disabled \
-Ddefault_library=both \
"$BUILD_BASE/openh264" \
openh264
ninja -C "$BUILD_BASE/openh264"
ninja -C "$BUILD_BASE/openh264" install
if [ $OPENH264 -ne 0 ]; then
(
meson setup --cross-file "$SCRIPT_PATH/mingw-meson.conf" \
-Dprefix="$INSTALL_BASE" \
-Db_pie=true \
-Db_lto=true \
-Dbuildtype=release \
-Dtests=disabled \
$ARG_SHARED_MESON \
-Dcpp_link_args="$CMAKE_DEFAULT_FLAGS" \
-Dcpp_args="$CMAKE_DEFAULT_FLAGS" \
"$BUILD_BASE/openh264" \
openh264
ninja -C "$BUILD_BASE/openh264"
ninja -C "$BUILD_BASE/openh264" install
)
fi
fi
do_cmake_build \
"$BUILD_BASE/freerdp" \
-S "$SCRIPT_PATH/.." \
-DWITH_SERVER=ON \
-DWITH_SHADOW=OFF \
-DWITH_PLATFORM_SERVER=OFF \
-DWITH_SAMPLE=ON \
-DWITH_PLATFORM_SERVER=OFF \
-DUSE_UNWIND=OFF \
-DSDL_USE_COMPILED_RESOURCES=OFF \
-DWITH_SWSCALE=OFF \
-DWITH_FFMPEG=OFF \
-DWITH_SIMD=ON \
-DWITH_OPENH264=ON \
-DWITH_WEBVIEW=OFF \
-DWITH_LIBRESSL=ON \
-DWITH_MANPAGES=OFF \
-DZLIB_INCLUDE_DIR="$INSTALL_BASE/include" \
-DZLIB_LIBRARY="$INSTALL_BASE/lib/libzlibstatic.a"
"$BUILD_BASE/freerdp" \
-S "$SCRIPT_PATH/.." \
-DWITH_SERVER=ON \
-DWITH_SHADOW=OFF \
-DWITH_PLATFORM_SERVER=OFF \
-DWITH_SAMPLE=ON \
-DWITH_PLATFORM_SERVER=OFF \
-DUSE_UNWIND=OFF \
-DSDL_USE_COMPILED_RESOURCES=$ARG_COMPILED_RES \
-DWITH_SDL_IMAGE_DIALOGS=ON \
-DWITH_SDL_LINK_SHARED=$ARG_SHARED \
-DWITH_CLIENT_SDL2=OFF \
-DWITH_SWSCALE=$FFMPEG \
-DWITH_FFMPEG=$FFMPEG \
-DWITH_SIMD=ON \
-DWITH_OPENH264=$OPENH264 \
-DWITH_WEBVIEW=OFF \
-DWITH_LIBRESSL=ON \
-DWITH_MANPAGES=OFF

View File

@@ -16,59 +16,59 @@ BUILDTYPE=-DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE:Debug}"
MANPAGES=-DWITH_MANPAGES="${WITHMANPAGES:NO}"
# Run cmake for FreeRDP and MacFreeRDP
mkdir ${XCODE_PROJ_DIR} >/dev/null 2>&1
mkdir ${XCODE_PROJ_DIR} >/dev/null 2>&1
pushd ${XCODE_PROJ_DIR}
cmake ${BUILDTYPE} -G "$GEN" ${ARCH} ../
popd
mkdir ${CLIENT_MAC_DIR}/${XCODE_PROJ_DIR} >/dev/null 2>&1
mkdir ${CLIENT_MAC_DIR}/${XCODE_PROJ_DIR} >/dev/null 2>&1
pushd ${CLIENT_MAC_DIR}/${XCODE_PROJ_DIR}
cmake ${BUILDTYPE} -G "$GEN" ${ARCH} ../
popd
# Check for errors; otherwise, ask for compile.
if [ "$?" -ne 0 ]; then
echo "CMake failed. Please check error messages"
popd > /dev/null
exit
echo "CMake failed. Please check error messages"
popd >/dev/null
exit
else
popd
while true
do
echo -n "Compile FreeRDP? (y or n) - (y recommended for MacFreeRDP compilation):"
read CONFIRM
case $CONFIRM in
y|Y|YES|yes|Yes)
pushd ./${XCODE_PROJ_DIR}
xcodebuild
popd
break ;;
n|N|no|NO|No)
echo OK - you entered $CONFIRM
break
;;
*) echo Please enter only y or n
esac
done
echo "SUCCESS!"
while true
do
echo -n "Open Xcode projects now? (y or n):"
read CONFIRM
case $CONFIRM in
y|Y|YES|yes|Yes)
open ${CLIENT_MAC_DIR}/${XCODE_PROJ_DIR}/MacFreeRDP.xcodeproj
open ./${XCODE_PROJ_DIR}/FreeRDP.xcodeproj
break ;;
n|N|no|NO|No)
echo OK - $CONFIRM
break
;;
*) echo Please enter only y or n
esac
done
popd
while true; do
echo -n "Compile FreeRDP? (y or n) - (y recommended for MacFreeRDP compilation):"
read CONFIRM
case $CONFIRM in
y | Y | YES | yes | Yes)
pushd ./${XCODE_PROJ_DIR}
xcodebuild
popd
break
;;
n | N | no | NO | No)
echo OK - you entered $CONFIRM
break
;;
*) echo Please enter only y or n ;;
esac
done
echo -n "NOTE: Dragging FreeRDP project from finder onto the MacFreeRDP project in Xcode
echo "SUCCESS!"
while true; do
echo -n "Open Xcode projects now? (y or n):"
read CONFIRM
case $CONFIRM in
y | Y | YES | yes | Yes)
open ${CLIENT_MAC_DIR}/${XCODE_PROJ_DIR}/MacFreeRDP.xcodeproj
open ./${XCODE_PROJ_DIR}/FreeRDP.xcodeproj
break
;;
n | N | no | NO | No)
echo OK - $CONFIRM
break
;;
*) echo Please enter only y or n ;;
esac
done
echo -n "NOTE: Dragging FreeRDP project from finder onto the MacFreeRDP project in Xcode
will enable code stepping from MacFreeRDP into FreeRDP.
"
fi