Skip to content

Commit

Permalink
Add CI to libs-xcode
Browse files Browse the repository at this point in the history
  • Loading branch information
gcasa committed Mar 28, 2024
1 parent c12a1b4 commit b620ada
Show file tree
Hide file tree
Showing 3 changed files with 198 additions and 98 deletions.
158 changes: 61 additions & 97 deletions .github/scripts/dependencies.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,134 +2,98 @@

set -ex

DEP_SRC=$HOME/dependency_source/
DEP_ROOT=$HOME/staging

install_prerequisites() {
sudo apt-get -qq update
sudo apt-get install -y cmake pkg-config libgnutls28-dev libgmp-dev libffi-dev libicu-dev \
libxml2-dev libxslt1-dev libssl-dev libavahi-client-dev zlib1g-dev

if [ $LIBRARY_COMBO = 'gnu-gnu-gnu' ];
then
if [ $CC = 'gcc' ];
then
sudo apt-get install -y gobjc;
fi;
sudo apt-get install -y libobjc-8-dev libblocksruntime-dev;
else
curl -s -o - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add -;
sudo apt-add-repository "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-9 main" && sudo apt-get update -qq;
sudo apt-get install -y clang-9 libkqueue-dev libpthread-workqueue-dev;
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-9 10 \
--slave /usr/bin/clang++ clang++ /usr/bin/clang++-9;
export PATH=$(echo "$PATH" | sed -e 's/:\/usr\/local\/clang-7.0.0\/bin//');
if [ "$RUNTIME_VERSION" = "gnustep-2.0" ];
then
sudo update-alternatives --install "/usr/bin/ld" "ld" "/usr/bin/ld.gold" 10;
fi;
fi;
if [ $LIBRARY_COMBO = 'ng-gnu-gnu' ];
then
curl -LO https://cmake.org/files/v3.15/cmake-3.15.5-Linux-x86_64.tar.gz;
tar xf cmake-3.15.5-Linux-x86_64.tar.gz;
mv cmake-3.15.5-Linux-x86_64 $HOME/cmake;
export PATH=$HOME/cmake/:$HOME/cmake/bin:$PATH
fi;
}

install_gnustep_make() {
cd $DEP_SRC
git clone https://github.com/gnustep/tools-make.git
echo "::group::GNUstep Make"
cd $DEPS_PATH
git clone -q -b ${TOOLS_MAKE_BRANCH:-master} https://github.com/gnustep/tools-make.git
cd tools-make
if [ -n "$RUNTIME_VERSION" ]
then
WITH_RUNTIME_ABI="--with-runtime-abi=${RUNTIME_VERSION}"
else
WITH_RUNTIME_ABI=""
MAKE_OPTS=
if [ -n "$HOST" ]; then
MAKE_OPTS="$MAKE_OPTS --host=$HOST"
fi
if [ -n "$RUNTIME_VERSION" ]; then
MAKE_OPTS="$MAKE_OPTS --with-runtime-abi=$RUNTIME_VERSION"
fi
./configure --prefix=$DEP_ROOT --with-library-combo=$LIBRARY_COMBO $WITH_RUNTIME_ABI
./configure --prefix=$INSTALL_PATH --with-library-combo=$LIBRARY_COMBO $MAKE_OPTS || cat config.log
make install
echo Objective-C build flags: `$HOME/staging/bin/gnustep-config --objc-flags`

echo Objective-C build flags:
$INSTALL_PATH/bin/gnustep-config --objc-flags
echo "::endgroup::"
}

install_ng_runtime() {
cd $DEP_SRC
git clone https://github.com/gnustep/libobjc2.git
install_libobjc2() {
echo "::group::libobjc2"
cd $DEPS_PATH
git clone -q https://github.com/gnustep/libobjc2.git
cd libobjc2
git submodule init
git submodule sync
git submodule update
cd ..
mkdir libobjc2/build
cd libobjc2/build
export CC="clang"
export CXX="clang++"
export CXXFLAGS="-std=c++11"
cmake -DTESTS=off -DCMAKE_BUILD_TYPE=RelWithDebInfo -DGNUSTEP_INSTALL_TYPE=NONE -DCMAKE_INSTALL_PREFIX:PATH=$DEP_ROOT ../
git submodule update --init
mkdir build
cd build
cmake \
-DTESTS=off \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DGNUSTEP_INSTALL_TYPE=NONE \
-DCMAKE_INSTALL_PREFIX:PATH=$INSTALL_PATH \
../
make install
echo "::endgroup::"
}

install_libdispatch() {
cd $DEP_SRC
echo "::group::libdispatch"
cd $DEPS_PATH
# will reference upstream after https://github.com/apple/swift-corelibs-libdispatch/pull/534 is merged
git clone -b system-blocksruntime https://github.com/ngrewe/swift-corelibs-libdispatch.git
mkdir swift-corelibs-libdispatch/build
cd swift-corelibs-libdispatch/build
export CC="clang"
export CXX="clang++"
export LIBRARY_PATH=$DEP_ROOT/lib;
export LD_LIBRARY_PATH=$DEP_ROOT/lib:$LD_LIBRARY_PATH;
export CPATH=$DEP_ROOT/include;
cmake -DBUILD_TESTING=off -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX:PATH=$HOME/staging -DINSTALL_PRIVATE_HEADERS=1 -DBlocksRuntime_INCLUDE_DIR=$DEP_ROOT/include -DBlocksRuntime_LIBRARIES=$DEP_ROOT/lib/libobjc.so ../
make install
}

install_gnustep_base() {
export GNUSTEP_MAKEFILES=$HOME/staging/share/GNUstep/Makefiles
. $HOME/staging/share/GNUstep/Makefiles/GNUstep.sh

cd $DEP_SRC
git clone https://github.com/gnustep/libs-base.git
cd libs-base
./configure
make
git clone -q -b system-blocksruntime https://github.com/ngrewe/swift-corelibs-libdispatch.git libdispatch
mkdir libdispatch/build
cd libdispatch/build
# -Wno-error=void-pointer-to-int-cast to work around build error in queue.c due to -Werror
cmake \
-DBUILD_TESTING=off \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_INSTALL_PREFIX:PATH=$INSTALL_PATH \
-DCMAKE_C_FLAGS="-Wno-error=void-pointer-to-int-cast" \
-DINSTALL_PRIVATE_HEADERS=1 \
-DBlocksRuntime_INCLUDE_DIR=$INSTALL_PATH/include \
-DBlocksRuntime_LIBRARIES=$INSTALL_PATH/lib/libobjc.so \
../
make install
echo "::endgroup::"
}

install_gnustep_gui() {
export GNUSTEP_MAKEFILES=$HOME/staging/share/GNUstep/Makefiles
. $HOME/staging/share/GNUstep/Makefiles/GNUstep.sh

cd $DEP_SRC
git clone https://github.com/gnustep/libs-gui.git
echo "::group::GNUstep GUI"
cd $DEPS_PATH
. $INSTALL_PATH/share/GNUstep/Makefiles/GNUstep.sh
git clone -q -b ${LIBS_GUI_BRANCH:-master} https://github.com/gnustep/libs-gui.git
cd libs-gui
./configure
make
make install
echo "::endgroup::"
}

install_gnustep_back() {
export GNUSTEP_MAKEFILES=$HOME/staging/share/GNUstep/Makefiles
. $HOME/staging/share/GNUstep/Makefiles/GNUstep.sh

cd $DEP_SRC
git clone https://github.com/gnustep/libs-back.git
cd libs-back
install_gnustep_base() {
echo "::group::GNUstep Base"
cd $DEPS_PATH
. $INSTALL_PATH/share/GNUstep/Makefiles/GNUstep.sh
git clone -q -b ${LIBS_BASE_BRANCH:-master} https://github.com/gnustep/libs-base.git
cd libs-base
./configure
make
make install
echo "::endgroup::"
}

mkdir -p $DEP_SRC
if [ "$LIBRARY_COMBO" = 'ng-gnu-gnu' ]
then
install_ng_runtime
mkdir -p $DEPS_PATH

# Windows MSVC toolchain uses tools-windows-msvc scripts to install non-GNUstep dependencies
if [ "$LIBRARY_COMBO" = "ng-gnu-gnu" -a "$IS_WINDOWS_MSVC" != "true" ]; then
install_libobjc2
install_libdispatch
fi

install_prerequisites
install_gnustep_make
install_gnustep_base
install_gnustep_gui
install_gnustep_back
136 changes: 136 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
name: CI

on:
push:
pull_request:
workflow_dispatch:
inputs:
tools_make_branch:
description: "tools-make branch"
default: "master"
required: true
libs_base_branch:
description: "libs-base branch"
default: "master"
required: true
libs_back_branch:
description: "libs-back branch"
default: "master"
required: true

env:
APT_PACKAGES: >-
pkg-config
libgnutls28-dev
libffi-dev
libicu-dev
libxml2-dev
libxslt1-dev
libssl-dev
libavahi-client-dev
zlib1g-dev
gnutls-bin
libcurl4-gnutls-dev
libgmp-dev
libcairo2-dev
# packages for GCC Objective-C runtime
APT_PACKAGES_gcc: >-
libobjc-10-dev
libblocksruntime-dev
gobjc
# packages for libobjc2 / libdispatch
APT_PACKAGES_clang: >-
libpthread-workqueue-dev
jobs:
########### Linux ###########
linux:
name: ${{ matrix.name }}
runs-on: ubuntu-latest
# don't run pull requests from local branches twice
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.repository

strategy:
fail-fast: false
matrix:
include:
- name: Ubuntu x64 GCC
library-combo: gnu-gnu-gnu
CC: gcc
CXX: g++

- name: Ubuntu x64 Clang gnustep-1.9
library-combo: ng-gnu-gnu
runtime-version: gnustep-1.9
CC: clang
CXX: clang++

- name: Ubuntu x64 Clang gnustep-2.0
library-combo: ng-gnu-gnu
runtime-version: gnustep-2.0
CC: clang
CXX: clang++

env:
SRC_PATH: ${{ github.workspace }}/source
DEPS_PATH: ${{ github.workspace }}/dependencies
INSTALL_PATH: ${{ github.workspace }}/build
CC: ${{ matrix.CC }}
CXX: ${{ matrix.CXX }}
LIBRARY_COMBO: ${{ matrix.library-combo }}
RUNTIME_VERSION: ${{ matrix.runtime-version }}

defaults:
run:
working-directory: ${{ env.SRC_PATH }}

steps:
- uses: actions/checkout@v3
with:
path: ${{ env.SRC_PATH }}

- name: Install packages
run: |
sudo apt-get -q -y update
sudo apt-get -q -y install $APT_PACKAGES $APT_PACKAGES_${{ matrix.library-combo == 'ng-gnu-gnu' && 'clang' || 'gcc' }}
# gnustep-2.0 runtime requires ld.gold or lld
if [ "$RUNTIME_VERSION" = "gnustep-2.0" ]; then
sudo update-alternatives --install "/usr/bin/ld" "ld" "/usr/bin/ld.gold" 10
fi
- name: Install dependencies
env:
TOOLS_MAKE_BRANCH: ${{github.event.inputs.tools_make_branch}}
LIBS_BASE_BRANCH: ${{github.event.inputs.libs_base_branch}}
LIBS_GUI_BRANCH: ${{github.event.inputs.libs_gui_branch}}
run: ./.github/scripts/dependencies.sh

- name: Build source for Gorm
run: . $INSTALL_PATH/share/GNUstep/Makefiles/GNUstep.sh && make && make install

### Building libs-back is disabled due to various test failures. Re-enable when fixed.
# - name: Build libs-back # required by some tests
# working-directory: ${{env.DEPS_PATH}}
# run: |
# . $INSTALL_PATH/share/GNUstep/Makefiles/GNUstep.sh
# git clone -q -b ${LIBS_BACK_BRANCH:-master} https://github.com/gnustep/libs-back.git
# cd libs-back
# ./configure
# make && make install

- name: Run tests
run: |
. $INSTALL_PATH/share/GNUstep/Makefiles/GNUstep.sh
make check
- name: Upload logs
uses: actions/upload-artifact@v3
if: always()
with:
name: Logs - ${{ matrix.name }}
path: |
${{ env.SRC_PATH }}/config.log
${{ env.SRC_PATH }}/Tests/tests.log
2 changes: 1 addition & 1 deletion XCode/PBXResourcesBuildPhase.m
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ - (BOOL) build
copyResult = [mgr copyItemAtPath: filePath
toPath: destPath
error: &error];
if (copyResult == NO)
if (copyResult == NO || error != NULL)
{
xcputs([[NSString stringWithFormat: @"\t** Could not copy file %s%s%@%s", BOLD, RED, filePath, RESET] cString]);
NSDebugLog(@"\tERROR: %@, %@ -> %@", error, filePath, destPath);
Expand Down

0 comments on commit b620ada

Please sign in to comment.