mirror of
https://github.com/apache/nuttx-apps.git
synced 2026-08-02 12:49:03 +00:00
The bundled encoder was checked out from lame's trunk with no revision, so every build took whatever trunk happened to be at that moment. lame's trunk grows vector tiers over time, and each one adds sources that the two build files have to name: r6655 offered AVX2 to the vector routines on 2026-07-25, and r6718 and r6720 added an AVX-512 tier on 2026-07-30. The AVX-512 sources were never listed, so sim:alsa stopped linking on x86 hosts: takehiro.c:332: undefined reference to `quantize_lines_xrpow_avx512' takehiro.c:533: undefined reference to `ix_max_avx512' takehiro.c:569: undefined reference to `count_bit_esc_avx512' vbrquantize.c:261: undefined reference to `calc_sfb_noise_x34_avx512' Pin the checkout to r6720 through a LAME_VERSION variable, as the rest of apps/ pins its third-party sources, and list the three AVX-512 files that revision provides. The pin is what keeps the two in step: the source list is maintained by hand, so it can only be correct for a known revision. The checkout is also only performed when lame/configure is absent and is never updated afterwards, so before this an unpinned tree was frozen at whatever trunk was on the day it was first built. Anyone who checked out before 2026-07-30 still links and cannot reproduce the failure, which is why this surfaced only in CI. Makefile named just vector/xmm_quantize_sub.c and none of the other vector sources, so a Make build on an x86 host fails the same way with a longer list of symbols, from SSE2 upwards. CI builds sim:alsa through CMake only, so that half was latent rather than visible. Both files now list the same nine sources under the same host condition. Signed-off-by: Marco Casaroli <marco.casaroli@gmail.com> Assisted-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
139 lines
4.8 KiB
CMake
139 lines
4.8 KiB
CMake
# ##############################################################################
|
|
# apps/audioutils/lame/CMakeLists.txt
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
# Licensed to the Apache Software Foundation (ASF) under one or more contributor
|
|
# license agreements. See the NOTICE file distributed with this work for
|
|
# additional information regarding copyright ownership. The ASF licenses this
|
|
# file to you under the Apache License, Version 2.0 (the "License"); you may not
|
|
# use this file except in compliance with the License. You may obtain a copy of
|
|
# the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations under
|
|
# the License.
|
|
#
|
|
# ##############################################################################
|
|
|
|
if(CONFIG_AUDIOUTILS_LAME)
|
|
|
|
# Determine destination path
|
|
if(NOT DEFINED DST_PATH)
|
|
set(DST_PATH ${CMAKE_CURRENT_BINARY_DIR}/lame)
|
|
else()
|
|
set(DST_PATH ${DST_PATH})
|
|
endif()
|
|
|
|
# Set configuration commands
|
|
set(CFG_CMDS "")
|
|
if(NOT "${CONFIG_ARCH}" STREQUAL "sim")
|
|
list(APPEND CFG_CMDS "--host=${CONFIG_ARCH}")
|
|
list(APPEND CFG_CMDS "--cross-prefix=${CROSSDEV}")
|
|
endif()
|
|
|
|
# The revision to check out. See the comment in Makefile: an unpinned
|
|
# checkout stops linking on the day lame's trunk grows its next vector tier.
|
|
# Raise this deliberately, together with the vector source list below.
|
|
|
|
if(NOT DEFINED LAME_VERSION)
|
|
set(LAME_VERSION 6720)
|
|
endif()
|
|
|
|
# # Download lame if no lame/configure found
|
|
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/lame/configure")
|
|
execute_process(
|
|
COMMAND "svn" "checkout" "-r" "${LAME_VERSION}"
|
|
"https://svn.code.sf.net/p/lame/svn/trunk/lame" "lame"
|
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
|
|
endif()
|
|
|
|
# Set source path
|
|
set(SRC_PATH "${CMAKE_CURRENT_SOURCE_DIR}/lame")
|
|
|
|
# Add compiler flags
|
|
set(CFLAGS -DHAVE_CONFIG_H -Dfast_log2=lame_fast_log2)
|
|
set(CFLAGS
|
|
${CFLAGS}
|
|
-Wno-address
|
|
-Wno-array-parameter
|
|
-Wno-builtin-declaration-mismatch
|
|
-Wno-incompatible-pointer-types
|
|
-Wno-implicit-function-declaration
|
|
-Wno-shadow
|
|
-Wno-stringop-overflow
|
|
-Wno-unused-variable
|
|
-Wno-unused-but-set-variable
|
|
-msse)
|
|
|
|
set(INCDIR ${INCDIR_PREFIX}${DST_PATH} ${INCDIR_PREFIX}${SRC_PATH}/include
|
|
${INCDIR_PREFIX}${SRC_PATH}/libmp3lame)
|
|
|
|
# Set source files
|
|
set(CSRCS
|
|
"${SRC_PATH}/libmp3lame/bitstream.c"
|
|
"${SRC_PATH}/libmp3lame/encoder.c"
|
|
"${SRC_PATH}/libmp3lame/fft.c"
|
|
"${SRC_PATH}/libmp3lame/gain_analysis.c"
|
|
"${SRC_PATH}/libmp3lame/id3tag.c"
|
|
"${SRC_PATH}/libmp3lame/lame.c"
|
|
"${SRC_PATH}/libmp3lame/newmdct.c"
|
|
"${SRC_PATH}/libmp3lame/psymodel.c"
|
|
"${SRC_PATH}/libmp3lame/quantize.c"
|
|
"${SRC_PATH}/libmp3lame/quantize_pvt.c"
|
|
"${SRC_PATH}/libmp3lame/set_get.c"
|
|
"${SRC_PATH}/libmp3lame/vbrquantize.c"
|
|
"${SRC_PATH}/libmp3lame/reservoir.c"
|
|
"${SRC_PATH}/libmp3lame/tables.c"
|
|
"${SRC_PATH}/libmp3lame/takehiro.c"
|
|
"${SRC_PATH}/libmp3lame/util.c"
|
|
"${SRC_PATH}/libmp3lame/VbrTag.c"
|
|
"${SRC_PATH}/libmp3lame/version.c"
|
|
"${SRC_PATH}/libmp3lame/presets.c")
|
|
|
|
if(CONFIG_HOST_X86 OR CONFIG_HOST_X86_64)
|
|
list(
|
|
APPEND
|
|
CSRCS
|
|
"${SRC_PATH}/libmp3lame/vector/xmm_quantize_sub.c"
|
|
"${SRC_PATH}/libmp3lame/vector/xmm_choose_table.c"
|
|
"${SRC_PATH}/libmp3lame/vector/xmm_quantize_lines.c"
|
|
"${SRC_PATH}/libmp3lame/vector/xmm_calc_sfb_noise.c"
|
|
"${SRC_PATH}/libmp3lame/vector/avx2_choose_table.c"
|
|
"${SRC_PATH}/libmp3lame/vector/avx2_quantize_lines.c"
|
|
"${SRC_PATH}/libmp3lame/vector/avx512_choose_table.c"
|
|
"${SRC_PATH}/libmp3lame/vector/avx512_quantize_lines.c"
|
|
"${SRC_PATH}/libmp3lame/vector/avx512_calc_sfb_noise.c")
|
|
endif()
|
|
|
|
# Add custom target to generate config_h
|
|
set(CONFIG_H_FILE "${CMAKE_CURRENT_SOURCE_DIR}/lame/configure")
|
|
set(CONFIG_OPTIONS
|
|
--disable-cpml
|
|
--disable-decoder
|
|
--disable-efence
|
|
--disable-frontend
|
|
--disable-mp3x
|
|
--disable-gtktest
|
|
--disable-ipv6
|
|
--disable-rpath
|
|
--enable-static
|
|
${CFG_CMDS})
|
|
add_custom_command(
|
|
OUTPUT "${DST_PATH}/config.h"
|
|
COMMAND ${CONFIG_H_FILE} ${CONFIG_OPTIONS}
|
|
WORKING_DIRECTORY "${DST_PATH}"
|
|
COMMENT "Generating config.h file")
|
|
add_custom_target(generate_config_h DEPENDS "${DST_PATH}/config.h")
|
|
|
|
nuttx_add_library(libmp3lame STATIC)
|
|
add_dependencies(libmp3lame generate_config_h)
|
|
target_sources(libmp3lame PRIVATE ${CSRCS})
|
|
target_include_directories(libmp3lame PRIVATE ${INCDIR})
|
|
target_compile_options(libmp3lame PRIVATE ${CFLAGS})
|
|
|
|
endif()
|