diff --git a/getting_started/build-guide/build-from-scratch.rst b/getting_started/build-guide/build-from-scratch.rst index bd304620..3c292a27 100644 --- a/getting_started/build-guide/build-from-scratch.rst +++ b/getting_started/build-guide/build-from-scratch.rst @@ -42,6 +42,19 @@ for the Advanced Linux Sound Architecture (ALSA) to build. $ sudo apt-get install gcc-7 g++-7 $ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70 --slave /usr/bin/g++ g++ /usr/bin/g++-7 +Install CMake +----------------------------- + +If you use Ubuntu 18.04 you can install CMake with apt: + +.. code-block:: bash + + $ sudo apt-get cmake + +On Ubuntu 16.04, CMake from apt is outdated and you have to install CMake from sources. + +You can do this by following this short guide: https://cmake.org/install/ + Build alsa-lib and alsa-utils ----------------------------- @@ -74,7 +87,7 @@ Clone, build, and install alsa-utils. .. note:: - If gitcompile script doen't work, refer to INSTALL file for manual build instruction. + If gitcompile script doesn't work, refer to INSTALL file for manual build instruction. Build toolchain from source =========================== @@ -198,7 +211,7 @@ Build with scripts ------------------ To build |SOF| quickly use the built-in scripts after setting up the -environment. For the first time build, build *rimage* tool first. +environment. Build firmware of all platforms. @@ -233,85 +246,93 @@ Build with commands This is a detailed build guide for the *sof* repo. -Build *rimage* before building the *sof* firmware. - -.. code-block:: bash +Snippets below assume that at beginning your working directory is repo's root (~/work/sof/sof/). - $ ./autogen.sh - $ ./configure --enable-rimage - $ make - $ sudo make install +CMake is designed for out-of-tree builds, that's why you should make separate dirs for your configurations. -Then configure and make +You can manage builds for many configurations/platforms from the one source this way. for |BYT|: .. code-block:: bash - $ ./configure --with-arch=xtensa --with-platform=baytrail --with-root-dir=`pwd`/../xtensa-root/xtensa-byt-elf --host=xtensa-byt-elf - $ make - $ make bin + $ mkdir build_byt && cd build_byt + $ cmake -DTOOLCHAIN=xtensa-byt-elf -DROOT_DIR=`pwd`/../xtensa-root/xtensa-byt-elf .. + $ make baytrail_defconfig + $ make bin -j4 for |CHT|: .. code-block:: bash - $ ./configure --with-arch=xtensa --with-platform=cherrytrail --with-root-dir=`pwd`/../xtensa-root/xtensa-cht-elf --host=xtensa-cht-elf - $ make - $ make bin - + $ mkdir build_cht && cd build_cht + $ cmake -DTOOLCHAIN=xtensa-cht-elf -DROOT_DIR=`pwd`/../xtensa-root/xtensa-cht-elf .. + $ make cherrytrail_defconfig + $ make bin -j4 for |HSW|: .. code-block:: bash - $ ./configure --with-arch=xtensa --with-platform=haswell --with-root-dir=`pwd`/../xtensa-root/xtensa-hsw-elf --host=xtensa-hsw-elf - $ make - $ make bin + $ mkdir build_hsw && cd build_hsw + $ cmake -DTOOLCHAIN=xtensa-hsw-elf -DROOT_DIR=`pwd`/../xtensa-root/xtensa-hsw-elf .. + $ make haswell_defconfig + $ make bin -j4 for |BDW|: .. code-block:: bash - $ ./configure --with-arch=xtensa --with-platform=broadwell --with-root-dir=`pwd`/../xtensa-root/xtensa-hsw-elf --host=xtensa-hsw-elf - $ make - $ make bin + $ mkdir build_bdw && cd build_bdw + $ cmake -DTOOLCHAIN=xtensa-hsw-elf -DROOT_DIR=`pwd`/../xtensa-root/xtensa-hsw-elf .. + $ make broadwell_defconfig + $ make bin -j4 for |APL|: .. code-block:: bash - $ ./configure --with-arch=xtensa-smp --with-platform=apollolake --with-root-dir=`pwd`/../xtensa-root/xtensa-apl-elf --host=xtensa-apl-elf - $ make - $ make bin + $ mkdir build_apl && cd build_apl + $ cmake -DTOOLCHAIN=xtensa-apl-elf -DROOT_DIR=`pwd`/../xtensa-root/xtensa-apl-elf .. + $ make apollolake_defconfig + $ make bin -j4 for |CNL|: .. code-block:: bash - $ ./configure --with-arch=xtensa-smp --with-platform=cannonlake --with-root-dir=`pwd`/../xtensa-root/xtensa-cnl-elf --host=xtensa-cnl-elf - $ make - $ make bin - + $ mkdir build_cnl && cd build_cnl + $ cmake -DTOOLCHAIN=xtensa-cnl-elf -DROOT_DIR=`pwd`/../xtensa-root/xtensa-cnl-elf .. + $ make cannonlake_defconfig + $ make bin -j4 .. note:: - There are DEBUG option and ROM option for the FW bianry build, you can enable them with configure options '--enable-debug=yes' and '--enable-roms' + | After 'make \*_defconfig' step, you can customize your build with 'make menuconfig'. + | There are DEBUG option and ROM option for the FW bianry build, you can enable them with 'make menuconfig'. .. code-block:: bash - $ ./configure --with-arch=xtensa-smp --with-platform=apollolake --with-root-dir=`pwd`/../xtensa-root/xtensa-apl-elf --host=xtensa-apl-elf --enable-debug=yes --enable-roms + $ mkdir build_cnl_custom && cd build_cnl_custom + $ cmake -DTOOLCHAIN=xtensa-cnl-elf -DROOT_DIR=`pwd`/../xtensa-root/xtensa-cnl-elf .. + $ make cannonlake_defconfig + $ make menuconfig # select/deselect options and save + $ make bin -j4 + +.. note:: + + If you have `Ninja `_ installed you can use it instead of Make. Just type *cmake -GNinja ...* while doing configuration step. Firmware build results ---------------------- -The firmware binary files are located in src/arch/xtensa/. Copy them to +The firmware binary files are located in build_/src/arch/xtensa/. Copy them to your target machine's /lib/firmware/intel/ folder. .. code-block:: bash - sof-apl.ri sof-bdw.ri sof-byt.ri sof-cht.ri sof-cnl.ri sof-hsw.ri + sof_apl.ri sof_bdw.ri sof_byt.ri sof_cht.ri sof_cnl.ri sof_hsw.ri Build topology and tools