Commit Graph

40 Commits

Author SHA1 Message Date
Andy Ross c50eddce1f platform: Add Zephyr native_posix-based emulation environment
This extends the ideas in CONFIG_LIBRARY=y to implement SOF as an
application for the Zephyr native_posix architecture.  These are host
x86 or x86_64 binaries that include a full OS build, which can be used
(via mocked drivers) for testing against host validation environments
like ASAN/MSAN.

The mechanism uses the existing "host" architecture used by
CONFIG_LIBRARY, but adds a new platform layer named "posix", populated
entirely with stubs.

No driver integration is provided in this patch.  The resulting
executable builds correctly, but has no devices and won't do anything.

Signed-off-by: Andy Ross <andyross@google.com>
2022-12-07 17:25:39 +00:00
Marc Herbert 9915d1e1fd cmake: stop sneakily downloading missing submodules at build time
Note this change does NOT affect Zephyr builds in any shape or form as
Zephyr builds simply don't use the CMake files changed by this commit.

Downloading missing submodules at build time was never a good idea;
always a hack. Downloading and building should always be kept separate
from each other for version control and bill of materials reasons and to
support "off-line" builds; build inputs should always be available.

Now that Zephyr builds have just moved away from git submodules
(replaced by west), stop sneakily downloading missing submodules at
build time while the user cannot notice, overwhelmed by the volume of
build logs. Someone building XTOS first and Zephyr second could
unknowningly end up in a "hybrid" and undesired situation where git
submodules and west would be BOTH pointing at the same rimage clone.

Signed-off-by: Marc Herbert <marc.herbert@intel.com>
2022-08-31 10:40:04 +01:00
Marc Herbert deb0e7340e Rename generated version.h to sof_versions.h
Zephyr also a version.h too so the situation was a buggy #include mess
that (among others) dropped the SOF git version from the SOF banner when
using Zephyr. It's absolutely impossible to fix this mess while keeping
two .h files both named exactly the same and even included with the
exact same '#include version.h' line, I mean no sof/version.h or other
prefix.

As a bonus, this rename also reduces the XTOS-only confusion between
"version.h" and cavs/version.h".

Generating a file in the source tree is a serious bug (to be fixed
later), it means this file is never cleaned. Do not hide this bug with a
.gitignore rule.

Signed-off-by: Marc Herbert <marc.herbert@intel.com>
2022-01-14 16:56:29 +00:00
Marc Herbert bd01f6fad4 cmake: add the -Irimage #include path only for the modules that need it
Fixes 177d9bd073 ("cmake: defer the rimage build until it's actually
needed.") that corrected the rimage dependency but forgot about the
include.

This allows building the testbench without fetching rimage.

Signed-off-by: Marc Herbert <marc.herbert@intel.com>
2021-09-17 17:15:50 +01:00
Curtis Malainey a0acad3414 CMake: require version 3.13
Without CMP0079 we cannot conditionally include libraries against SOF in
sub directories without seriously restructuring the project. This is
because the old policy requires the link target must be created in the
same folder. This does not work well from a configuration standpoint for
3P audio libraries trying to keep their config in src/audio/*. Rather
than enable the policy, lets simply upgrade since 3.13 is widely
available.

With this upgrade we can also remove the two version dependent checks at
the top of our scripts.

Signed-off-by: Curtis Malainey <cujomalainey@chromium.org>
2021-09-10 17:19:29 +01:00
Ben Zhang 91467d0924 cmake: Link TGL Google hotword library
libc and libm are provided by the xcc toolchain.
They are not available from the gcc toolchain.
To build with gcc, libc and libm should be provided
under third_party_libraries.

Signed-off-by: Ben Zhang <benzh@chromium.org>
2021-06-11 13:53:12 +01:00
Marc Herbert 9f8cce1522 Disable __TIME__ and the non-reproducible build counter by default
Makes even CONFIG_DEBUG builds (locally) deterministic by
default: (re)building twice produces the same binaries. Also a partial
fix for incremental builds: running "make" twice in a row now recompiles
fewer files because version.h does not keep changing.

Also makes sure non-debug builds can't use uninitialized strings in some
future security accident.

Fixes:

 ./scripts/checkpatch.pl -g 'aa85e2c0e956c'

ERROR: Use of the '__DATE__' macro makes the build non-deterministic
+		.date = __DATE__,
ERROR: Use of the '__TIME__' macro makes the build non-deterministic
+		.time = __TIME__,

The previous behavior can be restored using any standard CMake
configuration method, example:

  ./scripts/xtensa-build-all.sh apl
  cmake -B build_apl_gcc/ -DBUILD_COUNTERS=1
  make -C build_apl_gcc

https://reproducible-builds.org/

Signed-off-by: Marc Herbert <marc.herbert@intel.com>
2021-06-04 12:00:34 +01:00
Liam Girdwood 2f270ea3c6 cmocka: add support to build mocks on xtensa GCC
Allows the mocks to be built only for xtensa GCC. i.e a build test only.
Running on qemu requires more work.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2021-04-20 15:35:18 +01:00
Liam Girdwood 4d6da60931 cmocka: add support to run mocks on host architecture
Allows the mocks to be quickly run on the host with full access to host
debug and development tooling.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2021-04-20 15:35:18 +01:00
Marc Herbert 288e228c67 cmake: generate the complete .config at configuration time.
Add cmake -DINIT_CONFIG= option that can point at any initial file.

"make clean" does not delete .config any more.

Note reconfiguration does NOT causes recompilation because -imacros
hides the generated .h from CMake's dependency scan. This is not a
regression, that problems exists since -imacros was introduced. At least
it's now possible to "make clean" and rebuild without losing the .config
file.

Fix for #3617

Signed-off-by: Marc Herbert <marc.herbert@intel.com>
2021-03-03 22:33:53 +00:00
Curtis Malainey aee69115ba build: allow host build to be static
oss-fuzz does not support dynamic linking, therefore we need to add
support for static builds

Signed-off-by: Curtis Malainey <cujomalainey@chromium.org>
2020-10-20 09:28:28 +01:00
Marc Herbert ee8a0d8840 CMakeLists.txt: change generated config.h default to autoconfig.h
Change generated config.h default name to autoconfig.h to catch any
remaining #include config.h left in any other PR, branch or any other
concurrent work in progress unknown to this.

Signed-off-by: Marc Herbert <marc.herbert@intel.com>
2020-06-22 13:01:26 +01:00
Marc Herbert d7d86cb609 CMakeLists.txt: make CONFIG_H_PATH a build parameter
No functional change for now.

This is needed because SOF is a CMake sub/"external" project when
building some host tools. We want to switch all projects to "-imacros
config.h" but subprojects cannot inform parents where their files are
located. So make parents able to dictate where config.h is instead.

Signed-off-by: Marc Herbert <marc.herbert@intel.com>
2020-06-22 13:01:26 +01:00
Karol Trzcinski bebdbca87b rimage: Update to version with changed headers location
In new version of rimage software, headers are located in
rimage/src/include/rimage directory to make it easily accessible
from another source code without include path collision.

Signed-off-by: Karol Trzcinski <karolx.trzcinski@linux.intel.com>
2020-05-29 11:15:22 +01:00
Adrian Bonislawski 863eb0a072 cmake: merge BUILD_LIBRARY and CONFIG_LIBRARY
There is only one valid CONFIG_LIBRARY which can be
configured via kconfig

Signed-off-by: Adrian Bonislawski <adrian.bonislawski@linux.intel.com>
2020-05-18 13:25:28 +01:00
Daniel Leung d53778f372 cmake: update git submodules when cmake is run
This adds the necessary bits to update git submodules when
cmake is run, with the option to turn this behavior off if
needed. This is in preparation to use fw.h and manifest.h
from the rimage repo to prevent having two copies of each
file in two different repos. Obviously, the files in
the submodules must exist before building the firmware,
so run git submodule update to checkout the files.

Signed-off-by: Daniel Leung <daniel.leung@intel.com>
2020-05-13 10:16:04 +01:00
Janusz Jankowski 6f7bf63417 cmake: build option for clang static analyzer
Add option for building FW for clang's scan-build.
This static analyzer works out-of-the-box only for compilers
compatible with Clang. For most of embedded compilers
there will be some adjustment needed when BUILD_CLANG_SCAN
is enabled. This flag is not suitable for every build scenario,
it has to be supported for given toolchain / architecture.

Signed-off-by: Janusz Jankowski <janusz.jankowski@linux.intel.com>
2020-03-04 11:02:56 +01:00
Janusz Jankowski 1d92e8e175 sof: use RELATIVE_FILE instead of __FILE__
Use RELATIVE_FILE because __FILE__ makes binary output
dependent on project location.

Signed-off-by: Janusz Jankowski <janusz.jankowski@linux.intel.com>
2019-11-11 12:50:30 +00:00
Janusz Jankowski ea71535a7e cmake: interface library for sof static libraries
Target dependencies have to be added in the same CMakeLists in which
they are declared. CMake interface library is needed to enable adding
static libraries to sof target from subdirectories.

Signed-off-by: Janusz Jankowski <janusz.jankowski@linux.intel.com>
2019-08-09 16:44:50 +02:00
Janusz Jankowski 62b59ce762 cmake: link sof libraries as private
In function target_link_libraries visibility modifiers have to be
consistent, otherwise we will get error while trying to use modifier,
if it wasn't used in root CMakeLists.

Signed-off-by: Janusz Jankowski <janusz.jankowski@linux.intel.com>
2019-08-08 13:54:14 +02:00
Janusz Jankowski c0c858c26a cmake: install: fix new headers paths
This commit updates paths of installed headers to match
new headers folders structure.

Signed-off-by: Janusz Jankowski <janusz.jankowski@linux.intel.com>
2019-06-10 14:50:13 +02:00
Janusz Jankowski c6064624f6 cmake: add spdx license identifier
Signed-off-by: Janusz Jankowski <janusz.jankowski@linux.intel.com>
2019-06-02 16:38:17 +01:00
Janusz Jankowski 5a96276365 cmake: add install target for fw
Signed-off-by: Janusz Jankowski <janusz.jankowski@linux.intel.com>
2019-05-31 16:06:25 +01:00
Janusz Jankowski 2693daf503 cmake: rename BUILD_HOST to BUILD_LIBRARY
Signed-off-by: Janusz Jankowski <janusz.jankowski@linux.intel.com>
2019-05-07 08:49:48 +02:00
Janusz Jankowski ecb73cad2d cmake: install public headers for host
Signed-off-by: Janusz Jankowski <janusz.jankowski@linux.intel.com>
2019-05-07 08:49:48 +02:00
Janusz Jankowski 11e2da2f19 host: build ipc and lib as shared lib
Signed-off-by: Janusz Jankowski <janusz.jankowski@linux.intel.com>
2019-05-07 08:49:48 +02:00
Janusz Jankowski fdda8f6820 host: enable kconfig
Signed-off-by: Janusz Jankowski <janusz.jankowski@linux.intel.com>
2019-05-07 08:49:48 +02:00
Janusz Jankowski dbf43b290a cmake: add git hooks
Signed-off-by: Janusz Jankowski <janusz.jankowski@linux.intel.com>
2019-03-21 15:43:25 +00:00
Janusz Jankowski a4f666527e cmake: add build counter
Signed-off-by: Janusz Jankowski <janusz.jankowski@linux.intel.com>
2019-02-11 11:53:32 +00:00
Janusz Jankowski 46730e89c6 cmake: refactor version.h rule
Signed-off-by: Janusz Jankowski <janusz.jankowski@linux.intel.com>
2019-02-11 11:53:32 +00:00
Janusz Jankowski ba7d875086 cmake: refactor kconfig targets
Signed-off-by: Janusz Jankowski <janusz.jankowski@linux.intel.com>
2019-02-07 21:12:39 +00:00
Janusz Jankowski 8d408eb2e6 cmake: add dist target
Signed-off-by: Janusz Jankowski <janusz.jankowski@linux.intel.com>
2019-02-05 16:44:22 +00:00
Janusz Jankowski dd87462402 cmake: crossplatform cc version get
Signed-off-by: Janusz Jankowski <janusz.jankowski@linux.intel.com>
2019-01-30 08:46:04 +01:00
Janusz Jankowski 25e243b55f cmake: find python3
Signed-off-by: Janusz Jankowski <janusz.jankowski@linux.intel.com>
2019-01-30 08:24:49 +01:00
Janusz Jankowski 4fc3af5e04 cmake: prevent in-source build
Signed-off-by: Janusz Jankowski <janusz.jankowski@linux.intel.com>
2019-01-28 10:43:05 +00:00
Janusz Jankowski 4574fdc15a cmake: add overrideconfig
overrideconfig is custom target that can be used
to set config values from scripts

Signed-off-by: Janusz Jankowski <janusz.jankowski@linux.intel.com>
2019-01-22 15:35:35 +00:00
Janusz Jankowski 82b4da291b cmake: defconfigs support
Signed-off-by: Janusz Jankowski <janusz.jankowski@linux.intel.com>
2019-01-22 15:35:35 +00:00
Janusz Jankowski 9a3dff5475 cmake: add CMakeLists for unit tests
Signed-off-by: Janusz Jankowski <janusz.jankowski@linux.intel.com>
2019-01-22 15:35:35 +00:00
Janusz Jankowski 7680a7b0dc cmake: add testbench host build
Signed-off-by: Janusz Jankowski <janusz.jankowski@linux.intel.com>
2019-01-22 15:35:35 +00:00
Janusz Jankowski e0ba98d21a cmake: add CMakeLists for firmware build
Signed-off-by: Janusz Jankowski <janusz.jankowski@linux.intel.com>
2019-01-22 15:35:35 +00:00