aboutsummaryrefslogtreecommitdiff
path: root/docs/README.FreeBSD
blob: 1314730a55851d9a8c3d1a17f2e274b34ca552d0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
TOC
1. Introduction
2. Getting the source code
3. Installing the required libraries and headers
4. How to compile
   4.4 Binary addons
   4.5 Test suite
5. How to run
6. Uninstalling
7. 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
-----------------------------------------------------------------------------
1. 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.

-----------------------------------------------------------------------------
2. 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 <branch> git://github.com/xbmc/xbmc.git kodi

-----------------------------------------------------------------------------
3. 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 libssh 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

-----------------------------------------------------------------------------
4. 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<number> 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<number> 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=<path>.
For example.

    $ gmake install DESTDIR=$HOME/kodi

-----------------------------------------------------------------------------
4.4. Binary addons - compile
-----------------------------------------------------------------------------

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

-----------------------------------------------------------------------------
4.5. Test suite
-----------------------------------------------------------------------------

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.

-----------------------------------------------------------------------------
5. 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".

-----------------------------------------------------------------------------
6. 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

-----------------------------------------------------------------------------
7. 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'

-----------------------------------------------------------------------------
7.1 Setting up X server
-----------------------------------------------------------------------------

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

-----------------------------------------------------------------------------
7.2 Install SLiM login manager
-----------------------------------------------------------------------------

    $ 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/

-----------------------------------------------------------------------------
7.3 Solving the troubles with HDMI Audio.
-----------------------------------------------------------------------------

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