To test whether CMake configuration can be skipped, look for either a
ninja.build or Makefile.
An existing build directory is NOT proof that CMake configuration
succeeded. When CMake configuration failed, trying to build again fails
with a super confusing "Makefile not found" error message.
Signed-off-by: Marc Herbert <marc.herbert@intel.com>
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>
ADL and ADL-S binaries share FW build configuration with TGL and TGL-H.
See also issue #3491 and commit 15e03fd297 ("config: intel: use PCH
name for tigerlake") and the corresponding review in PR #3451.
Signed-off-by: Marc Herbert <marc.herbert@intel.com>
In other words:
├── intel-signed
│ ├── sof-cfl.ri -> sof-cnl.ri
│ ├── sof-cml.ri -> sof-cnl.ri
│ ├── sof-glk.ri -> sof-apl.ri
Doing this manually is time-consuming and error-prone.
Not for ehl because it has a different key.
Signed-off-by: Marc Herbert <marc.herbert@intel.com>
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>
After commit 5ca0e9bba3 ("topology: Use generic name for 8qxp/8qm")
installer test is broken as we also need to update the i.MX topology
with the new naming.
So, fix this by replacing imx8qxp naming with imx8. But while we are at
it choose a better (more relevant) random topology, sof-imx8-wm8960.tplg
instead of sof-imx8-nodec.tplg.
Signed-off-by: Daniel Baluta <daniel.baluta@nxp.com>
Building "sof" does not rebuild the .ri firmware file. Switch to the
"bin" target which is what ./scripts/xtensa-build-all.sh builds.
Fixes: 479809663e ("installer: (re)build firmware, topologies and user
space tools)
Signed-off-by: Marc Herbert <marc.herbert@intel.com>
Gets the length of a no-op "make topologies" from 380 down to 140
lines. From 300 to 200 for one "make signed" platform.
Ninja is more quiet by default.
Signed-off-by: Marc Herbert <marc.herbert@intel.com>
Fixes:
rm -rf staging ; make aliases
ln: failed to create symbolic link 'staging/sof/sof-glk.ri': No such
file or directory
This also happens on a brand new checkout when building in parallel with
make -j because symbolic links don't have any dependency. Example at:
https://github.com/marc-hb/sof/runs/2036288013
Signed-off-by: Marc Herbert <marc.herbert@intel.com>
XTENSA_TOOLS_ROOT is required by xtensa-build-all.sh anyway, so don't
force the user to say twice that they want xcc.
Signed-off-by: Marc Herbert <marc.herbert@intel.com>
In the future we should probably extract the array of XTENSA_SYSTEM
values out of xtensa-build-all.sh
Signed-off-by: Marc Herbert <marc.herbert@intel.com>
One-touch "make -C installer rsync" combines fast incremental build,
staging and deploy in one command.
Signed-off-by: Marc Herbert <marc.herbert@intel.com>
The tools build is independent from the firmware build. The next step is
to invoke it from here if needed.
Signed-off-by: Marc Herbert <marc.herbert@intel.com>
More specifically replacing sof-bin/go.sh and sof-bin/publish.sh and
also sof/scripts/sof-target-install.sh eventually.
"make install" code has always belonged to source repositories because
developers need to install too and we want everyone to use the same
installers. It's also easier to have all the information in a single
place.
Once the layout in sof-bin mirrors the /lib/firmware/intel layout
exactly, sof-bin does not need any installation code any more.
Mixing source and binaries in the same repo is also a "code smell",
notably because it forces branching them together.
Using a higher level build tool for installation instead of plain
scripts has a few benefits:
- Multiple entry points: easy to invoke (and test) any part of the
installer individually
- ... while invoking dependencies automatically.
- Other features "for free" like:
- errexit
- error messages like "dunno how to build file x"
- commands are logged by default
- Also gets rid of most of the large code duplication in go.sh and
publish.sh, so:
- Enabling or disabling a platform is a 3-character change
- Allows platform selection in local config file (even just one platform)
- Much harder to add inconsistencies
- Much easier to review correctness, for instance no need to
scrutinize every line to see which platforms are aliased.
Signed-off-by: Marc Herbert <marc.herbert@intel.com>