Build kodi: Difference between revisions

From bibbleWiki
Jump to navigation Jump to search
 
(100 intermediate revisions by the same user not shown)
Line 1: Line 1:
==Building Kodi on Linux==
 
Set root directory<br>
=Building Kodi on Android=
  export KODI_ROOT=$HOME/dev
==Create Linux Directories==
<br>
===Create Linux ROOT Directory (KODI_LINUX_ROOT)===
Make sure git is installed<br>
<syntaxhighlight lang="bash">
  sudo apt install git
  export KODI_LINUX_ROOT=$HOME/dev/KODI_LINUX_ROOT
<br>
mkdir  -p KODI_LINUX_ROOT
Change to your home directory <br>
cd $KODI_LINUX_ROOT
  cd $KODI_ROOT
</syntaxhighlight>
<br>
 
Clone Kodi's current master branch<br>
===Create Linux Build Directory (KODI_LINUX_BUILD)===
  git clone https://github.com/xbmc/xbmc kodi
<syntaxhighlight lang="bash">
<br>
  export KODI_LINUX_BUILD=$KODI_LINUX_ROOT/KODI_LINUX_BUILD
Add Kodi's nightly PPA to grab dependencies<br>
mkdir $KODI_LINUX_BUILD
  sudo add-apt-repository -s ppa:team-xbmc/xbmc-nightly
cd $KODI_LINUX_BUILD
<br>
</syntaxhighlight>
Super-duper magic command to get the build dependencies<br>
 
===Create Linux Source Directory (KODI_LINUX_SOURCE)===
<syntaxhighlight lang="bash">
  export KODI_LINUX_SOURCE=$KODI_LINUX_ROOT/kodi
// mkdir  -p KODI_LINUX_ROOT
</syntaxhighlight>
 
==Get Source==
<syntaxhighlight lang="bash">
cd $KODI_LINUX_ROOT
  git clone https://github.com/bibble235/xbmc kodi
// Get the source and add Kodi's nightly PPA to grab dependencies<br>
  // git clone https://github.com/xbmc/xbmc kodi
// sudo add-apt-repository -s ppa:team-xbmc/xbmc-nightly
</syntaxhighlight>
 
==Build Linux Kodi==
===Prepare to Build===
<syntaxhighlight lang="bash">
  sudo apt build-dep kodi
  sudo apt build-dep kodi
<br>
You can install ccache (optional)<br>
  sudo apt install ccache
  sudo apt install ccache
</syntaxhighlight>
===Configure Linux Kodi===
<syntaxhighlight lang="bash">
cd $KODI_LINUX_BUILD
cmake ../kodi  -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=/usr/local -DAPP_RENDER_SYSTEM=gl
cmake --build . -j$(getconf _NPROCESSORS_ONLN)
</syntaxhighlight>
===Build Linux Kodi Addons===
<syntaxhighlight lang="bash">
cd $KODI_LINUX_SOURCE
make -j$(getconf _NPROCESSORS_ONLN) -C tools/depends/target/binary-addons PREFIX=/usr/local
</syntaxhighlight>
==VS Code==
===Setting===
<syntaxhighlight lang="json">
{
    "cmake.sourceDirectory": "${env:KODI_LINUX_SOURCE}",
    "cmake.buildDirectory": "${env:KODI_LINUX_BUILD}",
    "cmake.generator": "Unix Makefiles",
    "cmake.configureArgs": [
        "-DCMAKE_BUILD_TYPE=Debug",
        "-DCMAKE_INSTALL_PREFIX=/usr/local",
        "-DAPP_RENDER_SYSTEM=gl"
    ],
    "cmake.buildArgs": [
        "."
    ]
}
</syntaxhighlight>
===Launch Settings===
<syntaxhighlight lang="json">
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${env:KODI_LINUX_BUILD}/kodi.bin",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}
</syntaxhighlight>
=Building Kodi on Android=
==Create Android Directories==
===Create Android ROOT (KODI_ANDROID_ROOT) Directory===
<syntaxhighlight lang="bash">
export KODI_ANDROID_ROOT=$HOME/dev/KODI_ANDROID_ROOT
mkdir -p $KODI_ANDROID_ROOT
cd $KODI_ANDROID_ROOT
</syntaxhighlight>
===Create Android Build Directory (KODI_ANDROID_BUILD)===
<syntaxhighlight lang="bash">
export KODI_BUILD_DIR=$KODI_ANDROID_ROOT/KODI_ANDROID_BUILD
mkdir -p $KODI_BUILD_DIR
</syntaxhighlight>
===Create Android Build Directory (KODI_ANDROID_SOURCE)===
We do not need to make this directory as git does this
<syntaxhighlight lang="bash">
export KODI_ANDROID_SOURCE=$KODI_ANDROID_ROOT/kodi
#mkdir -p $KODI_ANDROID_SOURCE
</syntaxhighlight>
===Create Android directory (KODI_ANDROID)===
<syntaxhighlight lang="bash">
export KODI_ANDROID=$HOME/dev/Android_Standalone
mkdir -p $KODI_ANDROID
</syntaxhighlight>
===Create Android SDK directory (KODI_SDK)===
<syntaxhighlight lang="bash">
export KODI_SDK=$KODI_ANDROID/cmdline-tools
mkdir -p $KODI_SDK
</syntaxhighlight>
===Create Android NDK directory (KODI_NDK)===
<syntaxhighlight lang="bash">
export KODI_NDK=$KODI_ANDROID/android-ndk-r20b
mkdir -p $KODI_NDK
</syntaxhighlight>
==Prerequisites==
===Ubunty (20.1)===
<syntaxhighlight lang="bash">
sudo apt install autoconf build-essential curl default-jdk gawk git gperf lib32stdc++6 lib32z1 lib32z1-dev libcurl4-openssl-dev unzip zlib1g-dev
</syntaxhighlight>
===Get SDK Command Tools and NDK===
I used the following<br>
<syntaxhighlight lang="bash">
wget https://dl.google.com/android/repository/commandlinetools-linux-6858069_latest.zip
wget https://dl.google.com/android/repository/android-ndk-r20b-linux-x86_64.zip
</syntaxhighlight>
Extract the zip files
<syntaxhighlight lang="bash">
unzip $KODI_ANDROID_ROOT/Downloads/commandlinetools-linux-6858069_latest.zip -d $KODI_ANDROID
unzip $KODI_ANDROID_ROOT/Downloads/android-ndk-r20b-linux-x86_64.zip -d $KODI_ANDROID
</syntaxhighlight>
===Accept Licenses (And Get SDK Bits)===
<syntaxhighlight lang="bash">
cd $KODI_SDK/bin
./sdkmanager --licenses --sdk_root=$KODI_SDK
./sdkmanager platform-tools --sdk_root=$KODI_SDK
./sdkmanager "platforms;android-28" --sdk_root=$KODI_SDK
./sdkmanager "build-tools;28.0.3" --sdk_root=$KODI_SDK
</syntaxhighlight>
===Create a key to sign===
I found this already existed. Hopefully will update if this proves to be a problem
<syntaxhighlight lang="bash">
keytool -genkey -keystore ~/.android/debug.keystore -v -alias androiddebugkey -dname "CN=Android Debug,O=Android,C=US" -keypass android -storepass android -keyalg RSA -keysize 2048 -validity 10000
</syntaxhighlight>
==Get Source==
<syntaxhighlight lang="bash">
cd $KODI_LINUX_ROOT
git clone https://github.com/bibble235/xbmc kodi
// Get the source and add Kodi's nightly PPA to grab dependencies<br>
// git clone https://github.com/xbmc/xbmc kodi
// sudo add-apt-repository -s ppa:team-xbmc/xbmc-nightly
</syntaxhighlight>
==Configure==
<syntaxhighlight lang="bash">
cd $KODI_ANDROID_SOURCE/tools/depends
./bootstrap
./configure --with-tarballs=$KODI_ANDROID_SOURCE/xbmc-tarballs --host=arm-linux-androideabi --with-sdk-path=$KODI_SDK --with-ndk-path=$KODI_NDK --prefix=$KODI_ANDROID_SOURCE/xbmc-depends
</syntaxhighlight>
==Build Android Kodi ==
===Build tools and dependencies===
<syntaxhighlight lang="bash">
make -j$(getconf _NPROCESSORS_ONLN) BUILD_DIR=$KODI_BUILD_DIR
</syntaxhighlight>
===Build Android Kodi Binary Addons===
<syntaxhighlight lang="bash">
cd $KODI_ANDROID_SOURCE
make -C tools/depends/target/cmakebuildsys BUILD_DIR=$KODI_BUILD_DIR
</syntaxhighlight>
===Build Android Kodi===
<syntaxhighlight lang="bash">
make -C tools/depends/target/cmakebuildsys BUILD_DIR=$KODI_BUILD_DIR
cd $KODI_BUILD_DIR
make -j$(getconf _NPROCESSORS_ONLN) BUILD_DIR=$KODI_BUILD_DIR
</syntaxhighlight>
==Package Android Kodi==
This will run gradle and create the Apk
<syntaxhighlight lang="bash">
make apk
</syntaxhighlight>
=Stuff to Delete=
<br>
<br>
Create an out-of-source build directory<br>
mkdir $KODI_ROOT/kodi-build
<br>
Change to build directory<br>
cd $KODI_ROOT/kodi-build
<br>
Configure build for X11<br>
cmake ../kodi -DCMAKE_INSTALL_PREFIX=/usr/local
<br>
<br>
Build Kodi<br>
cmake --build . -- VERBOSE=1 -j$(getconf _NPROCESSORS_ONLN)
<br>
<br>
Build all add-ons<br>
cd $/KODI_ROOTkodi
sudo make -j$(getconf _NPROCESSORS_ONLN) -C tools/depends/target/binary-addons PREFIX=/usr/local


==Building Kodi on Android==
Get SDK and NDK<br>
[[https://developer.android.com/ndk/downloads NDK]] <br>
[[https://developer.android.com/studio/ SDK]] <br>
<br>
Set root directory<br>
export KODI_ROOT=$HOME/dev
<br>
Unzip software<br>
mkdir -p $KODI_ROOT/android-tools/android-sdk-linux
unzip $KODI_ROOT/Downloads/sdk-tools-linux-4333796.zip -d $KODI_ROOT/android-tools/android-sdk-linux
unzip $KODI_ROOT/Downloads/android-ndk-r18b-linux-x86_64.zip -d $KODI_ROOT/android-tools
<br>
Accept Licenses<br>
cd $KODI_ROOT/android-tools/android-sdk-linux/tools/bin
./sdkmanager --licenses
./sdkmanager platform-tools
./sdkmanager "platforms;android-26"
./sdkmanager "build-tools;25.0.3"
<br>
Change to Android NDK tools directory<br>
Change to Android NDK tools directory<br>
  cd $KODI_ROOT/android-tools/android-ndk-r18b/build/tools
  cd $KODI_ROOT/android-tools/android-ndk-r18b/build/tools
Line 62: Line 221:
Set up toolchain<br>
Set up toolchain<br>
  ./make-standalone-toolchain.sh --install-dir=$KODI_ROOT/android-tools/arm-linux-androideabi-vanilla/android-21 --platform=android-21 --toolchain=arm-linux-androideabi
  ./make-standalone-toolchain.sh --install-dir=$KODI_ROOT/android-tools/arm-linux-androideabi-vanilla/android-21 --platform=android-21 --toolchain=arm-linux-androideabi
<br>
Create a key to sign<br>
keytool -genkey -keystore ~/.android/debug.keystore -v -alias androiddebugkey -dname "CN=Android Debug,O=Android,C=US" -keypass android -storepass android -keyalg RSA -keysize 2048 -validity 10000
<br>
<br>
Clone Kodi's current master branch<br>
Clone Kodi's current master branch<br>
Line 79: Line 235:
  ./configure --with-tarballs=$KODI_ROOT/android-tools/xbmc-tarballs --with-ndk-api=24 --host=arm-linux-androideabi --with-sdk-path=$KODI_ROOT/android-tools/android-sdk-linux --with-ndk-path=$KODI_ROOT/android-tools/android-ndk-r18b --with-toolchain=$KODI_ROOT/android-tools/arm-linux-androideabi-vanilla/android-24 --prefix=$KODI_ROOT/android-tools/xbmc-depends
  ./configure --with-tarballs=$KODI_ROOT/android-tools/xbmc-tarballs --with-ndk-api=24 --host=arm-linux-androideabi --with-sdk-path=$KODI_ROOT/android-tools/android-sdk-linux --with-ndk-path=$KODI_ROOT/android-tools/android-ndk-r18b --with-toolchain=$KODI_ROOT/android-tools/arm-linux-androideabi-vanilla/android-24 --prefix=$KODI_ROOT/android-tools/xbmc-depends
<br>
<br>
Patch for Kodi 17 only<br>
 
<br>
Build tools and dependencies<br>
$KODI_ROOT/kodi/tools/depends/native/automake-native/x86_64-linux-native$ vi bin/automake.in
  make -j$(getconf _NPROCESSORS_ONLN)
<br>
  --- automake.in 2015-01-06 03:25:55.000000000 +0800
+++ automake.in.patched 2017-07-26 13:58:07.086205701 +0800
@@ -3878,7 +3878,7 @@
  sub substitute_ac_subst_variables
  {
    my ($text) = @_;
-  $text =~ s/\${([^ \t=:+{}]+)}/substitute_ac_subst_variables_worker ($1)/ge;
+  $text =~ s/\$\{([^ \t=:+{}]+)\}/substitute_ac_subst_variables_worker ($1)/ge;
    return $text;
  }
<br>
<br>
Fix $KODI_ROOT=/android-tools/xbmc-depends/x86_64-linux-gnu-native/include/gif_lib.h
--- /tmp/gif_lib.h      2018-12-29 16:30:47.441889499 +1300
+++ /media/iwiseman/Segate/Kypton/android-tools/xbmc-depends/x86_64-linux-gnu-native/include/gif_lib.h  2018-12-29 16:32:05.610388400 +1300
@@ -20,6 +20,7 @@
  #include <stddef.h>
  #include <stdbool.h>
+#include <stdlib.h>
  #define GIF_STAMP "GIFVER"          /* First chars in file - GIF stamp.  */
  #define GIF_STAMP_LEN sizeof(GIF_STAMP) - 1
@@ -245,7 +246,7 @@
  extern int GifBitSize(int n);
  extern void *
-reallocarray(void *optr, size_t nmemb, size_t size);
+reallocarray(void *optr, size_t nmemb, size_t size)  __THROW __attribute_warn_unused_result__;
  /******************************************************************************
  Support for the in-core structures allocation (slurp mode).
Fix up Google Breakpad
find $KODI_ROOT/kodi/tools/depends/native/google-breakpad-native/x86_64-linux-native  -type f -name "*.cc" -print0 | xargs -0 sed -i 's/struct ucontext/ucontext_t/g'
find $KODI_ROOT/kodi/tools/depends/native/google-breakpad-native/x86_64-linux-native  -type f -name "*.h" -print0 | xargs -0 sed -i 's/struct ucontext/ucontext_t/g'
find $KODI_ROOT/kodi/tools/depends/native/google-breakpad-native/x86_64-linux-native  -type f -name "*.cc" -print0 | xargs -0 sed -i 's/const ucontext /const ucontext_t /g'
find $KODI_ROOT/kodi/tools/depends/native/google-breakpad-native/x86_64-linux-native  -type f -name "*.h" -print0 | xargs -0 sed -i 's/const ucontext /const ucontext_t /g'


Fix zlib to have -fPIC use in zlib Makefile<br>
For Kodi 17 on Bionic code will need to be fixed see [[Kodi Krypton Fixes]]
--- /tmp/Makefile      2018-12-29 18:57:38.613221546 +1300
+++ Makefile    2018-12-29 18:57:52.519113900 +1300
@@ -15,6 +15,7 @@
  #    make install
  # To install in $HOME instead of /usr/local, use:
  #    make install prefix=$HOME
+override CFLAGS += -fPIC
<br>
<br>


Fix libffi
--- /tmp/Makefile      2018-12-29 19:10:26.968270997 +1300
+++ Makefile    2018-12-29 19:12:19.541011200 +1300
@@ -1,5 +1,5 @@
  include ../../Makefile.include
-DEPS= ../../Makefile.include Makefile
+DEPS= ../../Makefile.include Makefile armAssembler.patch
  # lib name, version
  LIBNAME=libffi
@@ -8,13 +8,7 @@
  ARCHIVE=$(SOURCE).tar.gz
  # configuration settings
-CONFIGURE= ./configure --prefix=$(PREFIX) --disable-shared --disable-builddir
-ifeq ($(OS), ios)
-ifneq ($(CPU), arm64)
-CONFIGURE+=CCASFLAGS=-no-integrated-as
-endif
-endif
-
+CONFIGURE= ./configure --prefix=$(PREFIX) --disable-shared --disable-builddir
  LIBDYLIB=$(PLATFORM)/.libs/$(LIBNAME).a
@@ -26,6 +20,7 @@
  $(PLATFORM): $(TARBALLS_LOCATION)/$(ARCHIVE) $(DEPS)
        rm -rf $(PLATFORM); mkdir -p $(PLATFORM)
        cd $(PLATFORM); $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE)
+      cd $(PLATFORM); patch -p1 -i ../armAssembler.patch
        cd $(PLATFORM); $(CONFIGURE)
  $(LIBDYLIB): $(PLATFORM)
Create file the patch armAssembler.patch in the Makefile directory
--- a/src/arm/sysv.S
+++ b/src/arm/sysv.S
@@ -360,7 +360,7 @@
        cmp    r0, #3
        sub    ip, fp, #64
        flddle  d0, [ip]
-      fldmiadgt      ip, {d0-d7}
+      vldmiagt        ip, {d0-d7} 
  LSYM(Lbase_args):
        @ move first 4 parameters in registers
@@ -396,7 +396,7 @@
        beq    LSYM(Lepilogue_vfp)
        cmp    r3, #FFI_TYPE_SINT64
-      stmeqia r2, {r0, r1}
+      stmiaeq r2, {r0, r1}
        beq    LSYM(Lepilogue_vfp)
        cmp    r3, #FFI_TYPE_FLOAT
@@ -409,7 +409,7 @@
        cmp    r3, #FFI_TYPE_STRUCT_VFP_FLOAT
        cmpne  r3, #FFI_TYPE_STRUCT_VFP_DOUBLE
-      fstmiadeq      r2, {d0-d3}
+      vstmiaeq        r2, {d0-d3}
  LSYM(Lepilogue_vfp):
        RETLDM  "r0-r3,fp"
@@ -420,7 +420,7 @@
  ARM_FUNC_START(ffi_closure_VFP)
-      fstmfdd sp!, {d0-d7}
+      vstmdb  sp!, {d0-d7}
        @ r0-r3, then d0-d7
        UNWIND .pad #80
        add    ip, sp, #80
@@ -470,10 +470,10 @@
        ldmia  sp, {r0, r1}
        b      .Lclosure_epilogue_vfp
  .Lretfloat_struct_vfp:
-      fldmiad sp, {d0-d1}
+      vldmia  sp, {d0-d1}
        b      .Lclosure_epilogue_vfp
  .Lretdouble_struct_vfp:
-      fldmiad sp, {d0-d3}
+      vldmia  sp, {d0-d3}
        b      .Lclosure_epilogue_vfp
  .ffi_closure_VFP_end:
Fix python
--- /tmp/pythonrun.c    2018-12-29 19:33:17.869754505 +1300
+++ ./target/python27/arm-linux-androideabi-android-24/Python/pythonrun.c      2018-12-29 19:33:38.918419700 +1300
@@ -294,51 +294,6 @@
          overridden = 1;
      }
-#if defined(Py_USING_UNICODE) && defined(HAVE_LANGINFO_H) && defined(CODESET)
-    /* On Unix, set the file system encoding according to the
-      user's preference, if the CODESET names a well-known
-      Python codec, and Py_FileSystemDefaultEncoding isn't
-      initialized by other means. Also set the encoding of
-      stdin and stdout if these are terminals, unless overridden.  */
-
-    if (!overridden || !Py_FileSystemDefaultEncoding) {
-        saved_locale = strdup(setlocale(LC_CTYPE, NULL));
-        setlocale(LC_CTYPE, "");
-        loc_codeset = nl_langinfo(CODESET);
-        if (loc_codeset && *loc_codeset) {
-            PyObject *enc = PyCodec_Encoder(loc_codeset);
-            if (enc) {
-                loc_codeset = strdup(loc_codeset);
-                Py_DECREF(enc);
-            } else {
-                if (PyErr_ExceptionMatches(PyExc_LookupError)) {
-                    PyErr_Clear();
-                    loc_codeset = NULL;
-                } else {
-                    PyErr_Print();
-                    exit(1);
-                }
-            }
-        } else
-            loc_codeset = NULL;
-        setlocale(LC_CTYPE, saved_locale);
-        free(saved_locale);
-
-        if (!overridden) {
-            codeset = icodeset = loc_codeset;
-            free_codeset = 1;
-        }
-
-        /* Initialize Py_FileSystemDefaultEncoding from
-          locale even if PYTHONIOENCODING is set. */
-        if (!Py_FileSystemDefaultEncoding) {
-            Py_FileSystemDefaultEncoding = loc_codeset;
-            if (!overridden)
-                free_codeset = 0;
-        }
-    }
-#endif
-
  #ifdef MS_WINDOWS
      if (!overridden) {
          icodeset = ibuf;
Fix libxml2
--- /tmp/Makefile      2018-12-29 19:40:06.017621137 +1300
+++ Makefile    2018-12-29 19:40:35.767996300 +1300
@@ -19,6 +19,8 @@
+ override CFLAGS += -fPIC
+
  pkgdatadir = $(datadir)/libxml2
  pkgincludedir = $(includedir)/libxml2
  pkglibdir = $(libdir)/libxml2
Build tools and dependencies<br>
make -j$(getconf _NPROCESSORS_ONLN)
<br>
Build all add-ons<br>
Build all add-ons<br>
cd $KODI_ROOT/kodi<br>
cd $KODI_ROOT/kodi<br>
  make -j$(getconf _NPROCESSORS_ONLN) -C tools/depends/target/binary-addons
  make -j$(getconf _NPROCESSORS_ONLN) -C tools/depends/target/binary-addons
<br>
<br>
Build Kodi<br>
Build Kodi<br>
Configure CMake build:
Configure CMake build:
Line 299: Line 253:
  make -C tools/depends/target/cmakebuildsys
  make -C tools/depends/target/cmakebuildsys
<br>
<br>
Build Kodi<br>
Build Kodi<br>
  cd $KODI_ROOT/kodi/build
  cd $KODI_ROOT/kodi/build

Latest revision as of 11:15, 27 March 2021

Building Kodi on Android

Create Linux Directories

Create Linux ROOT Directory (KODI_LINUX_ROOT)

 export KODI_LINUX_ROOT=$HOME/dev/KODI_LINUX_ROOT
 mkdir  -p KODI_LINUX_ROOT
 cd $KODI_LINUX_ROOT

Create Linux Build Directory (KODI_LINUX_BUILD)

 export KODI_LINUX_BUILD=$KODI_LINUX_ROOT/KODI_LINUX_BUILD
 mkdir $KODI_LINUX_BUILD
 cd $KODI_LINUX_BUILD

Create Linux Source Directory (KODI_LINUX_SOURCE)

 export KODI_LINUX_SOURCE=$KODI_LINUX_ROOT/kodi
 // mkdir  -p KODI_LINUX_ROOT

Get Source

cd $KODI_LINUX_ROOT
 git clone https://github.com/bibble235/xbmc kodi
 // Get the source and add Kodi's nightly PPA to grab dependencies<br>
 // git clone https://github.com/xbmc/xbmc kodi
 // sudo add-apt-repository -s ppa:team-xbmc/xbmc-nightly

Build Linux Kodi

Prepare to Build

 sudo apt build-dep kodi
 sudo apt install ccache

Configure Linux Kodi

 cd $KODI_LINUX_BUILD
 cmake ../kodi  -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=/usr/local -DAPP_RENDER_SYSTEM=gl
 cmake --build . -j$(getconf _NPROCESSORS_ONLN)

Build Linux Kodi Addons

 cd $KODI_LINUX_SOURCE
 make -j$(getconf _NPROCESSORS_ONLN) -C tools/depends/target/binary-addons PREFIX=/usr/local

VS Code

Setting

{
    "cmake.sourceDirectory": "${env:KODI_LINUX_SOURCE}",
    "cmake.buildDirectory": "${env:KODI_LINUX_BUILD}",
    "cmake.generator": "Unix Makefiles",
    "cmake.configureArgs": [
        "-DCMAKE_BUILD_TYPE=Debug", 
        "-DCMAKE_INSTALL_PREFIX=/usr/local", 
        "-DAPP_RENDER_SYSTEM=gl"
    ],
    "cmake.buildArgs": [
        "."
    ]
}

Launch Settings

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${env:KODI_LINUX_BUILD}/kodi.bin",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

Building Kodi on Android

Create Android Directories

Create Android ROOT (KODI_ANDROID_ROOT) Directory

export KODI_ANDROID_ROOT=$HOME/dev/KODI_ANDROID_ROOT
mkdir -p $KODI_ANDROID_ROOT
cd $KODI_ANDROID_ROOT

Create Android Build Directory (KODI_ANDROID_BUILD)

 export KODI_BUILD_DIR=$KODI_ANDROID_ROOT/KODI_ANDROID_BUILD
 mkdir -p $KODI_BUILD_DIR

Create Android Build Directory (KODI_ANDROID_SOURCE)

We do not need to make this directory as git does this

 export KODI_ANDROID_SOURCE=$KODI_ANDROID_ROOT/kodi
 #mkdir -p $KODI_ANDROID_SOURCE

Create Android directory (KODI_ANDROID)

 export KODI_ANDROID=$HOME/dev/Android_Standalone
 mkdir -p $KODI_ANDROID

Create Android SDK directory (KODI_SDK)

 export KODI_SDK=$KODI_ANDROID/cmdline-tools
 mkdir -p $KODI_SDK

Create Android NDK directory (KODI_NDK)

 export KODI_NDK=$KODI_ANDROID/android-ndk-r20b
 mkdir -p $KODI_NDK

Prerequisites

Ubunty (20.1)

sudo apt install autoconf build-essential curl default-jdk gawk git gperf lib32stdc++6 lib32z1 lib32z1-dev libcurl4-openssl-dev unzip zlib1g-dev

Get SDK Command Tools and NDK

I used the following

 wget https://dl.google.com/android/repository/commandlinetools-linux-6858069_latest.zip
 wget https://dl.google.com/android/repository/android-ndk-r20b-linux-x86_64.zip

Extract the zip files

 unzip $KODI_ANDROID_ROOT/Downloads/commandlinetools-linux-6858069_latest.zip -d $KODI_ANDROID
 unzip $KODI_ANDROID_ROOT/Downloads/android-ndk-r20b-linux-x86_64.zip -d $KODI_ANDROID

Accept Licenses (And Get SDK Bits)

 cd $KODI_SDK/bin
 ./sdkmanager --licenses --sdk_root=$KODI_SDK
 ./sdkmanager platform-tools --sdk_root=$KODI_SDK
 ./sdkmanager "platforms;android-28" --sdk_root=$KODI_SDK
 ./sdkmanager "build-tools;28.0.3" --sdk_root=$KODI_SDK

Create a key to sign

I found this already existed. Hopefully will update if this proves to be a problem

 keytool -genkey -keystore ~/.android/debug.keystore -v -alias androiddebugkey -dname "CN=Android Debug,O=Android,C=US" -keypass android -storepass android -keyalg RSA -keysize 2048 -validity 10000

Get Source

cd $KODI_LINUX_ROOT
 git clone https://github.com/bibble235/xbmc kodi
 // Get the source and add Kodi's nightly PPA to grab dependencies<br>
 // git clone https://github.com/xbmc/xbmc kodi
 // sudo add-apt-repository -s ppa:team-xbmc/xbmc-nightly

Configure

 cd $KODI_ANDROID_SOURCE/tools/depends
 ./bootstrap
 ./configure --with-tarballs=$KODI_ANDROID_SOURCE/xbmc-tarballs --host=arm-linux-androideabi --with-sdk-path=$KODI_SDK --with-ndk-path=$KODI_NDK --prefix=$KODI_ANDROID_SOURCE/xbmc-depends

Build Android Kodi

Build tools and dependencies

 make -j$(getconf _NPROCESSORS_ONLN) BUILD_DIR=$KODI_BUILD_DIR

Build Android Kodi Binary Addons

 cd $KODI_ANDROID_SOURCE
 make -C tools/depends/target/cmakebuildsys BUILD_DIR=$KODI_BUILD_DIR

Build Android Kodi

 make -C tools/depends/target/cmakebuildsys BUILD_DIR=$KODI_BUILD_DIR
 cd $KODI_BUILD_DIR
 make -j$(getconf _NPROCESSORS_ONLN) BUILD_DIR=$KODI_BUILD_DIR

Package Android Kodi

This will run gradle and create the Apk

 make apk

Stuff to Delete




Change to Android NDK tools directory

cd $KODI_ROOT/android-tools/android-ndk-r18b/build/tools


Set up toolchain

./make-standalone-toolchain.sh --install-dir=$KODI_ROOT/android-tools/arm-linux-androideabi-vanilla/android-21 --platform=android-21 --toolchain=arm-linux-androideabi


Clone Kodi's current master branch

cd $KODI_ROOT
git clone https://github.com/xbmc/xbmc kodi


Prepare to configure build

cd $KODI_ROOT/kodi/tools/depends
./bootstrap


Configure build for arm Kodi 17

./configure --with-tarballs=$KODI_ROOT/android-tools/xbmc-tarballs --with-ndk-api=24 --host=arm-linux-androideabi --with-sdk=android-26  --with-sdk-path=$KODI_ROOT/android-tools/android-sdk-linux --with-ndk=$KODI_ROOT/android-tools/android-ndk-r18b --with-toolchain=$KODI_ROOT/android-tools/arm-linux-androideabi-vanilla/android-24 --prefix=$KODI_ROOT/android-tools/xbmc-depends

Configure build for arm Kodi 18

./configure --with-tarballs=$KODI_ROOT/android-tools/xbmc-tarballs --with-ndk-api=24 --host=arm-linux-androideabi --with-sdk-path=$KODI_ROOT/android-tools/android-sdk-linux --with-ndk-path=$KODI_ROOT/android-tools/android-ndk-r18b --with-toolchain=$KODI_ROOT/android-tools/arm-linux-androideabi-vanilla/android-24 --prefix=$KODI_ROOT/android-tools/xbmc-depends


Build tools and dependencies

make -j$(getconf _NPROCESSORS_ONLN)


For Kodi 17 on Bionic code will need to be fixed see Kodi Krypton Fixes

Build all add-ons
cd $KODI_ROOT/kodi

make -j$(getconf _NPROCESSORS_ONLN) -C tools/depends/target/binary-addons


Build Kodi
Configure CMake build:

cd $KODI_ROOT/kodi
make -C tools/depends/target/cmakebuildsys


Build Kodi

cd $KODI_ROOT/kodi/build
make -j$(getconf _NPROCESSORS_ONLN)


Create package

make apk

Building Amended PVR IPTV Simple Plugin Linux

cd $KODI_ROOT
git clone https://github.com/bibble235/pvr.iptvsimple
cd pvr.iptvsimple && mkdir build && cd build
cmake -DADDONS_TO_BUILD=pvr.iptvsimple -DADDON_SRC_PREFIX=../.. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=../../xbmc/addons -DPACKAGE_ZIP=1 ../../xbmc/cmake/addons
make

Building Amended PVR IPTV Simple Plugin Android

cd $KODI_ROOT
git clone https://github.com/bibble235/pvr.iptvsimple
cd pvr.iptvsimple && mkdir build && cd build
cmake -DADDONS_TO_BUILD=pvr.iptvsimple -DADDON_SRC_PREFIX=../.. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=../../kodi/addons -DPACKAGE_ZIP=1 \
-DCMAKE_TOOLCHAIN_FILE=$KODI_ROOT/Android/kodi/tools/depends/target/binary-addons/arm-linux-androideabi-21-debug/build/depends/share/Toolchain_binaddons.cmake \ 
../../kodi/cmake/addons
make