diff --git a/.devcontainer/install-deps.sh b/.devcontainer/install-deps.sh index 943ee3a3..6f8d4c4e 100755 --- a/.devcontainer/install-deps.sh +++ b/.devcontainer/install-deps.sh @@ -5,7 +5,7 @@ function sudo() { if [ "$UID" -eq 0 ]; then "$@" else - ${SUDO_PATH} "$@" + ${SUDO_PATH} -E "$@" fi } @@ -42,8 +42,15 @@ AUDIO_DEPS_SCRIPT="${PROJECT_ROOT}/install_audio_deps.sh" if [ -f "${AUDIO_DEPS_SCRIPT}" ]; then echo "Running audio dependencies installation..." - bash "${AUDIO_DEPS_SCRIPT}" + sudo bash "${AUDIO_DEPS_SCRIPT}" echo "Audio dependencies installation completed." + if [ -d "/opt/jetkvm-audio-libs" ]; then + echo "Audio libraries installed in /opt/jetkvm-audio-libs" + sudo chmod -R o+rw /opt/jetkvm-audio-libs + else + echo "Error: /opt/jetkvm-audio-libs directory not found after installation." + exit 1 + fi else echo "Warning: Audio dependencies script not found at ${AUDIO_DEPS_SCRIPT}" echo "Skipping audio dependencies installation." diff --git a/Makefile b/Makefile index 8bbf90fb..43be6bc9 100644 --- a/Makefile +++ b/Makefile @@ -40,8 +40,8 @@ export GOARCH := arm export GOARM := 7 export CC := $(BUILDKIT_PATH)/bin/$(BUILDKIT_FLAVOR)-gcc export CGO_ENABLED := 1 -export CGO_CFLAGS := $(OPTIM_CFLAGS) -I$(AUDIO_LIBS_DIR)/alsa-lib-$(ALSA_VERSION)/include -I$(AUDIO_LIBS_DIR)/opus-$(OPUS_VERSION)/include -I$(AUDIO_LIBS_DIR)/opus-$(OPUS_VERSION)/celt -export CGO_LDFLAGS := -L$(AUDIO_LIBS_DIR)/alsa-lib-$(ALSA_VERSION)/src/.libs -lasound -L$(AUDIO_LIBS_DIR)/opus-$(OPUS_VERSION)/.libs -lopus -lm -ldl -static +export CGO_CFLAGS := $(OPTIM_CFLAGS) -I$(BUILDKIT_PATH)/$(BUILDKIT_FLAVOR)/include -I$(BUILDKIT_PATH)/$(BUILDKIT_FLAVOR)/sysroot/usr/include -I$(AUDIO_LIBS_DIR)/alsa-lib-$(ALSA_VERSION)/include -I$(AUDIO_LIBS_DIR)/opus-$(OPUS_VERSION)/include -I$(AUDIO_LIBS_DIR)/opus-$(OPUS_VERSION)/celt +export CGO_LDFLAGS := -L$(BUILDKIT_PATH)/$(BUILDKIT_FLAVOR)/lib -L$(BUILDKIT_PATH)/$(BUILDKIT_FLAVOR)/sysroot/usr/lib -lrockit -lrockchip_mpp -lrga -lpthread -L$(AUDIO_LIBS_DIR)/alsa-lib-$(ALSA_VERSION)/src/.libs -lasound -L$(AUDIO_LIBS_DIR)/opus-$(OPUS_VERSION)/.libs -lopus -lm -ldl PROMETHEUS_TAG := github.com/prometheus/common/version KVM_PKG_NAME := github.com/jetkvm/kvm diff --git a/internal/audio/cgo_audio.go b/internal/audio/cgo_audio.go index 3134b5fc..0ace0c62 100644 --- a/internal/audio/cgo_audio.go +++ b/internal/audio/cgo_audio.go @@ -17,9 +17,6 @@ import ( ) /* -#cgo CFLAGS: -I/opt/jetkvm-audio-libs/alsa-lib-$ALSA_VERSION/include -I/opt/jetkvm-audio-libs/opus-$OPUS_VERSION/include -I/opt/jetkvm-audio-libs/opus-$OPUS_VERSION/celt -#cgo LDFLAGS: -L/opt/jetkvm-audio-libs/alsa-lib-$ALSA_VERSION/src/.libs -lasound -L/opt/jetkvm-audio-libs/opus-$OPUS_VERSION/.libs -lopus -lm -ldl -static - #include "c/audio.c" */ import "C" diff --git a/scripts/build_cgo.sh b/scripts/build_cgo.sh index 87577e39..057ce42d 100755 --- a/scripts/build_cgo.sh +++ b/scripts/build_cgo.sh @@ -15,27 +15,52 @@ if [ "$CLEAN_ALL" -eq 1 ]; then fi TMP_DIR=$(mktemp -d) +# Ensure temp directory persists and is cleaned up properly +# Also handle SIGINT (CTRL+C) and SIGTERM - kill all child processes +trap 'pkill -P $$; rm -rf "${TMP_DIR}"; exit 1' INT TERM pushd "${CGO_PATH}" > /dev/null msg_info "▶ Generating UI index" ./ui_index.gen.sh msg_info "▶ Building native library" + +# Fix clock skew issues by resetting file timestamps +find "${CGO_PATH}" -type f -exec touch {} + + +# Only clean CMake cache if the build configuration files don't exist +# This prevents re-running expensive compiler detection on every build +if [ ! -f "${BUILD_DIR}/CMakeCache.txt" ]; then + msg_info "First build - CMake will configure the project" +fi + VERBOSE=1 cmake -B "${BUILD_DIR}" \ -DCMAKE_SYSTEM_PROCESSOR=armv7l \ -DCMAKE_SYSTEM_NAME=Linux \ -DCMAKE_CROSSCOMPILING=1 \ -DCMAKE_TOOLCHAIN_FILE=$CMAKE_TOOLCHAIN_FILE \ + -DCMAKE_C_COMPILER_WORKS=1 \ + -DCMAKE_CXX_COMPILER_WORKS=1 \ + -DCMAKE_C_ABI_COMPILED=1 \ + -DCMAKE_CXX_ABI_COMPILED=1 \ + -DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY \ -DLV_BUILD_USE_KCONFIG=ON \ -DLV_BUILD_DEFCONFIG_PATH=${CGO_PATH}/lvgl_defconfig \ -DCONFIG_LV_BUILD_EXAMPLES=OFF \ -DCONFIG_LV_BUILD_DEMOS=OFF \ - -DSKIP_GLIBC_NAMES=ON \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX="${TMP_DIR}" msg_info "▶ Copying built library and header files" -cmake --build "${BUILD_DIR}" --target install +# Clock skew can cause make to return 1 even when build succeeds +# We verify success by checking if the output file exists +cmake --build "${BUILD_DIR}" --target install || true + +if [ ! -f "${TMP_DIR}/lib/libjknative.a" ]; then + msg_err "Build failed - libjknative.a not found" + exit 1 +fi + cp -r "${TMP_DIR}/include" "${CGO_PATH}" cp -r "${TMP_DIR}/lib" "${CGO_PATH}" rm -rf "${TMP_DIR}"