How to build Sailfish OS for Samsung Galaxy S7

 

This manual based on HADK 2.0.1.

4.1 Setting up required environment variables

cat <<'EOF' > $HOME/.hadk.env
export PLATFORM_SDK_ROOT="/srv/mer"
export ANDROID_ROOT="$HOME/hadk"
export VENDOR="samsung"
export DEVICE="herolte"
# ARCH conflicts with kernel build?
export PORT_ARCH="armv7hl"
EOF
cat <<'EOF' >> $HOME/.mersdkubu.profile
function hadk() { source $HOME/.hadk.env; echo "Env setup for $DEVICE"; }
export PS1="HABUILD_SDK [\${DEVICE}] $PS1"
hadk
EOF
cat <<'EOF' >> $HOME/.mersdk.profile
function hadk() { source $HOME/.hadk.env; echo "Env setup for $DEVICE"; }
export PS1="PlatformSDK [\${DEVICE}] $PS1"
[ -d /etc/bash_completion.d ] && for i in /etc/bash_completion.d/*;do . $i;done
hadk

4.2 Setup the Platform SDK

export PLATFORM_SDK_ROOT="/srv/mer"
curl -k -O http://releases.sailfishos.org/sdk/installers/latest/Jolla-latest-SailfishOS_Platform_SDK_Chroot-i486.tar.bz2 ;
sudo mkdir -p $PLATFORM_SDK_ROOT/sdks/sfossdk ;
sudo tar --numeric-owner -p -xjf Jolla-latest-SailfishOS_Platform_SDK_Chroot-i486.tar.bz2 -C $PLATFORM_SDK_ROOT/sdks/sfossdk ;
echo "export PLATFORM_SDK_ROOT=$PLATFORM_SDK_ROOT" >> ~/.bashrc
echo 'alias sfossdk=$PLATFORM_SDK_ROOT/sdks/sfossdk/mer-sdk-chroot' >> ~/.bashrc ; exec bash ;
sfossdk

4.3 Preparing the Platform SDK

PLATFORM_SDK $
sudo zypper in android-tools createrepo zip

4.4 Setting up an Android Build Environment

4.4.1 Downloading and Unpacking Ubuntu Chroot

PLATFORM_SDK $
TARBALL=ubuntu-trusty-android-rootfs.tar.bz2
curl -O http://img.merproject.org/images/mer-hybris/ubu/$TARBALL
UBUNTU_CHROOT=$PLATFORM_SDK_ROOT/sdks/ubuntu
sudo mkdir -p $UBUNTU_CHROOT
sudo tar --numeric-owner -xjf $TARBALL -C $UBUNTU_CHROOT

4.4.2 Entering Ubuntu Chroot

PLATFORM_SDK $

ubu-chroot -r $PLATFORM_SDK_ROOT/sdks/ubuntu
# FIXME: Hostname resolution might fail. This error can be ignored.

# Can be fixed manually by adding the hostname to /etc/hosts
sudo apt-get update
sudo apt-get install bsdmainutils rsync vim unzip imagemagick software-properties-common python-software-properties
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk
sudo update-alternatives --config java
sudo update-java-alternatives -s java-1.8.0-openjdk-amd64
# choose openjdk-8-jdk

5.1 Checking out CyanogenMod Source

Configure git:

git config --global user.name "Your Name"

git config --global user.email "you@example.com"
HABUILD_SDK $
sudo mkdir -p $ANDROID_ROOT
sudo chown -R $USER $ANDROID_ROOT
cd $ANDROID_ROOT
repo init -u git://github.com/mer-hybris/android.git -b hybris-14.1

5.2 Device repos

HABUILD_SDK $
cd $ANDROID_ROOT/.repo
git clone https://github.com/Driim/local_manifests
cd ../

repo sync --fetch-submodules

5.3 Configure Mountpoint Information

Nothing to do here

5.4 Building Relevant Bits of CyanogenMod

HABUILD_SDK $
source build/envsetup.sh
export USE_CCACHE=1
breakfast $DEVICE
make -j<XX> hybris-hal libcameraservice_32 libdroidmedia_32 minimediaservice minisfservice libaudioflingerglue_32 miniafservice

<XX> - number of cores

Next we are going to build droid-hal-device

7.2.1 Building the droid-hal-device packages
 

PLATFORM_SDK $

cd $ANDROID_ROOT

sdk-assistant create SailfishOS-latest http://releases.sailfishos.org/sdk/latest/Jolla-latest-Sailfish_SDK_Tooling-i486.tar.bz2
sdk-assistant create $VENDOR-$DEVICE-$PORT_ARCH http://releases.sailfishos.org/sdk/latest/Jolla-latest-Sailfish_SDK_Target-armv7hl.tar.bz2
sdk-assistant create SailfishOS-latest-i486 http://releases.sailfishos.org/sdk/latest/Jolla-latest-Sailfish_SDK_Target-i486.tar.bz2

sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R zypper rm ngfd-plugin-native-vibrator
rpm/dhd/helpers/build_packages.sh --mw=ngfd-plugin-droid-vibrator --spec=rpm/ngfd-plugin-droid-vibrator.spec

sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R zypper rm qt5-feedback-haptics-native-vibrator
rpm/dhd/helpers/build_packages.sh --mw=qt5-feedback-haptics-droid-vibrator --spec=rpm/qt5-feedback-haptics-droid-vibrator.spec

# build droidmedia
DROIDMEDIA_VERSION=$(git --git-dir external/droidmedia/.git describe --tags | sed \
-r "s/\-/\+/g")
rpm/dhd/helpers/pack_source_droidmedia-localbuild.sh $DROIDMEDIA_VERSION
mkdir -p hybris/mw/droidmedia-localbuild/rpm
cp rpm/dhd/helpers/droidmedia-localbuild.spec \
hybris/mw/droidmedia-localbuild/rpm/droidmedia.spec
sed -ie "s/0.0.0/$DROIDMEDIA_VERSION/" \
hybris/mw/droidmedia-localbuild/rpm/droidmedia.spec
mv hybris/mw/droidmedia-$DROIDMEDIA_VERSION.tgz hybris/mw/droidmedia-localbuild
rpm/dhd/helpers/build_packages.sh --build=hybris/mw/droidmedia-localbuild
rpm/dhd/helpers/build_packages.sh --droid-hal --mw=https://github.com/sailfishos/gst-droid.git

# build audioflingerglue
rpm/dhd/helpers/pack_source_audioflingerglue-localbuild.sh
mkdir -p hybris/mw/audioflingerglue-localbuild/rpm
cp rpm/dhd/helpers/audioflingerglue-localbuild.spec \
hybris/mw/audioflingerglue-localbuild/rpm/audioflingerglue.spec
mv hybris/mw/audioflingerglue-0.0.1.tgz hybris/mw/audioflingerglue-localbuild
rpm/dhd/helpers/build_packages.sh --build=hybris/mw/audioflingerglue-localbuild
rpm/dhd/helpers/build_packages.sh --droid-hal \
--mw=https://github.com/mer-hybris/pulseaudio-modules-droid-glue.git

# build libgrillio
rpm/dhd/helpers/build_packages.sh --mw=https://git.merproject.org/mer-core/libgrilio.git

# build ofono
rpm/dhd/helpers/build_packages.sh --mw=https://git.merproject.org/mer-core/ofono.git

I had problems with ngfd-plugin-droid-vibrator and qt5-feedback-haptics-droid-vibrator packages, os we build then before everything else. Also audio package builded from different source. So When we start build another packages we need to choose Y for every packet(not all) and wait then builded, but for the ngfd-plugin-droid-vibrator, qt5-feedback-haptics-droid-vibrator, pulseaudio-modules-droid choose n.

rpm/dhd/helpers/build_packages.sh

8.3 Creating and Configuring the Kickstart File

PLATFORM_SDK $

HA_REPO="repo --name=adaptation-community-common-$DEVICE-@RELEASE@"
HA_DEV="repo --name=adaptation-community-$DEVICE-@RELEASE@"
KS="Jolla-@RELEASE@-$DEVICE-@ARCH@.ks"
sed "/$HA_REPO/i$HA_DEV --baseurl=file:\/\/$ANDROID_ROOT\/droid-local-repo\/$DEVICE" $ANDROID_ROOT/hybris/droid-configs/installroot/usr/share/kickstarts/$KS > $KS

8.5 Building the Image with MIC

PLATFORM_SDK $

RELEASE=2.1.3.7
EXTRA_NAME=-s7

hybris/droid-configs/droid-configs-device/helpers/process_patterns.sh
#Command fail, but that's ok
sudo mic create fs --arch=$PORT_ARCH --tokenmap=ARCH:$PORT_ARCH,RELEASE:$RELEASE,EXTRA_NAME:$EXTRA_NAME --record-pkgs=name,url --outdir=sfe-$DEVICE-$RELEASE$EXTRA_NAME --pack-to=sfe-$DEVICE-$RELEASE$EXTRA_NAME.tar.bz2 $ANDROID_ROOT/Jolla-@RELEASE@-$DEVICE-@ARCH@.ks

Folder sfe-herolte-2.1.3.7-s7 has zip-file ready to install from TWRP

Audio begin to work if comment tms and playback_record in /system/etc/audio_policy.conf but it sound terribly.

dreamway89

dreamway89 wrote 29 posts

Post navigation


Comments

  • albne

    HELP
    PlatformSDK [ido] bash-3.2$ rpm/dhd/helpers/build_packages.sh —droid-hal —mw=https://github.com/sailfishos/gst-droid.git
    * Building rpm/droid-hal-ido.spec
    + export CXXFLAGS
    + FFLAGS=’-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector —param=ssp-buffer-size=4 -Wformat -Wformat-security -fmessage-length=0 -march=armv7-a -mfloat-abi=hard -mfpu=neon -mthumb -Wno-psabi -I/usr/lib/gfortran/modules’
    + export FFLAGS
    + LD_AS_NEEDED=1
    + export LD_AS_NEEDED
    + echo _target_cpu is armv7hl
    _target_cpu is armv7hl
    + grep -q ‘^TARGET_ARCH := arm64’ ./device/xiaomi/ido/BoardConfig.mk
    + echo -e ‘\n’ ‘IMPORTANT: some devices in your Android tree are 64bit targets. If your device is aarch64,\n’ ‘ please define droid_target_aarch64 in your .spec, otherwise define droid_target_armv7hl\n’ ‘NOTE: Currently there is no Sailfish OS ARM 64bit target, so leave PORT_ARCH as armv7hl\n’ ‘ Mixed builds of 64bit Android+Linux Kernel and 32bit Sailfish OS work just fine.’

    IMPORTANT: some devices in your Android tree are 64bit targets. If your device is aarch64,
    please define droid_target_aarch64 in your .spec, otherwise define droid_target_armv7hl
    NOTE: Currently there is no Sailfish OS ARM 64bit target, so leave PORT_ARCH as armv7hl
    Mixed builds of 64bit Android+Linux Kernel and 32bit Sailfish OS work just fine.
    + exit 1
    error: Bad exit status from /var/tmp/rpm-tmp.FHpPig (%build)

    RPM build errors:
    Bad exit status from /var/tmp/rpm-tmp.FHpPig (%build)
    * Check /home/ya/hadk/droid-hal-ido.log for full log.
    !! building of package failed

    • dreamway89

      IMPORTANT: some devices in your Android tree are 64bit targets. If your device is aarch64,
      please define droid_target_aarch64 in your .spec, otherwise define droid_target_armv7hl

      Try define droid_target_aarch64 in droid-hal-ido.spec.

  • Deepak Gupta

    Hi team,

    While executing + echo _target_cpu is armv7hl, I see it displays a blank screen, any idea how to get it solved!

    Help is appreciated!

  • Kristoffer Grundström

    Has the guide changed anything since you wrote it?

    • dreamway89

      I do not follow Sailfish OS updates for some time, so I can not tell you.

  • SERGEY DOLINE

    Сейчас на новом sdk по данной инструкции собрать увы нельзя. Но, в любом случае, спасибо большое за неё!

    • dreamway89

      Инструкцию можно использовать как базу, ребята из Sailfish могут помочь, во всяком случае мне помогали. Там у них все очень быстро меняется и инструкции устаревают раньше чем успевают сформироваться.

Добавить комментарий

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>