diff --git a/check_cc.bat b/check_cc.bat index 79bbf6b7..77ea2e71 100644 --- a/check_cc.bat +++ b/check_cc.bat @@ -19,7 +19,7 @@ if not exist "%MSYS2_PATH%\msys2_shell.cmd" ( goto finish ) -echo [INFO] Checking the UCRT64 C compiler... +echo [INFO] Checking the UCRT64 C compiler and Opus build... call "%MSYS2_PATH%\msys2_shell.cmd" -ucrt64 -here -defterm -no-start -c "bash ./check_cc.sh" >> "%PROBE_LOG%" 2>&1 set "PROBE_RESULT=%ERRORLEVEL%" @@ -28,7 +28,7 @@ set "PROBE_RESULT=%ERRORLEVEL%" type "%PROBE_LOG%" echo. echo [INFO] Log: "%PROBE_LOG%" -if not "%PROBE_RESULT%"=="0" echo [ERROR] Compiler check failed. See the log above. +if not "%PROBE_RESULT%"=="0" echo [ERROR] Compiler or Opus check failed. See the log above. if /i not "%~1"=="--no-pause" pause popd exit /b %PROBE_RESULT% diff --git a/check_cc.sh b/check_cc.sh index c3e10dde..32d1c86f 100644 --- a/check_cc.sh +++ b/check_cc.sh @@ -1,7 +1,7 @@ #!/bin/bash set -uo pipefail -# Проверяем компилятор отдельно от CMake и исходников проекта. +# Проверяем базовую компиляцию, затем Opus отдельно и через существующую CMake-сборку. probe_cc="${UTUN_PROBE_CC:-/ucrt64/bin/cc.exe}" printf '[INFO] MSYSTEM=%s\n[INFO] PATH=%s\n[INFO] Compiler=%s\n' "${MSYSTEM:-unset}" "$PATH" "$probe_cc" if [ ! -x "$probe_cc" ]; then @@ -41,3 +41,30 @@ probe_step 'Compile' "$probe_cc" -v -std=c99 -c "$probe_dir/probe.c" -o "$probe_ probe_step 'Link' "$probe_cc" -v "$probe_dir/probe.o" -o "$probe_dir/probe.exe" || exit $? probe_step 'Run' "$probe_dir/probe.exe" || exit $? printf '\n[SUCCESS] Compile, link and run completed.\n' + +probe_root=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd) || { + printf '[ERROR] Cannot locate the repository directory.\n' + exit 1 +} +probe_opus="$probe_root/lib/libopus" +probe_includes=() +for probe_include in '' include celt silk silk/float silk/fixed src; do + probe_includes+=("-I$probe_opus/$probe_include") +done +probe_step 'Compile Opus laplace.c' "$probe_cc" -v -DOPUS_BUILD -DUSE_ALLOCA -DVAR_ARRAYS "${probe_includes[@]}" \ + -O3 -DNDEBUG -std=gnu99 -MD -MF "$probe_dir/laplace.d" -c "$probe_opus/celt/laplace.c" -o "$probe_dir/laplace.o" || exit $? + +probe_build="$probe_root/tools/chatgui/build" +if [ ! -f "$probe_build/CMakeCache.txt" ]; then + printf '[ERROR] Existing ChatGUI build cache not found: %s/CMakeCache.txt\n' "$probe_build" + exit 1 +fi +if ! command -v cmake >/dev/null 2>&1; then + printf '[ERROR] cmake is not available in PATH.\n' + exit 1 +fi +probe_step 'CMake cache settings' sed -n -E \ + '/^CMAKE_(C_COMPILER|C_COMPILER_LAUNCHER|C_FLAGS(_(DEBUG|RELEASE|MINSIZEREL|RELWITHDEBINFO))?|MAKE_PROGRAM|GENERATOR|BUILD_TYPE):/p' \ + "$probe_build/CMakeCache.txt" || exit $? +probe_step 'Build Opus with CMake' cmake --build "$probe_build" --target opus_internal --parallel 1 --verbose || exit $? +printf '\n[SUCCESS] Standalone Opus compilation and CMake Opus build completed.\n'