TOC
- Introduction
- Getting the source code
- Installing the required libraries and headers
- How to compile 4.4 Binary addons 4.5 Test suite
- How to run
- Uninstalling
- Example basic setup of a KODI machine running on FreeBSD 7.1 Setting up X Server 7.2 Install SLiM login manager 7.3 Solving the troubles with HDMI Audio
- Introduction
A graphics-adapter with OpenGL acceleration is highly recommended. 24/32 bitdepth is required along with OpenGL.
Note to new FreeBSD users: All lines that are prefixed with the '$' character are commands, that need to be typed into a terminal window / console. The '$' equals the prompt. Note: The '$' character itself should NOT be typed as part of the command.
- Getting the source code
You will have to grab the source code of course, here we use git as example. First install the git package provided by your distribution. Then from a terminal, type:
.0 $ cd $HOME .1 $ git clone git://github.com/xbmc/xbmc.git kodi
Note: You can clone any specific branch.
.1 $ git clone -b git://github.com/xbmc/xbmc.git kodi
- Installing the required libraries and headers
You will then need the required libraries. The following is the list of packages that are used to build Kodi packages on Debian/Ubuntu (with all supported external libraries enabled).
$ pkg install taglib gstreamer1-vaapi hal libcapn
enca gawk gperf cmake zip nasm swig30 openjdk8 libtool gettext-tools
gmake pkgconf rapidjson mesa-libs doxygen glproto dri2proto dri3proto libass
flac libcdio curl dbus fontconfig freetype2 fribidi
libgcrypt gmp libgpg-error gnutls libidn libinotify lzo2
libogg sqlite3 tiff tinyxml e2fsprogs-libuuid git libvorbis libxslt libplist
shairplay avahi-app libcec libbluray samba46 libnfs librtmp libva libvdpau
jpeg-turbo glew xrandr libedit inputproto giflib m4 encodings
font-util mysql57-client xf86vidmodeproto python2 p8-platform libbdplus
libaacs libudev-devd sndio ccache xorg-server binutils libmicrohttpd
xorg-server xf86-input-mouse xf86-input-keyboard lirc libfmt autoconf automake
- How to compile
Cmake build instructions V18.0 Leia and higher
Create and change to build directory $ mkdir kodi-build && cd kodi-build
Run CMake
- for X11 $ cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local
Compiling on FreeBSD -DENABLE_ALSA=OFF recommended. Or build would fail due to Linux specific portion of code in xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp. After build KODI would use SNDIO on FreeBSD.
Build $ cmake --build . -- VERBOSE=1
Tip: By adding -j to the make command, you describe how many concurrent jobs will be used, it will speed up the build process. So for quadcore the command is:
$ cmake --build . -- VERBOSE=1 -j4
If the build process completes succesfully you would want to test if it is working. Still in the build directory type the following:
$ ./kodi.bin
If everything was okay during your test you can now install the binaries to their place in this example "/usr/local".
$su
$gmake install
$exit
NB! 'gmake' stands for 'GNU Make'. BSD's own make does not work here.
This will install Kodi in the prefix provided in 4.1 as well as a launcher script.
Tip: By adding -j to the make command, you describe how many concurrent jobs will be used. So for dualcore the command is:
$ su
$ gmake install -j2
Tip: To override the location that Kodi is installed, use PREFIX=. For example.
$ gmake install DESTDIR=$HOME/kodi
From v14 with commit 4090a5f a new API for binary addons is available. You can compile all addons or only specific addons by specifying e.g. ADDONS="audioencoder.foo pvr.bar audiodecoder.baz"
.0 All addons $ gmake -C tools/depends/target/binary-addons PREFIX=/<system prefix added on step 4.1>
.1 Specific addons $ gmake -C tools/depends/target/binary-addons PREFIX=/<system prefix added on step 4.1> ADDONS="audioencoder.flac pvr.vdr.vnsi audiodecoder.snesapu"
Audio decoders: audiodecoder.modplug, audiodecoder.nosefart, audiodecoder.sidplay, audiodecoder.snesapu, audiodecoder.stsound, audiodecoder.timidity, audiodecoder.vgmstream
Audio encoders: audioencoder.flac, audioencoder.lame, audioencoder.vorbis, audioencoder.wav
Inputstream addons: inputstream.mpd
Peripheral addons: peripheral.joystick
PVR addons: pvr.argustv, pvr.demo, pvr.dvblink, pvr.dvbviewer, pvr.filmon, pvr.hdhomerun, pvr.hts, pvr.iptvsimple, pvr.mediaportal.tvserver,pvr.mythtv, pvr.nextpvr, pvr.njoy, pvr.pctv, pvr.stalker, pvr.vbox, pvr.vdr.vnsi, pvr.vuplus, pvr.wmc
Screensavers: screensaver.asteroids, screensaver.biogenesis, screensaver.greynetic, screensaver.matrixtrails, screensaver.pingpong, screensaver.pyro, screensavers.rsxs, screensaver.stars
Visualizations visualization.fishbmc, visualization.goom, visualization.projectm, visualization.shadertoy visualization.spectrum, visualization.vsxu, visualization.waveform
Kodi has a test suite which uses the Google C++ Testing Framework. This framework is provided directly in Kodi's source tree. It has very little requirements, in order to build and run. See the README file for the framework at 'lib/gtest/README' for specific requirements.
To compile and run Kodi's test suite, type the following:
$ gmake check
To compile the test suite without running it, type the following.
$ gmake kodi-test
The test suite program can be run manually as well. The name of the test suite program is 'kodi-test' and will build in the Kodi source tree. To bring up the 'help' notes for the program, type the following:
$ ./kodi-test --gtest_help
The most useful options are,
--gtest_list_tests
List the names of all tests instead of running them.
The name of TEST(Foo, Bar) is "Foo.Bar".
--gtest_filter=POSITIVE_PATTERNS[-NEGATIVE_PATTERNS]
Run only the tests whose name matches one of the positive patterns but
none of the negative patterns. '?' matches any single character; '*'
matches any substring; ':' separates two patterns.
- How to run
How to run Kodi depends on the type of installation you have done. It is possible to run Kodi without the requirement to install Kodi anywhere else. In this case, type the following from the top source directory.
$ ./kodi.bin
Or run in 'portable' mode
$ ./kodi.bin -p
If you chose to install Kodi using '/usr' or '/usr/local' as the PREFIX, you can just issue 'kodi' in a terminal session.
If you have overridden PREFIX to install Kodi into some non-standard location, you will have to run Kodi by directly running 'kodi.bin'.
For example:
$ $HOME/kodi/usr/lib/kodi/kodi.bin
You should still run the wrapper via $ $PREFIX/bin/kodi
If you wish to use VDPAU decoding you will now have to change the Render Method in Settings->Videos->Player from "Auto Detect" to "VDPAU".
- Uninstalling
Prepend "sudo" or "doas" to commands (if installed, if not use just 'su'), if your user doesn't have write permission to the install directory.
Note: If you have rerun configure with a different prefix, you will either need to rerun configure with the correct prefix for this step to work correctly.
$ gmake uninstall
.0 $ sudo make uninstall
If you would like to also remove any settings and 3rd party addons (skins, scripts, etc) you should also run:
.1 $ rm -rf ~/.kodi
- Example basic setup of a KODI machine running on FreeBSD
If having installed FreeBSD 'RELEASE' and not 'STABLE' or 'CURRENT, do system update first: (have to be 'root'). Also, if you have Radeon graphics card and plan using HDMI Audio, better install FreeBSD source files during installation.
$ freebsd-update fetch
$ freebsd-update install
Update binary package repository:
$pkg update
Install convenient text editor ('nano' in this case).
$pkg install nano
Open /boot/loader.conf
$ nano /boot/loader.conf
Add into file following rows:
kern.ipc.shmseg=1024
kern.ipc.shmmni=1024
kern.maxproc=10000
hint.acpi_throttle.0.disabled=1
machdep.disable_mtrrs=1
kern.cam.scsi_delay=500
Open /etc/rc.conf
$ nano /etc/rc.conf
Add into the beginning of a /etc/rc.conf
kld_list="radeonkms acpi_asus_wmi acpi_asus acpi_video amdtemp tmpfs libiconv msdosfs_iconv snd_driver"
Brief explanation:
radeonkms - Radeon KMS driver.
acpi_asus_wmi - both ASUS board specific drivers.
acpi_asus
amdtemp - temperature sensor module for AMD CPU. For Intel CPU that would be 'coretemp'
You may had some X packages during install of KODI's dependency packages but 'xorg' is a metapackage, installing the missing bits as well.
$ pkg install xorg hal
Add keyboard and mouse support
$ pkg install xf86-input-mouse xf86-input-keyboard
According to your actual hardware, pick one:
$ pkg install xf86-video-ati
$ pkg install xf86-video-nv
$ pkg install xf86-video intel
NB! Nvidia's driver could also be downloaded from https://www.geforce.com/drivers. Both FreeBSD 32-bit and 64-bit official driver exist there.
Open /etc/rc.conf and add:
dbus_enable="YES"
hald_enable="YES"
Add user running KODI into group 'video'. Necessity for having an working OpenGL acceleration in KODI.
$ pw groupmod video -m kodiuser
$ pkg install slim
$ nano /etc/rc.conf
Add:
slim_enable="YES"
NB! Has to be below 'dbus_enable="YES"' and 'hald_enable="YES"' entries in the file.
Open SLiM configuration file.
$ nano /usr/local/etc/slim.conf
Edit until it looks like:
default_path /sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin
default_xserver /usr/local/bin/X
xserver_arguments -nolisten tcp vt09
halt_cmd /sbin/shutdown -p now
reboot_cmd /sbin/shutdown -r now
console_cmd /usr/local/bin/xterm -C -fg white -bg black +sb -T "Console login" -e /bin/sh -c "/bin/cat /etc/motd; exec /usr/bin/login"
suspend_cmd /usr/sbin/acpiconf -s 3
xauth_path /usr/local/bin/xauth
authfile /var/run/slim.auth
login_cmd exec /bin/sh - ~/.xinitrc %session
sessiondir /usr/local/share/xsessions
screenshot_cmd import -window root /slim.png
default_user kodi #or whatever user was chosen
auto_login yes
current_theme default
lockfile /var/run/slim.pid
logfile /var/log/slim.log
Exit root user and log into user you plan to run KODI with: create .xinitrc file into it's home directory
$touch .xinitrc
Add into it:
exec /usr/local/bin/kodi
Log out of normal user, back to 'root' and add package 'doas' (something like sudo)
$ pkg install doas
Edit it's config
$ nano /usr/local/etc/doas.conf
Add into file following rows:
permit persist :wheel #assuming group 'wheel' has user
permit nopass kodi as root cmd reboot
permit nopass kodi as root cmd shutdown
It will allow KODI user basic ability to shut down/reboot machine without needing privilege escalation. To complete it.
$ pkg install upower
Create file
$ nano /usr/local/etc/polkit-1/localauthority/50-local.d/custom-actions.pkla
Add into it:
[Actions for KODI users]
Identity=kodi:kodi
Action=org.freedesktop.upower.*
ResultAny=yes
ResultInactive=yes
ResultActive=yes
On restart (assuming you meanwhile also installed KODI itself), machine should:
-start SLiM -autologin with user kodi (or whatever was chosen) -autostart KODI
For the rest: FreeBSD has excellent documentation: https://www.freebsd.org/doc/handbook/
And active forum you can ask advice from: https://forums.freebsd.org/
Nvidia graphics.
$ pkg install nvidia-driver nvidia-xconfig
Add into /boot/loader.conf rows: snd_hda_load="YES" nvidia_load="YES" hw.snd.default_unit="0" #ID could be something else besides 0. If it is, #correct it accordingly
You can find it by:
$ cat /dev/sndstat
After saving the /boot/loader.conf you can force the change in live using
$ sysctl hw.snd.default_unit=0 (or whatever number your particular machine's
'cat's would make you choose).
$ kldload nvidia
$ kldload snd_hda
or just reboot..
Radeon graphics. First check that HDMI sound output and active sound device in system would be both the same.
$ cat /dev/sndstat
$ sysctl -a | grep hw.snd.default_unit
For example: If former shows:
pcm0: <ATI R6xx (HDMI)> (play)
pcm1: <Realtek ALC269 (Right Analog)> (play/rec) default
pcm2: <Realtek ALC269 (Internal Analog)> (play/rec)
No devices installed from userspace.
and latter:
hw.snd.default_unit: 1
then you should give command:
$ sysctl hw.snd.default_unit=0
Assuming you did install system sources during installation (you better have!) Open and find:
int radeon_audio = 0;
From:
$ nano /usr/src/sys/dev/drm2/radeon/radeon_drv.c
Change it to:
int radeon_audio = 1;
Save the file, close the editor. Then
$ cd /usr/src
$ make buildkernel
Wait until Clang/LLVM finish.
$make installkernel
Reboot and now your Radeon's HDMI Audio should function properly.
Intel iGPU. Problem may be in wrong output ID. Find it, correct it in a similar manner like demonstrated in examples above.
EOF