Add support to use CoreFoundation for plist handling #221
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: build | |
on: | |
push: | |
paths: | |
- '*.c' | |
- '*.cpp' | |
- '.github/workflows/*' | |
- 'Makefile' | |
pull_request: | |
paths: | |
- '*.c' | |
- '*.cpp' | |
- '.github/workflows/*' | |
- 'Makefile' | |
workflow_dispatch: | |
release: | |
types: | |
- created | |
env: | |
LIBPLIST_VERSION: 2.2.0 | |
OPENSSL_VERSION: 3.0.5 | |
SCCACHE_VERSION: 0.3.0 | |
jobs: | |
build-linux: | |
runs-on: ubuntu-22.04 | |
strategy: | |
matrix: | |
triple: | |
- aarch64-linux-musl | |
- x86_64-linux-musl | |
- x86_64-w64-mingw32 | |
env: | |
TOOLCHAIN: ${{ matrix.triple }}-cross | |
TRIPLE: ${{ matrix.triple }} | |
steps: | |
- uses: actions/checkout@v1 | |
with: | |
submodules: recursive | |
- uses: actions/cache@v2 | |
with: | |
path: | | |
~/.cache/sccache | |
~/dep_src | |
key: build-linux-${{ matrix.triple }}-${{ env.GITHUB_SHA }} | |
restore-keys: | | |
build-linux-${{ matrix.triple }}- | |
- name: setup environment | |
run: | | |
export DOWNLOAD_PATH=${HOME}/dep_src | |
export DEP_PATH=${HOME}/build | |
mkdir -p ${DOWNLOAD_PATH} ${DEP_PATH} | |
echo "DOWNLOAD_PATH=${DOWNLOAD_PATH}" >> $GITHUB_ENV | |
echo "DEP_PATH=${DEP_PATH}" >> $GITHUB_ENV | |
echo "ARCH=$(echo ${{ matrix.triple }} | cut -d- -f 1)" >> $GITHUB_ENV | |
echo "OS=$(echo ${{ matrix.triple }} | cut -d- -f 2)" >> $GITHUB_ENV | |
if [ "$(echo ${{ matrix.triple }} | cut -d- -f 2)" = "w64" ]; then | |
echo "EXT=.exe" >> $GITHUB_ENV | |
else | |
echo "EXT=" >> $GITHUB_ENV | |
fi | |
- name: setup toolchain | |
run: | | |
# Download Toolchain | |
wget -nc -P ${DOWNLOAD_PATH} https://cameronkatri.com/toolchains/${TOOLCHAIN}.tgz | |
tar xf ${DOWNLOAD_PATH}/${TOOLCHAIN}.tgz -C ${HOME} | |
# Download sccache | |
wget -nc -P ${DOWNLOAD_PATH} \ | |
https://github.com/mozilla/sccache/releases/download/v${SCCACHE_VERSION}/sccache-v${SCCACHE_VERSION}-x86_64-unknown-linux-musl.tar.gz | |
tar xf ${DOWNLOAD_PATH}/sccache-v${SCCACHE_VERSION}-x86_64-unknown-linux-musl.tar.gz -C ${HOME} | |
mv ${HOME}/sccache-v${SCCACHE_VERSION}-x86_64-unknown-linux-musl/sccache ${HOME}/${TOOLCHAIN}/bin | |
chmod +x ${HOME}/${TOOLCHAIN}/bin/sccache | |
echo "${HOME}/${TOOLCHAIN}/bin" >> $GITHUB_PATH | |
echo "CC=sccache ${TRIPLE}-gcc" >> $GITHUB_ENV | |
echo "CXX=sccache ${TRIPLE}-g++" >> $GITHUB_ENV | |
echo "AR=${TRIPLE}-gcc-ar" >> $GITHUB_ENV | |
echo "NM=${TRIPLE}-gcc-nm" >> $GITHUB_ENV | |
echo "RANLIB=${TRIPLE}-gcc-ranlib" >> $GITHUB_ENV | |
if [ "${OS}" = "w64" ]; then | |
echo "CFLAGS=-Os -fPIC -fno-pie -no-pie -static -ffunction-sections -fdata-sections" >> $GITHUB_ENV | |
echo "CXXFLAGS=-Os -fPIC -fno-pie -no-pie -static -ffunction-sections -fdata-sections" >> $GITHUB_ENV | |
echo "LDFLAGS=-Os -fPIC -fno-pie -no-pie -static -Wl,--gc-sections -Wl,-strip-all -ffunction-sections -fdata-sections" >> $GITHUB_ENV | |
else | |
echo "CFLAGS=-Os -fPIC -fno-pie -no-pie -static -ffunction-sections -flto -fdata-sections" >> $GITHUB_ENV | |
echo "CXXFLAGS=-Os -fPIC -fno-pie -no-pie -static -ffunction-sections -flto -fdata-sections" >> $GITHUB_ENV | |
echo "LDFLAGS=-Os -fPIC -fno-pie -no-pie -static -Wl,--gc-sections -Wl,-strip-all -flto -ffunction-sections -fdata-sections" >> $GITHUB_ENV | |
fi | |
- name: build libplist | |
run: | | |
wget -nc -P ${DOWNLOAD_PATH} https://github.com/libimobiledevice/libplist/releases/download/${LIBPLIST_VERSION}/libplist-${LIBPLIST_VERSION}.tar.bz2 | |
tar xf ${DOWNLOAD_PATH}/libplist-${LIBPLIST_VERSION}.tar.bz2 -C ${DEP_PATH} | |
cd ${DEP_PATH}/libplist-${LIBPLIST_VERSION} | |
./configure --host=${TRIPLE} --prefix=/usr --without-cython --enable-static --disable-shared | |
make -j$(nproc) | |
echo "LIBPLIST_INCLUDES=-I${DEP_PATH}/libplist-${LIBPLIST_VERSION}/include" >> $GITHUB_ENV | |
echo "LIBPLIST_LIBS=${DEP_PATH}/libplist-${LIBPLIST_VERSION}/src/.libs/libplist-2.0.a" >> $GITHUB_ENV | |
- name: build openssl | |
run: | | |
if [ "${OS}" = "w64" ]; then | |
export PLATFORM="mingw64" | |
else | |
export PLATFORM="linux-${ARCH}" | |
fi | |
wget -nc -P ${DOWNLOAD_PATH} https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz | |
tar xf ${DOWNLOAD_PATH}/openssl-${OPENSSL_VERSION}.tar.gz -C ${DEP_PATH} | |
cd ${DEP_PATH}/openssl-${OPENSSL_VERSION} | |
./config -static enable-fips enable-capieng no-module enable-ktls no-zlib \ | |
no-async no-comp no-idea no-mdc2 no-rc5 no-ec2m no-sm2 no-sm4 no-ssl3 no-seed no-weak-ssl-ciphers ${PLATFORM} | |
make -j$(nproc) build_generated libcrypto.a | |
echo "LIBCRYPTO_INCLUDES=-I${DEP_PATH}/openssl-${OPENSSL_VERSION}/include" >> $GITHUB_ENV | |
if [ "${OS}" = "w64" ]; then | |
echo "LIBCRYPTO_LIBS=${DEP_PATH}/openssl-${OPENSSL_VERSION}/libcrypto.a -lws2_32 -lgdi32 -ladvapi32 -lcrypt32 -luser32" >> $GITHUB_ENV | |
else | |
echo "LIBCRYPTO_LIBS=${DEP_PATH}/openssl-${OPENSSL_VERSION}/libcrypto.a" >> $GITHUB_ENV | |
fi | |
- name: build mman-win32 | |
if: ${{ env.OS == 'w64' }} | |
run: | | |
wget -nc -O ${DOWNLOAD_PATH}/mman-win32.tar.gz https://github.com/alitrack/mman-win32/archive/refs/heads/master.tar.gz || true | |
tar xf ${DOWNLOAD_PATH}/mman-win32.tar.gz -C ${DEP_PATH} | |
cd ${DEP_PATH}/mman-win32-master | |
./configure --prefix=/ --disable-shared --enable-static --cross-prefix="${TRIPLE}-" | |
make -j$(nproc) | |
mkdir -p include/sys/ | |
ln -s ../../mman.h include/sys/ | |
echo "CXXFLAGS=${CXXFLAGS} -I${DEP_PATH}/mman-win32-master/include" >> $GITHUB_ENV | |
echo "LIBS=${LIBS} ${DEP_PATH}/mman-win32-master/libmman.a" >> $GITHUB_ENV | |
- name: build tre | |
if: ${{ env.OS == 'w64' }} | |
run: | | |
sudo apt-get install -y autopoint | |
wget -nc -O ${DOWNLOAD_PATH}/tre.tar.gz https://github.com/laurikari/tre/archive/refs/heads/master.tar.gz || true | |
tar xf ${DOWNLOAD_PATH}/tre.tar.gz -C ${DEP_PATH} | |
cd ${DEP_PATH}/tre-master | |
./utils/autogen.sh | |
./configure --host=${TRIPLE} --prefix=/usr --without-cython --enable-static --disable-shared | |
make -j$(nproc) | |
echo "CXXFLAGS=${CXXFLAGS} -I${DEP_PATH}/tre-master/lib" >> $GITHUB_ENV | |
echo "LIBS=${LIBS} ${DEP_PATH}/tre-master/lib/.libs/libtre.a" >> $GITHUB_ENV | |
- name: build | |
run: | | |
make -j$(nproc) \ | |
CXXFLAGS="-Wextra ${CXXFLAGS}" \ | |
LDFLAGS="-static -static-libstdc++ ${LDFLAGS}" \ | |
EXT="${EXT}" | |
${TRIPLE}-strip ldid${EXT} | |
- uses: actions/upload-artifact@v1 | |
with: | |
name: ldid_${{ env.OS }}_${{ env.ARCH }} | |
path: ldid${{ env.EXT }} | |
- name: Upload Release Asset Linux/Windows | |
uses: actions/upload-release-asset@v1 | |
if: ${{ github.event_name == 'release' }} | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ github.event.release.upload_url }} | |
asset_path: ldid${{ env.EXT }} | |
asset_name: ldid_${{ env.OS }}_${{ env.ARCH }}${{ env.EXT }} | |
asset_content_type: application/octet-stream | |
build-macos: | |
runs-on: macos-11 | |
strategy: | |
matrix: | |
include: | |
- arch: x86_64 | |
os: macosx | |
- arch: arm64 | |
os: macosx | |
- arch: arm64 | |
os: iphoneos | |
env: | |
ARCH: ${{ matrix.arch }} | |
OS: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v1 | |
with: | |
submodules: recursive | |
- uses: actions/cache@v2 | |
with: | |
path: | | |
~/Library/Caches/Mozilla.sccache | |
~/dep_src | |
key: build-${{ matrix.os }}-${{ matrix.arch }}-${ { env.GITHUB_SHA } } | |
restore-keys: | | |
build-${{ matrix.os }}-${{ matrix.arch }}- | |
- name: setup environment | |
run: | | |
export DOWNLOAD_PATH=${HOME}/dep_src | |
export DEP_PATH=${HOME}/build | |
mkdir -p ${DOWNLOAD_PATH} ${DEP_PATH} | |
echo "DOWNLOAD_PATH=${DOWNLOAD_PATH}" >> $GITHUB_ENV | |
echo "DEP_PATH=${DEP_PATH}" >> $GITHUB_ENV | |
if [ "${ARCH}" = "arm64" ]; then | |
echo "HOST_ARCH=aarch64" >> $GITHUB_ENV | |
else | |
echo "HOST_ARCH=${ARCH}" >> $GITHUB_ENV | |
fi | |
echo "SDK=$(xcrun -sdk ${OS} --show-sdk-path)" >> $GITHUB_ENV | |
- name: setup toolchain | |
run: | | |
brew install libtool autoconf automake | |
# Download sccache | |
wget -nc -P ${DOWNLOAD_PATH} \ | |
https://github.com/mozilla/sccache/releases/download/v${SCCACHE_VERSION}/sccache-v${SCCACHE_VERSION}-x86_64-apple-darwin.tar.gz | |
tar xf ${DOWNLOAD_PATH}/sccache-v${SCCACHE_VERSION}-x86_64-apple-darwin.tar.gz -C ${HOME} | |
chmod +x ${HOME}/sccache-v${SCCACHE_VERSION}-x86_64-apple-darwin/sccache | |
echo "${HOME}/sccache-v${SCCACHE_VERSION}-x86_64-apple-darwin" >> $GITHUB_PATH | |
CC="sccache clang -arch ${ARCH} -isysroot ${SDK}" | |
CXX="sccache clang++ -arch ${ARCH} -isysroot ${SDK}" | |
if [ "${OS}" = "macosx" ]; then | |
echo "CC=${CC} -mmacosx-version-min=10.13" >> $GITHUB_ENV | |
echo "CXX=${CXX} -mmacosx-version-min=10.13" >> $GITHUB_ENV | |
else | |
echo "CC=${CC} -miphoneos-version-min=10.0" >> $GITHUB_ENV | |
echo "CXX=${CXX} -miphoneos-version-min=10.0" >> $GITHUB_ENV | |
fi | |
echo "CXXFLAGS=-Os" >> $GITHUB_ENV | |
echo "CFLAGS=-Os" >> $GITHUB_ENV | |
- name: build libplist | |
run: | | |
wget -nc -P ${DOWNLOAD_PATH} https://github.com/libimobiledevice/libplist/releases/download/${LIBPLIST_VERSION}/libplist-${LIBPLIST_VERSION}.tar.bz2 | |
tar xf ${DOWNLOAD_PATH}/libplist-${LIBPLIST_VERSION}.tar.bz2 -C ${DEP_PATH} | |
cd ${DEP_PATH}/libplist-${LIBPLIST_VERSION} | |
./configure --host=${HOST_ARCH}-apple-darwin --without-cython --enable-static --disable-shared | |
make -j$(sysctl -n hw.ncpu) | |
echo "LIBPLIST_INCLUDES=-I${DEP_PATH}/libplist-${LIBPLIST_VERSION}/include" >> $GITHUB_ENV | |
echo "LIBPLIST_LIBS=${DEP_PATH}/libplist-${LIBPLIST_VERSION}/src/.libs/libplist-2.0.a" >> $GITHUB_ENV | |
- name: build openssl | |
run: | | |
wget -nc -P ${DOWNLOAD_PATH} https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz | |
tar xf ${DOWNLOAD_PATH}/openssl-${OPENSSL_VERSION}.tar.gz -C ${DEP_PATH} | |
cd ${DEP_PATH}/openssl-${OPENSSL_VERSION} | |
./config -static enable-fips enable-capieng no-module enable-ktls no-zlib \ | |
no-async no-comp no-idea no-mdc2 no-rc5 no-ec2m no-sm2 no-sm4 no-ssl3 no-seed no-weak-ssl-ciphers darwin64-${ARCH}-cc | |
make -j$(sysctl -n hw.ncpu) build_generated libcrypto.a | |
echo "LIBCRYPTO_INCLUDES=${CXXFLAGS} -I${DEP_PATH}/openssl-${OPENSSL_VERSION}/include" >> $GITHUB_ENV | |
echo "LIBCRYPTO_LIBS=${DEP_PATH}/openssl-${OPENSSL_VERSION}/libcrypto.a" >> $GITHUB_ENV | |
- name: build | |
run: | | |
make -j$(sysctl -n hw.ncpu) \ | |
CXXFLAGS="-flto=thin -Wextra ${CXXFLAGS}" \ | |
LDFLAGS="-flto=thin" | |
strip ldid | |
- uses: actions/upload-artifact@v1 | |
with: | |
name: ldid_${{ matrix.os }}_${{ matrix.arch }} | |
path: ldid | |
- name: Upload Release Asset macOS | |
uses: actions/upload-release-asset@v1 | |
if: ${{ github.event_name == 'release' }} | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ github.event.release.upload_url }} | |
asset_path: ldid | |
asset_name: ldid_${{ matrix.os }}_${{ matrix.arch }} | |
asset_content_type: application/octet-stream |