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.2.15 jobs: build-linux: runs-on: ubuntu-latest strategy: matrix: triple: - aarch64-linux-musl - x86_64-linux-musl 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 - name: setup toolchain run: | # Download Toolchain wget -q -nc -P ${DOWNLOAD_PATH} https://musl.cc/${TOOLCHAIN}.tgz tar xf ${DOWNLOAD_PATH}/${TOOLCHAIN}.tgz -C ${HOME} # Download sccache wget -q -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 echo "CFLAGS=-Os -fPIC -fno-pie -no-pie -static -flto -ffunction-sections -fdata-sections" >> $GITHUB_ENV echo "CXXFLAGS=-Os -fPIC -fno-pie -no-pie -static -flto -ffunction-sections -fdata-sections" >> $GITHUB_ENV echo "LDFLAGS=-Wl,--gc-sections -Wl,-strip-all -flto" >> $GITHUB_ENV - name: build libplist run: | wget -q -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 "CPPFLAGS=${CPPFLAGS} -I${DEP_PATH}/libplist-${LIBPLIST_VERSION}/include" >> $GITHUB_ENV echo "LIBPLIST_LIB=${DEP_PATH}/libplist-${LIBPLIST_VERSION}/src/.libs/libplist-2.0.a" >> $GITHUB_ENV - name: build openssl run: | export PLATFORM="linux-${ARCH}" wget -q -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 --prefix=/usr --static -static no-module ${PLATFORM} make -j$(nproc) build_generated libcrypto.a echo "CPPFLAGS=${CPPFLAGS} -I${DEP_PATH}/openssl-${OPENSSL_VERSION}/include" >> $GITHUB_ENV echo "LIBCRYPTO_LIB=${DEP_PATH}/openssl-${OPENSSL_VERSION}/libcrypto.a" >> $GITHUB_ENV - name: build run: | export LDID_VERSION=$(echo "$(git describe --tags --abbrev=0)") make -j$(nproc) \ VERSION="${LDID_VERSION}" \ LDFLAGS="-static -static-libstdc++ ${LDFLAGS}" \ LIBS="${LIBPLIST_LIB} ${LIBCRYPTO_LIB}" ${TRIPLE}-strip ldid - uses: actions/upload-artifact@v1 with: name: ldid_linux_${{ env.ARCH }} path: ldid - name: Upload Release Asset Linux 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_linux_${{ env.ARCH }} asset_content_type: application/octet-stream build-macos: runs-on: macos-11 strategy: matrix: arch: - x86_64 - arm64 env: ARCH: ${{ matrix.arch }} steps: - uses: actions/checkout@v1 with: submodules: recursive - uses: actions/cache@v2 with: path: | ~/Library/Caches/Mozilla.sccache ~/dep_src key: build-macos-${{ matrix.arch }}-${ { env.GITHUB_SHA } } restore-keys: | build-macos-${{ 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 - 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 echo "CC=sccache clang -arch ${ARCH} -mmacosx-version-min=10.13" >> $GITHUB_ENV echo "CXX=sccache clang++ -arch ${ARCH} -mmacosx-version-min=10.13" >> $GITHUB_ENV echo "CXXFLAGS=-Os" >> $GITHUB_ENV echo "CFLAGS=-Os" >> $GITHUB_ENV - name: build libplist run: | wget -q -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 "CXXFLAGS=${CXXFLAGS} -I${DEP_PATH}/libplist-${LIBPLIST_VERSION}/include" >> $GITHUB_ENV echo "LIBPLIST_LIB=${DEP_PATH}/libplist-${LIBPLIST_VERSION}/src/.libs/libplist-2.0.a" >> $GITHUB_ENV - name: build openssl run: | wget -q -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 --prefix=/usr no-shared no-module darwin64-${ARCH}-cc make -j$(sysctl -n hw.ncpu) build_generated libcrypto.a echo "CXXFLAGS=${CXXFLAGS} -I${DEP_PATH}/openssl-${OPENSSL_VERSION}/include" >> $GITHUB_ENV echo "LIBCRYPTO_LIB=${DEP_PATH}/openssl-${OPENSSL_VERSION}/libcrypto.a" >> $GITHUB_ENV - name: build run: | export LDID_VERSION=$(echo "$(git describe --tags --abbrev=0)") make -j$(sysctl -n hw.ncpu) \ CXXFLAGS="-std=c++11 ${CXXFLAGS} -flto=thin" \ VERSION="${LDID_VERSION}" \ LIBS="${LIBPLIST_LIB} ${LIBCRYPTO_LIB}" strip ldid - uses: actions/upload-artifact@v1 with: name: ldid_macos_${{ matrix.arch }} path: ldid - name: Upload Release Asset Linux 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_macos_${{ matrix.arch }} asset_content_type: application/octet-stream