CI: Enable packaging config on arm linux

Task-number: COIN-1029
Change-Id: I369ce20e24b9adf6b64274dfe07bdfc25888e46f
Reviewed-by: Heikki Halmet <heikki.halmet@qt.io>
This commit is contained in:
Simo Fält
2023-04-13 10:00:43 +03:00
parent aed030bb90
commit 89edadf3be
12 changed files with 569 additions and 2 deletions

View File

@@ -193,6 +193,16 @@ Configurations:
'CONAN_PROFILE=coin/conan/profiles/ci-linux-x86_64-gcc',
'NON_QTBASE_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR}}'
]
-
Id: 'debian-11.6-arm64'
Template: 'qtci-linux-Debian-11.6-aarch64-50'
Compiler: 'GCC'
Features: ['Packaging', 'UseConfigure', 'InstallQt5Dependencies', 'InsignificantTests']
Configure arguments: '-nomake examples -release -force-debug-info -separate-debug-info -qt-libjpeg -qt-libpng -qt-pcre -qt-harfbuzz -no-libudev -bundled-xcb-xinput'
Environment variables: [
'CMAKE_ARGS=-DOpenGL_GL_PREFERENCE=LEGACY'
]
-
Id: 'ios-universal'
Template: 'qtci-macos-12-x86_64-106'

View File

@@ -43,7 +43,7 @@ set -ex
echo "Disable Network Time Protocol (NTP)"
if uname -a |grep -q "Ubuntu"; then
if uname -a |grep -q "Ubuntu\|Debian" ; then
sudo timedatectl set-ntp false
elif cat /etc/os-release | grep "PRETTY_NAME" | grep -q "Leap 15"; then
(sudo systemctl stop chronyd && sudo systemctl disable chronyd)

View File

@@ -1,3 +1,13 @@
#!/usr/bin/env bash
sudo apt -q -y remove update-notifier update-manager python3-distupgrade python3-update-manager ubuntu-release-upgrader-core update-manager-core
installPackages+=(update-notifier)
if uname -a |grep -q "Ubuntu" ; then
installPackages+=(update-manager-core)
installPackages+=(update-manager)
installPackages+=(python3-distupgrade)
installPackages+=(python3-update-manager)
installPackages+=(ubuntu-release-upgrader-core)
fi
sudo apt -q -y remove "${installPackages[@]}"

View File

@@ -0,0 +1,4 @@
#!/bin/sh
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

View File

@@ -0,0 +1,80 @@
#!/usr/bin/env bash
#############################################################################
##
## Copyright (C) 2017 The Qt Company Ltd.
## Contact: https://www.qt.io/licensing/
##
## This file is part of the provisioning scripts of the Qt Toolkit.
##
## $QT_BEGIN_LICENSE:LGPL$
## Commercial License Usage
## Licensees holding valid commercial Qt licenses may use this file in
## accordance with the commercial license agreement provided with the
## Software or, alternatively, in accordance with the terms contained in
## a written agreement between you and The Qt Company. For licensing terms
## and conditions see https://www.qt.io/terms-conditions. For further
## information use the contact form at https://www.qt.io/contact-us.
##
## GNU Lesser General Public License Usage
## Alternatively, this file may be used under the terms of the GNU Lesser
## General Public License version 3 as published by the Free Software
## Foundation and appearing in the file LICENSE.LGPL3 included in the
## packaging of this file. Please review the following information to
## ensure the GNU Lesser General Public License version 3 requirements
## will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
##
## GNU General Public License Usage
## Alternatively, this file may be used under the terms of the GNU
## General Public License version 2.0 or (at your option) the GNU General
## Public license version 3 or any later version approved by the KDE Free
## Qt Foundation. The licenses are as published by the Free Software
## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
## included in the packaging of this file. Please review the following
## information to ensure the GNU General Public License requirements will
## be met: https://www.gnu.org/licenses/gpl-2.0.html and
## https://www.gnu.org/licenses/gpl-3.0.html.
##
## $QT_END_LICENSE$
##
#############################################################################
# This script modifies system settings for automated use
set -ex
# shellcheck source=../common/unix/check_and_set_proxy.sh
source "${BASH_SOURCE%/*}/../common/unix/check_and_set_proxy.sh"
NTS_IP=10.212.2.216
echo "Set timezone to UTC."
sudo timedatectl set-timezone Etc/UTC
echo "Timeout for blanking the screen (0 = never)"
gsettings set org.gnome.desktop.session idle-delay 0
echo "Prevents screen lock when screesaver goes active."
gsettings set org.gnome.desktop.screensaver lock-enabled false
echo "Set grub timeout to 0"
sudo sed -i 's|GRUB_TIMEOUT=10|GRUB_TIMEOUT=0|g' /etc/default/grub
sudo update-grub
# https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1624320
# Checking if Ubuntu 20.04 works without this
#echo "Setting up workaround for Ubuntu systemd resolve bug"
#sudo rm -f /etc/resolv.conf
#sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
# remove hostname to get unique based on IP address
sudo rm /etc/hostname
echo "Set Network Test Server address to $NTS_IP in /etc/hosts"
echo "$NTS_IP qt-test-server qt-test-server.qt-test-net" | sudo tee -a /etc/hosts
echo 'LC_ALL=en_US.UTF8' | sudo tee /etc/default/locale
if [ "$http_proxy" != "" ]; then
echo "Acquire::http::Proxy \"$proxy\";" | sudo tee -a /etc/apt/apt.conf
fi
# This script diverts qtlogging.ini file so we don't get debugging related auto-test failures.
sudo dpkg-divert --divert /etc/xdg/QtProject/qtlogging.ini.foo --rename /etc/xdg/QtProject/qtlogging.ini

View File

@@ -0,0 +1,298 @@
#!/usr/bin/env bash
#############################################################################
##
## Copyright (C) 2021 The Qt Company Ltd.
## Contact: https://www.qt.io/licensing/
##
## This file is part of the provisioning scripts of the Qt Toolkit.
##
## $QT_BEGIN_LICENSE:LGPL$
## Commercial License Usage
## Licensees holding valid commercial Qt licenses may use this file in
## accordance with the commercial license agreement provided with the
## Software or, alternatively, in accordance with the terms contained in
## a written agreement between you and The Qt Company. For licensing terms
## and conditions see https://www.qt.io/terms-conditions. For further
## information use the contact form at https://www.qt.io/contact-us.
##
## GNU Lesser General Public License Usage
## Alternatively, this file may be used under the terms of the GNU Lesser
## General Public License version 3 as published by the Free Software
## Foundation and appearing in the file LICENSE.LGPL3 included in the
## packaging of this file. Please review the following information to
## ensure the GNU Lesser General Public License version 3 requirements
## will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
##
## GNU General Public License Usage
## Alternatively, this file may be used under the terms of the GNU
## General Public License version 2.0 or (at your option) the GNU General
## Public license version 3 or any later version approved by the KDE Free
## Qt Foundation. The licenses are as published by the Free Software
## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
## included in the packaging of this file. Please review the following
## information to ensure the GNU General Public License requirements will
## be met: https://www.gnu.org/licenses/gpl-2.0.html and
## https://www.gnu.org/licenses/gpl-3.0.html.
##
## $QT_END_LICENSE$
##
#############################################################################
# Install required packages with APT
# shellcheck source=../common/linux/apt_wait_loop.sh
source "${BASH_SOURCE%/*}/../common/linux/apt_wait_loop.sh"
echo "Disabling auto update"
sudo tee "/etc/apt/apt.conf.d/20auto-upgrades" > /dev/null <<-EOC
APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "1";
EOC
for service in apt-daily.timer apt-daily-upgrade.timer apt-daily.service apt-daily-upgrade.service; do
sudo systemctl stop $service
sudo systemctl disable $service
done
echo "Using public repositories for now. Repo-clones isn't set yet for Debian use"
# (ping -c 3 repo-clones.ci.qt.io && set_internal_repo) || echo "Internal package repository not found. Using public repositories."
echo "deb http://deb.debian.org/debian bullseye-backports main" | sudo tee -a /etc/apt/sources.list
echo "deb-src http://deb.debian.org/debian bullseye-backports main" | sudo tee -a /etc/apt/sources.list
# Make sure needed ca-certificates are available
sudo apt-get install --reinstall ca-certificates
# Git is not needed by builds themselves, but is nice to have
# immediately as one starts debugging
installPackages+=(git)
# 7zip is a needed decompressing tool
installPackages+=(p7zip-full)
# To be able to mount yocto-cache during builds
installPackages+=(nfs-common)
# libssl-dev provides headers for OpenSSL
installPackages+=(libssl-dev)
# Needed libraries for X11 support accordingly to https://wiki.qt.io/Building_Qt_5_from_Git
installPackages+=("^libxcb.*")
installPackages+=(libxkbcommon-dev)
installPackages+=(libxkbcommon-x11-dev)
installPackages+=(libx11-xcb-dev)
installPackages+=(libglu1-mesa-dev)
installPackages+=(libxrender-dev)
installPackages+=(libxi-dev)
# Enable linking to system dbus
installPackages+=(libdbus-1-dev)
# Needed libraries for WebEngine
installPackages+=(udev)
installPackages+=(libudev-dev)
installPackages+=(libegl1-mesa-dev)
installPackages+=(libfontconfig1-dev)
installPackages+=(libgbm-dev)
installPackages+=(libxkbfile-dev)
installPackages+=(libxshmfence-dev)
installPackages+=(libxss-dev)
## installPackages+=(nodejs-mozilla) # use nodejs-mozilla because nodejs is outdated
#installPackages+=(nodejs)
#installPackages+=(python3-html5lib)
#
## Common event loop handling
installPackages+=(libglib2.0-dev)
# PostgreSQL support
installPackages+=(libpq-dev)
# SQLite support
installPackages+=(libsqlite3-dev)
# ODBC support
installPackages+=(unixodbc-dev)
# Support for FreeType font engine
installPackages+=(libfreetype6-dev)
# Enable the usage of system jpeg libraries
installPackages+=(libjpeg-dev)
# Enable support for printer driver
installPackages+=(libcups2-dev)
# Enable support for printer test
installPackages+=(cups-pdf)
# Install libraries needed for QtMultimedia to be able to support all plugins
installPackages+=(libasound2-dev)
installPackages+=(libgstreamer1.0-dev)
installPackages+=(libgstreamer-plugins-base1.0-dev)
installPackages+=(libgstreamer-plugins-bad1.0-dev)
installPackages+=(libgstreamer-gl1.0-0)
installPackages+=(gir1.2-gst-plugins-base-1.0)
installPackages+=(gir1.2-gst-plugins-bad-1.0)
## Support for cross-building to x86 (needed by WebEngine boot2qt builds)
#installPackages+=(g++-multilib)
## python3 development package
#installPackages+=(python3-dev)
#installPackages+=(python3-pip)
#installPackages+=(virtualenv)
#installPackages+=(python3-wheel)
## python2 development package
#installPackages+=(python2-dev)
## Automates interactive applications (Needed by RTA to automate configure testing)
installPackages+=(expect)
installPackages+=(mesa-common-dev)
installPackages+=(libgl1-mesa-glx)
installPackages+=(libgl1-mesa-dev)
installPackages+=(libegl1-mesa-dev)
installPackages+=(libegl1)
installPackages+=(libegl-mesa0)
installPackages+=(libegl-dev)
installPackages+=(libglvnd-dev)
installPackages+=(libgles2-mesa-dev)
installPackages+=(curl)
installPackages+=(libcurl4-openssl-dev)
installPackages+=(libicu-dev)
installPackages+=(zlib1g-dev)
installPackages+=(zlib1g)
installPackages+=(openjdk-11-jdk)
installPackages+=(libgtk-3-dev)
installPackages+=(ninja-build)
installPackages+=(libssl-dev)
installPackages+=(libxcursor-dev)
installPackages+=(libxcomposite-dev)
installPackages+=(libxdamage-dev)
installPackages+=(libxrandr-dev)
installPackages+=(libfontconfig1-dev)
installPackages+=(libsrtp2-dev)
installPackages+=(libwebp-dev)
installPackages+=(libjsoncpp-dev)
installPackages+=(libopus-dev)
installPackages+=(libminizip-dev)
installPackages+=(libavutil-dev)
installPackages+=(libavformat-dev)
installPackages+=(libavcodec-dev)
installPackages+=(libevent-dev)
installPackages+=(bison)
installPackages+=(flex)
installPackages+=(gperf)
installPackages+=(libasound2-dev)
installPackages+=(libpulse-dev)
installPackages+=(libxtst-dev)
installPackages+=(libnspr4-dev)
installPackages+=(libnss3-dev)
installPackages+=(libnss3)
installPackages+=(libopenal-dev)
installPackages+=(libbluetooth-dev)
installPackages+=(dkms)
# Needed for qtspeech
installPackages+=(libspeechd-dev)
#Pypdf for PDF reading in RTA tests
installPackages+=(python3-pypdf2)
# Needed for b2qt
installPackages+=(git-lfs)
installPackages+=(chrpath)
installPackages+=(gawk)
installPackages+=(texinfo)
# Needed for Poppler test in QtWebEngine
installPackages+=(libpoppler-cpp-dev)
# Needed for QtCore
installPackages+=(libdouble-conversion-dev)
installPackages+=(libpcre2-dev)
# Needed for qtgampepad
installPackages+=(libsdl2-2.0)
installPackages+=(libsdl2-dev)
# Needed for qtwebkit
installPackages+=(ruby)
installPackages+=(libxslt1-dev)
installPackages+=(libxml2-dev)
installPackages+=(libhyphen-dev)
## For remote access
installPackages+=(ssh)
## For bitbake
installPackages+=(diffstat)
installPackages+=(binfmt-support)
installPackages+=(zstd)
# Vulkan is needed for examples
installPackages+=(libvulkan-dev)
# Needed for qtdltlogging
installPackages+=(libdlt-dev)
# For QNX
installPackages+=(nfs-kernel-server)
installPackages+=(net-tools)
installPackages+=(bridge-utils)
## For debian building debian packages
installPackages+=(sbuild)
installPackages+=(apt-cacher-ng)
installPackages+=(devscripts)
installPackages+=(piuparts)
installPackages+=(ubuntu-dev-tools)
installPackages+=(libcurl4-openssl-dev)
installPackages+=(libexpat1-dev)
installPackages+=(libjsoncpp-dev)
installPackages+=(zlib1g-dev)
installPackages+=(libarchive-dev)
installPackages+=(libncurses5-dev)
installPackages+=(librhash-dev)
installPackages+=(libuv1-dev)
installPackages+=(python3-sphinx:native)
installPackages+=(dh-elpa)
installPackages+=(dh-sequence-sphinxdoc)
installPackages+=(debhelper-compat)
installPackages+=(default-libmysqlclient-dev)
installPackages+=(dh-exec)
installPackages+=(libcups2-dev)
installPackages+=(libdbus-1-dev)
installPackages+=(libegl-dev)
installPackages+=(libfontconfig-dev)
installPackages+=(libfreetype-dev)
installPackages+=(libgl-dev)
installPackages+=(libglib2.0-dev)
installPackages+=(libglx-dev)
installPackages+=(libgss-dev)
installPackages+=(libgtk-3-dev)
installPackages+=(libicu-dev)
installPackages+=(libpq-dev)
installPackages+=(libsqlite3-dev)
installPackages+=(libssl-dev)
installPackages+=(libvulkan-dev)
installPackages+=(libx11-dev)
installPackages+=(libx11-xcb-dev)
installPackages+=(libxcb-glx0-dev)
installPackages+=(libxcb-icccm4-dev)
installPackages+=(libxcb-image0-dev)
installPackages+=(libxcb-keysyms1-dev)
installPackages+=(libxcb-randr0-dev)
installPackages+=(libxcb-render-util0-dev)
installPackages+=(libxcb-render0-dev)
installPackages+=(libxcb-shape0-dev)
installPackages+=(libxcb-shm0-dev)
installPackages+=(libxcb-sync-dev)
installPackages+=(libxcb-util-dev)
installPackages+=(libxcb-xfixes0-dev)
installPackages+=(libxcb-xinerama0-dev)
installPackages+=(libxcb-xinput-dev)
installPackages+=(libxcb-xkb-dev)
installPackages+=(libxcb1-dev)
installPackages+=(libxext-dev)
installPackages+=(libxfixes-dev)
installPackages+=(libxi-dev)
installPackages+=(libxkbcommon-dev)
installPackages+=(libxkbcommon-x11-dev)
installPackages+=(libxrender-dev)
installPackages+=(ninja-build)
installPackages+=(pkg-config)
installPackages+=(pkg-kde-tools)
installPackages+=(unixodbc-dev)
installPackages+=(zlib1g-dev)
echo "Running update for apt"
waitLoop
sudo apt-get update
echo "Installing packages"
waitLoop
sudo DEBIAN_FRONTEND=noninteractive apt-get -q -y install "${installPackages[@]}"
sudo DEBIAN_FRONTEND=noninteractive apt-get -q -y install cmake apt-cacher-ng -t bullseye-backports
# Install all needed packages in a special wheel cache directory
#pip3 wheel --wheel-dir "$HOME/python3-wheels" -r "${BASH_SOURCE%/*}/../common/shared/requirements.txt"
#source "${BASH_SOURCE%/*}/../common/unix/SetEnvVar.sh"
#SetEnvVar "PYTHON3_WHEEL_CACHE" "$HOME/python3-wheels"
# SetEnvVar "PATH" "/usr/lib/nodejs-mozilla/bin:\$PATH"
#OpenSSLVersion="$(openssl version |cut -b 9-14)"
#echo "OpenSSL = $OpenSSLVersion" >> ~/versions.txt

View File

@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# shellcheck source=../common/linux/disable-notifications.sh
source "${BASH_SOURCE%/*}/../common/linux/disable-notifications.sh"

View File

@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# shellcheck source=../common/linux/disable-ntp_linux.sh
source "${BASH_SOURCE%/*}/../common/linux/disable-ntp_linux.sh"

View File

@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# shellcheck source=../common/linux/remove-apport.sh
source "${BASH_SOURCE%/*}/../common/linux/remove-apport.sh"

View File

@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# shellcheck source=../common/linux/remove-update_notifier.sh
source "${BASH_SOURCE%/*}/../common/linux/remove-update_notifier.sh"

View File

@@ -0,0 +1,90 @@
#!/usr/bin/env bash
#############################################################################
##
## Copyright (C) 2021 The Qt Company Ltd.
## Contact: https://www.qt.io/licensing/
##
## This file is part of the provisioning scripts of the Qt Toolkit.
##
## $QT_BEGIN_LICENSE:LGPL$
## Commercial License Usage
## Licensees holding valid commercial Qt licenses may use this file in
## accordance with the commercial license agreement provided with the
## Software or, alternatively, in accordance with the terms contained in
## a written agreement between you and The Qt Company. For licensing terms
## and conditions see https://www.qt.io/terms-conditions. For further
## information use the contact form at https://www.qt.io/contact-us.
##
## GNU Lesser General Public License Usage
## Alternatively, this file may be used under the terms of the GNU Lesser
## General Public License version 3 as published by the Free Software
## Foundation and appearing in the file LICENSE.LGPL3 included in the
## packaging of this file. Please review the following information to
## ensure the GNU Lesser General Public License version 3 requirements
## will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
##
## GNU General Public License Usage
## Alternatively, this file may be used under the terms of the GNU
## General Public License version 2.0 or (at your option) the GNU General
## Public license version 3 or any later version approved by the KDE Free
## Qt Foundation. The licenses are as published by the Free Software
## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
## included in the packaging of this file. Please review the following
## information to ensure the GNU General Public License requirements will
## be met: https://www.gnu.org/licenses/gpl-2.0.html and
## https://www.gnu.org/licenses/gpl-3.0.html.
##
## $QT_END_LICENSE$
##
#############################################################################
# Setups sbuild environment
tee ~/.sbuildrc << EOF
##############################################################################
# PACKAGE BUILD RELATED (additionally produce _source.changes)
##############################################################################
# -d
\$distribution = 'stable';
# -A
\$build_arch_all = 1;
# -s
\$build_source = 1;
# -v
\$verbose = 1;
# parallel build
\$ENV{'DEB_BUILD_OPTIONS'} = 'parallel=8';
##############################################################################
# POST-BUILD RELATED (turn off functionality by setting variables to 0)
##############################################################################
\$run_lintian = 1;
\$lintian_opts = ['-i', '-I'];
\$run_piuparts = 0;
\$piuparts_opts = ['--schroot', 'stable-arm64-sbuild', '--no-eatmydata'];
\$run_autopkgtest = 0;
\$autopkgtest_root_args = '';
\$autopkgtest_opts = [ '--', 'schroot', '%r-%a-sbuild' ];
##############################################################################
# PERL MAGIC
##############################################################################
1;
EOF
# Add user group
sudo sbuild-adduser $LOGNAME
newgrp sbuild
# Create chroot
#sudo sbuild-createchroot --include=eatmydata,ccache,gnupg,ca-certificates stable /srv/chroot/stable-arm64-sbuild http://127.0.0.1:3142/deb.debian.org/debian
sudo sbuild-createchroot --include=eatmydata,ccache,gnupg,ca-certificates stable /srv/chroot/stable-arm64-sbuild
# Update chroot
sudo sbuild-update -udcar stable

View File

@@ -0,0 +1,59 @@
#!/usr/bin/env bash
#############################################################################
##
## Copyright (C) 2021 The Qt Company Ltd.
## Contact: https://www.qt.io/licensing/
##
## This file is part of the provisioning scripts of the Qt Toolkit.
##
## $QT_BEGIN_LICENSE:LGPL$
## Commercial License Usage
## Licensees holding valid commercial Qt licenses may use this file in
## accordance with the commercial license agreement provided with the
## Software or, alternatively, in accordance with the terms contained in
## a written agreement between you and The Qt Company. For licensing terms
## and conditions see https://www.qt.io/terms-conditions. For further
## information use the contact form at https://www.qt.io/contact-us.
##
## GNU Lesser General Public License Usage
## Alternatively, this file may be used under the terms of the GNU Lesser
## General Public License version 3 as published by the Free Software
## Foundation and appearing in the file LICENSE.LGPL3 included in the
## packaging of this file. Please review the following information to
## ensure the GNU Lesser General Public License version 3 requirements
## will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
##
## GNU General Public License Usage
## Alternatively, this file may be used under the terms of the GNU
## General Public License version 2.0 or (at your option) the GNU General
## Public license version 3 or any later version approved by the KDE Free
## Qt Foundation. The licenses are as published by the Free Software
## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
## included in the packaging of this file. Please review the following
## information to ensure the GNU General Public License requirements will
## be met: https://www.gnu.org/licenses/gpl-2.0.html and
## https://www.gnu.org/licenses/gpl-3.0.html.
##
## $QT_END_LICENSE$
##
#############################################################################
# build cmake for the debian packgaes
# Create chroot for Ubuntu focal
#mk-sbuild --arch=amd64 --name=focal --debootstrap-mirror="http://archive.ubuntu.com/ubuntu/" --distro=ubuntu focal
mkdir -p /home/qt/debian_packages
cd /home/qt/debian_packages
wget https://ci-files01-hki.intra.qt.io/input/debian/cmake/amd64-focal/cmake-3.24-deb.tar.gz
tar xzf cmake-3.24-deb.tar.gz
#git clone git@gitlab.ics.com:qt6_packaging/tqtc/cmake.git
#wget https://github.com/Kitware/CMake/releases/download/v3.24.3/cmake-3.24.3.tar.gz -O cmake_3.24.3.orig.tar.gz
#dpkg-source -b cmake
#sbuild --build-dep-resolver=aptitude -sAd focal -c focal-amd64 cmake_3.24.3-1~bpo1.dsc