Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 0 additions & 63 deletions .github/workflows/installer.yml

This file was deleted.

64 changes: 47 additions & 17 deletions .github/workflows/testbench.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,33 +29,63 @@ on:
workflow_call:

jobs:

build-run:
runs-on: ubuntu-22.04
build-and-test:
runs-on: ubuntu-24.10

steps:
- uses: actions/checkout@v4
with: {fetch-depth: 0, filter: 'tree:0'}

- name: docker
run: docker pull thesofproject/sof && docker tag thesofproject/sof sof
- name: Checkout SOF repository (PR source)
uses: actions/checkout@v4
with:
path: sof

- name: apt get
run: sudo apt-get update &&
sudo apt-get -y install valgrind alsa-utils libasound2-dev ninja-build
octave octave-signal
sudo apt-get -y install valgrind ninja-build
octave octave-signal automake autoconf libtool
gettext linux-headers-6.11.0-8

- name: Build Alsa-lib
run: |
cd ${GITHUB_WORKSPACE}
git clone https://github.com/thesofproject/alsa-lib.git
cd alsa-lib
git checkout df8f1cc1ec9d9ee15be5e2c23ad25b9389fd8766 -b build
./gitcompile --prefix=${GITHUB_WORKSPACE}/tools
make install

- name: Build Alsa-utils
run: |
cd ${GITHUB_WORKSPACE}
git clone https://github.com/thesofproject/alsa-utils.git
cd alsa-utils
git checkout 0ffa105942a06cdfa98e5918b8dc82e3cac12792 -b build
./gitcompile --prefix=${GITHUB_WORKSPACE}/tools \
--with-alsa-prefix=${GITHUB_WORKSPACE}/tools \
--with-alsa-inc-prefix=${GITHUB_WORKSPACE}/tools/include \
--with-sysroot=${GITHUB_WORKSPACE}/tools \
--with-udev-rules-dir=${GITHUB_WORKSPACE}/tools \
PKG_CONFIG_PATH=${GITHUB_WORKSPACE}/tools \
LDFLAGS=-L${GITHUB_WORKSPACE}/tools/lib \
--disable-old-symbols \
--enable-alsatopology \
--with-asound-state-dir=${GITHUB_WORKSPACE}/tools/var/lib/alsa \
--with-systemdsystemunitdir=${GITHUB_WORKSPACE}/tools/lib/systemd/system
make install

# testbench needs some topologies.
- name: build test topologies
run: CMAKE_BUILD_TYPE=Release ./scripts/docker-run.sh
./scripts/build-tools.sh -Y ||
run: |
CMAKE_BUILD_TYPE=Release ./sof/scripts/build-tools.sh -Y ||
VERBOSE=1 NO_PROCESSORS=1 USE_XARGS=no
CMAKE_BUILD_TYPE=Release ./scripts/docker-run.sh
./scripts/build-tools.sh -Y
CMAKE_BUILD_TYPE=Release ./sof/scripts/build-tools.sh -Y

# build testbench
- name: build testbench
run: ./scripts/rebuild-testbench.sh ||
./scripts/rebuild-testbench.sh -j 1
run: |
./sof/scripts/rebuild-testbench.sh ||
./sof/scripts/rebuild-testbench.sh -j 1

# run testbench
- name: run testbench
run: ./scripts/host-testbench.sh
run: |
./sof/scripts/host-testbench.sh
127 changes: 127 additions & 0 deletions scripts/build-alsa-tools.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
#!/bin/bash
# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2025 Intel Corporation. All rights reserved.

# fail immediately on any errors
set -e

# Array of ALSA Git repository URLs. Add or remove repositories as needed.
declare -a REPOS=(
"https://github.com/thesofproject/alsa-lib.git"
"https://github.com/thesofproject/alsa-utils.git"
# Add more repositories here...
)

# Commit ID to check for (optional). If specified, the script will update
# the repository if this commit ID is not found. Leave empty to skip.
# This array order must align with REPO array above.
declare -a COMMIT_ID=(
"df8f1cc1ec9d9ee15be5e2c23ad25b9389fd8766"
"09550cd393b1a7d307ee6f26637b1ed7bd275e38"
# Add more IDs here...
)

# Directory where repositories will be cloned/updated.
if [[ -z "$SOF_WORKSPACE" ]]; then
# Environment variable is empty or unset so use default
BASE_DIR="$HOME/work/sof"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this should be

BASE_DIR="$HOME/work"

For the default case, the BASE_DIR should point to parent directory of sof as this is the directory assumed in tools/topology/CMakeLists.txt rules:

set(SOF_ALSA_TOOLS_DIR "${SOF_ROOT_SOURCE_DIRECTORY}/../tools/bin") 

So BASE_DIR should match "${SOF_ROOT_SOURCE_DIRECTORY}".

This is causing failuress e.g. when we try to use "build-tools.sh -A" in docker in github (and might be a reason why @lgirdwood you "open-coded" the build recipe for github testbench workflow in this PR).

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is correct. We are cloning into the ~/work/sof workspace directory with contains the ~/work/sof/sof FW directory. e.g. my SOF workspace directory looks like

~/work/sof$ ls
alsa-lib      build-sof-staging  LICENSE.workspace  ruy                 sof-docs      zephyr
alsa-utils    flatbuffers        modules            sof                 sof-test
build-mtl     gemmlowp           nnlib-hifi4        sof-bin             tflite-micro
build-rimage  keys               README.md          sof.code-workspace  tools

The workspace should include all ingredients used to build FW, topologies, tooling i.e. everything a developer needs to create a new module and deploy it. I'll fix the other makefiles.

Copy link
Collaborator

@kv2019i kv2019i May 2, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@lgirdwood Right so "$ZEPHYR_WORKSPACE=work/sof" is terms of
https://thesofproject.github.io/latest/getting_started/build-guide/build-with-zephyr.html

Ok I didn't realize that, I never use "sof" as the workspace directory name, but indeed then the problem is elsewhere setting the workspace path.

UPDATE2: ahaa, the build-from SOF source instructions do have "work/sof/sof". https://thesofproject.github.io/latest/getting_started/build-guide/build-from-scratch.html#step-1-set-up-the-workspace-directory . so then this is indeed aligned!
UPDATE: our docker images have used workspace path "/home/sof/work" with sof git checked out in "/home/sof/work/sof". This just means the workspace has to be manually be set with "--env SOF_WORKSPACE=/home/sof/work/".

else
# Environment variable exists and has a value
BASE_DIR="$SOF_WORKSPACE"
fi

# Arguments to pass to ./configure for each repository. Add or remove
declare -a CONFIGURE_ARGS=(
"--prefix=${BASE_DIR}/tools"
"--prefix=${BASE_DIR}/tools \
--with-alsa-prefix=${BASE_DIR}/tools \
--with-alsa-inc-prefix=${BASE_DIR}/tools/include \
--with-sysroot=${BASE_DIR}/tools \
--with-udev-rules-dir=${BASE_DIR}/tools \
PKG_CONFIG_PATH=${BASE_DIR}/tools \
LDFLAGS=-L${BASE_DIR}/tools/lib \
--with-asound-state-dir=${BASE_DIR}/tools/var/lib/alsa \
--with-systemdsystemunitdir=${BASE_DIR}/tools/lib/systemd/system"
)

# Arguments to pass to make for each repository. Add or remove arguments as needed.
declare -a TARGET_ARGS=(
"--disable-old-symbols"
"--enable-alsatopology"
)

# Function to check if a commit ID exists in a repository
check_commit() {
local repo_dir="$1"
local commit_id="$2"

if [ -z "$commit_id" ]; then
return 0 # Skip check if no commit ID is provided
fi

if ! git -C "$repo_dir" rev-parse --quiet --verify "$commit_id" >/dev/null 2>&1; then
return 1 # Commit ID not found
else
return 0 # Commit ID found
fi
}


# Function to update the repository
update_repo() {
local repo_dir="$1"
echo "Updating repository: $repo_dir"
git -C "$repo_dir" fetch --all
git -C "$repo_dir" pull
}

# Function to build and install the repository
build_and_install() {
local repo_dir="$1"
local configure_args="$2"
local target_args="$3"

echo "Building and installing: $repo_dir $configure_args $target_args"

if [ ! -f "$repo_dir/gitcompile" ]; then
echo "Error: gitcompile not found in $repo_dir" >&2
exit 1
fi

# if Makefile exists then we can just run make
if [ ! -f "$repo_dir/Makefile" ]; then
(cd "$repo_dir" && ./gitcompile $configure_args $target_args) || \
{ echo "configure failed in $repo_dir"; exit 1; }
else
(cd "$repo_dir" && make -j) || { echo "make failed in $repo_dir"; exit 1; }
fi

(cd "$repo_dir" && make install) || { echo "make install failed in $repo_dir"; exit 1; }

echo "Build and installation complete for $repo_dir"
}

# Main script logic
mkdir -p "$BASE_DIR"

for ((i = 0; i < ${#REPOS[@]}; i++)); do
echo "Counter: $i, Value: ${REPOS[i]}"
repo_url=${REPOS[i]}

repo_name=$(basename "$repo_url" .git) # Extract repo name
repo_dir="$BASE_DIR/$repo_name"

if [ ! -d "$repo_dir" ]; then
echo "Cloning repository: $repo_url"
git clone "$repo_url" "$repo_dir" || { echo "git clone failed for $repo_url"; exit 1; }
elif ! check_commit "$repo_dir" "${COMMIT_ID[i]}"; then
update_repo "$repo_dir"
else
echo "Repository $repo_name is up to date."
fi

build_and_install "$repo_dir" "${CONFIGURE_ARGS[i]}"

done

echo "All repositories processed."
11 changes: 9 additions & 2 deletions scripts/build-tools.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Attention: the list of selected shortcuts below is _not_ exhaustive. To
build _everything_ don't select any particular target; this will build
CMake's default target "ALL".

usage: $0 [-c|-f|-h|-l|-p|-t|-T|-X|-Y]
usage: $0 [-c|-f|-h|-l|-p|-t|-T|-X|-Y|-A]
-h Display help

-c Rebuild ctl/
Expand All @@ -26,6 +26,7 @@ usage: $0 [-c|-f|-h|-l|-p|-t|-T|-X|-Y]
-X Rebuild topology1 only
-Y Rebuild topology2 only
-t Rebuild test/topology/ (or tools/test/topology/tplg-build.sh directly)
-A Clone and rebuild local ALSA lib and utils.

-C No build, only CMake re-configuration. Shows CMake targets.
EOFUSAGE
Expand Down Expand Up @@ -106,6 +107,7 @@ main()
fi

DO_BUILD_ctl=false
DO_BUILD_alsa=false
DO_BUILD_logger=false
DO_BUILD_probes=false
DO_BUILD_tests=false
Expand All @@ -118,7 +120,7 @@ main()

# eval is a sometimes necessary evil
# shellcheck disable=SC2034
while getopts "cfhlptTCXY" OPTION; do
while getopts "cfhlptTCXYA" OPTION; do
case "$OPTION" in
c) DO_BUILD_ctl=true ;;
l) DO_BUILD_logger=true ;;
Expand All @@ -128,12 +130,17 @@ main()
X) DO_BUILD_topologies1=true ;;
Y) DO_BUILD_topologies2=true ;;
C) CMAKE_ONLY=true ;;
A) DO_BUILD_alsa=true ;;
h) print_usage; exit 1;;
*) print_usage; exit 1;;
esac
done
shift "$((OPTIND - 1))"

if "$DO_BUILD_alsa"; then
$SOF_TOP/scripts/build-alsa-tools.sh
fi

if "$CMAKE_ONLY"; then
reconfigure_build
print_build_info
Expand Down
4 changes: 4 additions & 0 deletions tools/ctl/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ add_executable(sof-ctl
ctl.c
)

target_link_directories(sof-ctl BEFORE
PRIVATE "${SOF_ROOT_SOURCE_DIRECTORY}/../tools/lib")

target_link_libraries(sof-ctl PRIVATE
"-lasound"
)
Expand All @@ -13,6 +16,7 @@ target_compile_options(sof-ctl PRIVATE
)

target_include_directories(sof-ctl PRIVATE
"${SOF_ROOT_SOURCE_DIRECTORY}/../tools/include"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tested this and works in my local environment, but with @cgturner1 's test docker image (thesofproject/sof:20250410_no-alsa) with no system ALSA installed, the build fails as linkage still uses system libasound:


: && /usr/bin/cc -g  ctl/CMakeFiles/sof-ctl.dir/ctl.c.o -o ctl/sof-ctl  -lasound && :
/usr/bin/ld: cannot find -lasound: No such file or directory
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kv2019i now fixed

"${SOF_ROOT_SOURCE_DIRECTORY}/src/include"
"${SOF_ROOT_SOURCE_DIRECTORY}"
)
Expand Down
15 changes: 8 additions & 7 deletions tools/topology/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
set(SOF_TOPOLOGY_BINARY_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")

set(SOF_ALSA_TOOLS_DIR "${SOF_ROOT_SOURCE_DIRECTORY}/../tools/bin")
set(ALSATPLG_CMD "${SOF_ALSA_TOOLS_DIR}/alsatplg")

function(alsatplg_version OUT_STATUS OUT_VERSION)
execute_process(COMMAND alsatplg --version
execute_process(COMMAND ${ALSATPLG_CMD} --version
RESULT_VARIABLE status
OUTPUT_VARIABLE stdout
OUTPUT_STRIP_TRAILING_WHITESPACE)
message(DEBUG "alsatplg --version: status=${status}, output=${stdout}")
message(DEBUG "${ALSATPLG_CMD} --version: status=${status}, output=${stdout}")

set(${OUT_STATUS} "${status}" PARENT_SCOPE)

# Some error messages have already been printed on stderr
if(NOT status EQUAL 0)
message(WARNING "alsatplg --version returned status: ${status},
message(WARNING "${ALSATPLG_CMD} --version returned status: ${status},
${stdout}")
return()
endif()
Expand All @@ -32,7 +33,7 @@ endfunction()
# Longer story in #5192.
alsatplg_version(STATUS ALSATPLG_VERSION_NUMBER)
if(NOT STATUS EQUAL 0)
message(WARNING "alsatplg failed: ${STATUS}; all topologies skipped")
message(WARNING "${ALSATPLG_CMD} failed: ${STATUS}; all topologies skipped")
return()
else()
if(${ALSATPLG_VERSION_NUMBER} VERSION_LESS "1.2.5")
Expand Down Expand Up @@ -67,7 +68,7 @@ macro(add_alsatplg_command)
# permissions are hardcoded and only the user can read
# the -o(utput) file.
# See bug https://github.com/alsa-project/alsa-utils/issues/126
COMMAND alsatplg \$\${VERBOSE:+-v 1} -c ${ARGV0} -o ${ARGV1}
COMMAND ${ALSATPLG_CMD} \$\${VERBOSE:+-v 1} -c ${ARGV0} -o ${ARGV1}
USES_TERMINAL
)
endmacro()
Expand All @@ -94,7 +95,7 @@ macro(add_alsatplg2_command conf_header conf_target input_name output_name inclu
COMMAND cat ${conf_header} ${input_name}.conf > ${output_name}.conf

# -p to pre-process Topology2.0 conf file
COMMAND ALSA_CONFIG_DIR=${CMAKE_SOURCE_DIR}/topology/topology2 alsatplg \$\${VERBOSE:+-v 1}
COMMAND ALSA_CONFIG_DIR=${CMAKE_SOURCE_DIR}/topology/topology2 ${ALSATPLG_CMD} \$\${VERBOSE:+-v 1}
-I ${include_path} -D "'${defines}'" -p -c ${output_name}.conf -o ${output_name}.tplg
USES_TERMINAL
)
Expand Down
Loading