diff --git a/.github/workflows/build-circle-intp.yml b/.github/workflows/build-circle-intp.yml deleted file mode 100644 index 036f29d94f5..00000000000 --- a/.github/workflows/build-circle-intp.yml +++ /dev/null @@ -1,109 +0,0 @@ -name: Build circle-interpreter - -on: - # TODO turn on schedule - #schedule: - # # 05:00 AM (KST, UTC+9:00) Mon-Fri - # - cron: '00 20 * * 0-4' - workflow_dispatch: - -defaults: - run: - shell: bash - -# Cancel previous running jobs when pull request is updated -concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - -jobs: - onecc-test: - if: github.repository_owner == 'Samsung' - strategy: - matrix: - ubuntu_code: [ focal, jammy ] - include: - - ubuntu_code: focal - ubuntu_ver: 2004 - # TODO update comment ID, these are experimental IDs of issue #14669 - comment_id: 2658267907 - - ubuntu_code: jammy - ubuntu_ver: 2204 - comment_id: 2658268060 - runs-on: ubuntu-latest - container: - image: nnfw/one-devtools:${{ matrix.ubuntu_code }} - options: --user root - env: - NNCC_WORKSPACE : build - NNCC_INSTALL_PREFIX : install - name: circle-interpreter ubuntu ${{ matrix.ubuntu_ver }} - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Install required packages - run: | - apt-get update - apt-get install curl - - - name: Build without test - run: | - CIR_INTP_ITEMS="angkor;cwrap;pepper-str;pepper-strcast;pepper-csv2vec;pp" - CIR_INTP_ITEMS="${CIR_INTP_ITEMS};oops;loco;logo-core;logo;locop" - CIR_INTP_ITEMS="${CIR_INTP_ITEMS};hermes;hermes-std;safemain;mio-circle08" - CIR_INTP_ITEMS="${CIR_INTP_ITEMS};luci-compute;luci;luci-interpreter" - CIR_INTP_ITEMS="${CIR_INTP_ITEMS};foder;arser;vconone;circle-interpreter" - echo ${CIR_INTP_ITEMS} - - ./nncc configure \ - -DENABLE_STRICT_BUILD=ON \ - -DENABLE_TEST=OFF \ - -DCMAKE_BUILD_TYPE=Release \ - -DEXTERNALS_BUILD_THREADS=$(nproc) \ - -DCMAKE_INSTALL_PREFIX=${NNCC_INSTALL_PREFIX} \ - -DBUILD_WHITELIST="${CIR_INTP_ITEMS}" - ./nncc build -j$(nproc) - cmake --build ${NNCC_WORKSPACE} -- install - - - name: Gather files - run: | - cd ${NNCC_WORKSPACE} - mkdir -p cirintp - cp -v ./${NNCC_INSTALL_PREFIX}/bin/circle-interpreter ./cirintp/. - cp -v ./${NNCC_INSTALL_PREFIX}/lib/libloco.so ./cirintp/. - cp -v ./${NNCC_INSTALL_PREFIX}/lib/libluci_env.so ./cirintp/. - cp -v ./${NNCC_INSTALL_PREFIX}/lib/libluci_import.so ./cirintp/. - cp -v ./${NNCC_INSTALL_PREFIX}/lib/libluci_interpreter.so ./cirintp/. - cp -v ./${NNCC_INSTALL_PREFIX}/lib/libluci_lang.so ./cirintp/. - cp -v ./${NNCC_INSTALL_PREFIX}/lib/libluci_logex.so ./cirintp/. - cp -v ./${NNCC_INSTALL_PREFIX}/lib/libluci_log.so ./cirintp/. - cp -v ./${NNCC_INSTALL_PREFIX}/lib/libluci_plan.so ./cirintp/. - cp -v ./${NNCC_INSTALL_PREFIX}/lib/libluci_profile.so ./cirintp/. - - - name: Upload Artifact - id: step-upload - uses: actions/upload-artifact@v4 - with: - name: circle_intp_${{ matrix.ubuntu_ver }} - # TODO enable retention-days, default is 90 - # retention-days: 3 - path: | - ${{ env.NNCC_WORKSPACE }}/cirintp/ - - # refer https://docs.github.com/en/rest/issues/comments?apiVersion=2022-11-28#update-an-issue-comment - # TODO update comment id from experiment to official - # TODO enable update URL when key is available - - name: Update URL - if: false - run: | - echo "Artifact URL is ${{ steps.step-upload.outputs.artifact-url }}" - COMMENT_ADDR=https://api.github.com/repos/Samsung/ONE/issues/comments/${{ matrix.comment_id }} - curl -L \ - -X PATCH \ - -H "Accept: application/vnd.github+json" \ - -H "Authorization: Bearer ${{ secrets.COMMENT_UPDATE_KEY }}" \ - -H "X-GitHub-Api-Version: 2022-11-28" \ - ${COMMENT_ADDR} \ - -d '{"body":"${{ steps.step-upload.outputs.artifact-url }}"}' diff --git a/.github/workflows/pub-circle-int-launchpad.yml b/.github/workflows/pub-circle-int-launchpad.yml new file mode 100644 index 00000000000..c51dd2b4b59 --- /dev/null +++ b/.github/workflows/pub-circle-int-launchpad.yml @@ -0,0 +1,278 @@ +name: Publish circle-interpreter to Launchpad + +on: + # TODO turn on schedule + #schedule: + # # 05:00 AM (KST, UTC+9:00) Mon-Fri + # - cron: '00 20 * * 0-4' + workflow_dispatch: + inputs: + cirint_version: + description: 'The version of circle-interpreter' + required: true + default: '1.30.0' + cirint_description: + description: 'Description of changelog for circle-interpreter' + required: true + deb_fullname: + description: 'Full name of Debian package author' + required: false + default: 'On-device AI developers' + deb_email: + description: 'Email address of Debian package author' + required: false + default: 'nnfw@samsung.com' + is_release: + description: 'Is this a release version? + Set to false to append date-based subversion. + (true/false)' + required: false + default: 'false' + +defaults: + run: + shell: bash + +# Cancel previous running jobs when pull request is updated +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + configure: + if: github.repository_owner == 'Samsung' || github.repository_owner == 'shs-park' + name: Set current date and time + # TODO change to the 'ubuntu-latest' + #runs-on: ubuntu-latest + runs-on: [ self-hosted, shs-park ] + outputs: + version: ${{ steps.set-datetime.outputs.version }} + br_version: ${{ steps.set-datetime.outputs.br_version }} + steps: + - name: Set date and time + id: set-datetime + run: | + base_version="${{ inputs.cirint_version }}" + is_release="${{ inputs.is_release }}" + if [[ "$is_release" == "true" ]]; then + version="${base_version}" + br_version="${base_version}" + else + release_date=$(date +%Y%m%d%H%M) + version="${base_version}~${release_date}" + br_version="${base_version}-${release_date}" + fi + echo "version=${version}" >> $GITHUB_OUTPUT + echo "br_version=${br_version}" >> $GITHUB_OUTPUT + + debian-release: + needs: configure + strategy: + matrix: + # TODO activate noble + ubuntu_code: [ focal, jammy ] + name: circle-interpreter ubuntu ${{ matrix.ubuntu_code }} + # TODO change to the 'ubuntu-latest' + #runs-on: ubuntu-latest + runs-on: [ self-hosted, shs-park ] + container: + image: nnfw/one-devtools:${{ matrix.ubuntu_code }} + options: --user root + credentials: + username: ${{ secrets.NNFW_DOCKER_USERNAME }} + password: ${{ secrets.NNFW_DOCKER_TOKEN }} + env: + NNCC_BUILD: build + NNCC_WORKSPACE: build/release + NNCC_INSTALL_PREFIX: ${{ github.workspace }}/build/release.install + CIRINTP_PREFIX: cirintp + steps: + - name: Prepare, set distro versions + id: prepare + run: | + VERSION="${{ needs.configure.outputs.version }}~${{ matrix.ubuntu_code }}" + changes_file="circle-interpreter_${VERSION}_source.changes" + tarball_file="circle-interpreter_${VERSION}.orig.tar.xz" + echo "VERSION=${VERSION}" >> $GITHUB_OUTPUT + echo "changes_file=${changes_file}" >> $GITHUB_OUTPUT + echo "tarball_file=${tarball_file}" >> $GITHUB_OUTPUT + + - name: Checkout + uses: actions/checkout@v4 + + - name: Build without test + run: | + CIR_INTP_ITEMS="angkor;cwrap;pepper-str;pepper-strcast;pepper-csv2vec;pp" + CIR_INTP_ITEMS="${CIR_INTP_ITEMS};oops;loco;logo-core;logo;locop" + CIR_INTP_ITEMS="${CIR_INTP_ITEMS};hermes;hermes-std;safemain;mio-circle08" + CIR_INTP_ITEMS="${CIR_INTP_ITEMS};luci-compute;luci;luci-interpreter" + CIR_INTP_ITEMS="${CIR_INTP_ITEMS};foder;arser;vconone;circle-interpreter" + echo ${CIR_INTP_ITEMS} + + ./nncc configure \ + -DENABLE_STRICT_BUILD=ON \ + -DENABLE_TEST=OFF \ + -DCMAKE_BUILD_TYPE=Release \ + -DEXTERNALS_BUILD_THREADS=$(nproc) \ + -DCMAKE_INSTALL_PREFIX=${NNCC_INSTALL_PREFIX} \ + -DBUILD_WHITELIST="${CIR_INTP_ITEMS}" + ./nncc build -j$(nproc) + cmake --build ${NNCC_WORKSPACE} -- install + + - name: Gather files + run: | + cd ${NNCC_BUILD} + mkdir -p ${CIRINTP_PREFIX} + cp -v ${NNCC_INSTALL_PREFIX}/bin/circle-interpreter ./${CIRINTP_PREFIX}/. + cp -v ${NNCC_INSTALL_PREFIX}/lib/libloco.so ./${CIRINTP_PREFIX}/. + cp -v ${NNCC_INSTALL_PREFIX}/lib/libluci_env.so ./${CIRINTP_PREFIX}/. + cp -v ${NNCC_INSTALL_PREFIX}/lib/libluci_import.so ./${CIRINTP_PREFIX}/. + cp -v ${NNCC_INSTALL_PREFIX}/lib/libluci_interpreter.so ./${CIRINTP_PREFIX}/. + cp -v ${NNCC_INSTALL_PREFIX}/lib/libluci_lang.so ./${CIRINTP_PREFIX}/. + cp -v ${NNCC_INSTALL_PREFIX}/lib/libluci_logex.so ./${CIRINTP_PREFIX}/. + cp -v ${NNCC_INSTALL_PREFIX}/lib/libluci_log.so ./${CIRINTP_PREFIX}/. + cp -v ${NNCC_INSTALL_PREFIX}/lib/libluci_plan.so ./${CIRINTP_PREFIX}/. + cp -v ${NNCC_INSTALL_PREFIX}/lib/libluci_profile.so ./${CIRINTP_PREFIX}/. + + - name: Update changelog + run: | + cd ${{ env.NNCC_BUILD }}/${{ env.CIRINTP_PREFIX }} + cp -rf ../../infra/debian/circle-interpreter ./debian + export DEBFULLNAME="${{ inputs.deb_fullname }}" + export DEBEMAIL="${{ inputs.deb_email }}" + dch -v "${{ steps.prepare.outputs.VERSION }}" \ + --distribution "${{ matrix.ubuntu_code }}" \ + "${{ inputs.cirint_description }}" -b + + - name: Create original tarball + run: | + cd ${{ env.NNCC_BUILD }} + tar -caf ${{ steps.prepare.outputs.tarball_file }} ${{ env.CIRINTP_PREFIX }} + + - name: Signing with debuild and debsign + run: | + cd ${{ env.NNCC_BUILD }}/${{ env.CIRINTP_PREFIX }} + rm -rf ~/.gnupg + echo -n "${{ secrets.GPG_NNFW_SIGNING_KEY }}" | base64 --decode | gpg --import + # get fingerprint + FPR=$(gpg --list-keys --with-colons | awk -F: '$1 == "fpr" { print $10; exit }') + echo "$FPR:6:" | gpg --import-ownertrust + debuild -S -us -uc + debsign -k${FPR} ../circle-interpreter_*.changes + + - name: Upload to Launchpad + run: | + cd ${{ env.NNCC_BUILD }} + mkdir -p ~/.ssh + echo "${{ secrets.LAUNCHPAD_NNFW_PRIVATE_KEY }}" > ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa + dput ppa:circletools/nightly ${{ steps.prepare.outputs.changes_file }} + + - name: Upload artifact, circle-interpreter + uses: actions/upload-artifact@v4 + with: + name: circle-interpreter_${{ steps.prepare.outputs.VERSION }} + retention-days: 3 + path: | + ${{ env.NNCC_BUILD }}/${{ steps.prepare.outputs.tarball_file }} + + create-changelog-artifact: + needs: [ configure, debian-release ] + # TODO need to activate the branch condition + # if: ${{ success() && github.ref == 'refs/heads/master' }} + if: ${{ success() }} + # TODO change to the 'ubuntu-latest' + #runs-on: ubuntu-latest + runs-on: [ self-hosted, shs-park ] + env: + DEFAULT_DISTRO: jammy + steps: + - name: Download tarball, ${{ env.DEFAULT_DISTRO }} + uses: actions/download-artifact@v4 + with: + name: circle-interpreter_${{ needs.configure.outputs.version }}~${{ env.DEFAULT_DISTRO }} + + - name: Copy changelogs + run: | + mkdir changelogs + mkdir ${{ env.DEFAULT_DISTRO }} + tar -axf circle-interpreter_${{ needs.configure.outputs.version }}~${{ env.DEFAULT_DISTRO }}.orig.tar.xz \ + -C ${{ env.DEFAULT_DISTRO }} + cp ${{ env.DEFAULT_DISTRO }}/cirintp/debian/changelog changelogs/changelog + + - name: Upload artifact, changelogs + uses: actions/upload-artifact@v4 + with: + name: changelogs + retention-days: 3 + path: | + changelogs + + create-pr-on-success: + needs: [ configure, create-changelog-artifact ] + # TODO need to activate the branch condition + # if: ${{ success() && github.ref == 'refs/heads/master' }} + if: ${{ success() }} + # TODO change to the 'ubuntu-latest' + #runs-on: ubuntu-latest + runs-on: [ self-hosted, shs-park ] + env: + BR_VERSION: ${{ needs.configure.outputs.br_version }} + permissions: + contents: write + pull-requests: write + steps: + - name: Prepare, set distro versions + id: prepare + run: | + VERSION="${{ needs.configure.outputs.version }}" + echo "VERSION=${VERSION}" >> $GITHUB_OUTPUT + + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Git + run: | + git config --global user.name "Seungho Henry Park" + git config --global user.email "shs.park@samsung.com" + + - name: Download tarball + uses: actions/download-artifact@v4 + with: + name: changelogs + + - name: Update the changelog file + run: | + cp changelog infra/debian/circle-interpreter/ + + - name: Create PR branch and commit changelog + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + BRANCH=auto/update-cirint-changelog-${BR_VERSION} + git checkout -b ${BRANCH} + git add infra/debian/circle-interpreter/changelog + git commit -m "[infra/debian] Update changelog for circle-interpreter" \ + -m "This updates the changelog for circle-interpreter_${{ steps.prepare.outputs.VERSION }}." \ + -m "It is auto-generated PR from github workflow." \ + -m "" \ + -m "ONE-DCO-1.0-Signed-off-by: Seungho Henry Park " + git push origin ${BRANCH} + + - name: Create PR + env: + GH_TOKEN: ${{ secrets.SHSPARK_GITHUB_TOKEN }} + run: | + BRANCH=auto/update-cirint-changelog-${BR_VERSION} + gh pr create \ + --title "[infra/debian] Update changelog for circle-interpreter" \ + --body "$(cat < + EOF + )" \ + --head "${BRANCH}" \ + --base "master" diff --git a/infra/debian/circle-interpreter/changelog b/infra/debian/circle-interpreter/changelog index 339e0b81d64..c06c28a8db0 100644 --- a/infra/debian/circle-interpreter/changelog +++ b/infra/debian/circle-interpreter/changelog @@ -1,5 +1,11 @@ -circle-interpreter (1.30.0) jammy; urgency=low +circle-interpreter (1.30.0~20250424.2227) focal; urgency=medium + + * Daily build with timestamp. + + -- SeunghoPark Thu, 24 Apr 2025 22:27:41 +0900 + +circle-interpreter (1.30.0) focal; urgency=low * First circle-interpreter Debian package release for developers. - -- Saehie Park Mon, 23 Apr 2025 10:10:00 +0900 + -- SeunghoPark Thu, 24 Apr 2025 16:07:00 +0900 diff --git a/infra/debian/circle-interpreter/circle-interpreter.install b/infra/debian/circle-interpreter/circle-interpreter.install index eb6da70d989..d7e74e8d097 100644 --- a/infra/debian/circle-interpreter/circle-interpreter.install +++ b/infra/debian/circle-interpreter/circle-interpreter.install @@ -1,13 +1,13 @@ # {FILES_TO_INSTALL} {DEST_DIR} # bin -usr/bin/circle-interpreter usr/share/cirint/bin/ +bin/circle-interpreter usr/share/circletools/bin/ # lib -usr/lib/libloco.so usr/share/cirint/bin/ -usr/lib/libluci_env.so usr/share/cirint/bin/ -usr/lib/libluci_import.so usr/share/cirint/bin/ -usr/lib/libluci_interpreter.so usr/share/cirint/bin/ -usr/lib/libluci_lang.so usr/share/cirint/bin/ -usr/lib/libluci_logex.so usr/share/cirint/bin/ -usr/lib/libluci_log.so usr/share/cirint/bin/ -usr/lib/libluci_plan.so usr/share/cirint/bin/ -usr/lib/libluci_profile.so usr/share/cirint/bin/ +libloco.so usr/share/circletools/bin/ +libluci_env.so usr/share/circletools/bin/ +libluci_import.so usr/share/circletools/bin/ +libluci_interpreter.so usr/share/circletools/bin/ +libluci_lang.so usr/share/circletools/bin/ +libluci_logex.so usr/share/circletools/bin/ +libluci_log.so usr/share/circletools/bin/ +libluci_plan.so usr/share/circletools/bin/ +libluci_profile.so usr/share/circletools/bin/ diff --git a/infra/debian/circle-interpreter/circle-interpreter.links b/infra/debian/circle-interpreter/circle-interpreter.links index d718e1a665a..6b6723e0209 100644 --- a/infra/debian/circle-interpreter/circle-interpreter.links +++ b/infra/debian/circle-interpreter/circle-interpreter.links @@ -1,2 +1,2 @@ # bin -usr/share/cirint/bin/circle-interpreter usr/bin/circle-interpreter +usr/share/circletools/bin/circle-interpreter usr/bin/circle-interpreter diff --git a/infra/debian/circle-interpreter/circle-interpreter.lintian-overrides b/infra/debian/circle-interpreter/circle-interpreter.lintian-overrides new file mode 100644 index 00000000000..0573de0ab0a --- /dev/null +++ b/infra/debian/circle-interpreter/circle-interpreter.lintian-overrides @@ -0,0 +1 @@ +circle-interpreter: binary-without-manpage diff --git a/infra/debian/circle-interpreter/compat b/infra/debian/circle-interpreter/compat index ec635144f60..48082f72f08 100644 --- a/infra/debian/circle-interpreter/compat +++ b/infra/debian/circle-interpreter/compat @@ -1 +1 @@ -9 +12 diff --git a/infra/debian/circle-interpreter/control b/infra/debian/circle-interpreter/control index 4e0392552aa..d058c7ce3f0 100644 --- a/infra/debian/circle-interpreter/control +++ b/infra/debian/circle-interpreter/control @@ -1,11 +1,15 @@ Source: circle-interpreter Section: devel Priority: optional -Build-Depends: devscripts, debhelper, cmake +Build-Depends: debhelper (>= 12), cmake Maintainer: Neural Network Acceleration Solution Developers +Standards-Version: 4.5.0 +Homepage: https://github.com/Samsung/ONE Package: circle-interpreter -Homepage: https://github.com/Samsung/ONE -Standards-Version: 3.9.8 Architecture: amd64 +Depends: ${shlibs:Depends}, ${misc:Depends} Description: Interpreter for circle model + Circle is a lightweight neural network model format developed in the ONE project. + This package provides the 'circle-interpreter' tool, which runs inference on + Circle models for validation and testing purposes. diff --git a/infra/debian/circle-interpreter/copyright b/infra/debian/circle-interpreter/copyright index a792fe45aab..2e6de3eded1 100644 --- a/infra/debian/circle-interpreter/copyright +++ b/infra/debian/circle-interpreter/copyright @@ -1,3 +1,13 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: circle-interpreter +Source: https://github.com/Samsung/ONE +Comment: These binaries are built from the ONE project. + Files: * -License: Proprietary -Copyright (c) <2025> +Copyright: 2025 Samsung Electronics., Ltd. +License: Apache-2.0 + This package is licensed under the Apache License, Version 2.0. + . + On Debian systems, the full text of the Apache License Version 2.0 + can be found in: + /usr/share/common-licenses/Apache-2.0 diff --git a/infra/debian/circle-interpreter/rules b/infra/debian/circle-interpreter/rules index 91e39d0bd6d..1183a5fc656 100644 --- a/infra/debian/circle-interpreter/rules +++ b/infra/debian/circle-interpreter/rules @@ -1,40 +1,37 @@ #!/usr/bin/make -f -export NNCC_WORKSPACE=build/debian -export NNCC_INSTALL_PREFIX=$(CURDIR)/debian/tmp/usr/ +export NNCC_INSTALL_PREFIX=$(CURDIR) +export DEBIAN_PREFIX=$(CURDIR)/debian/tmp %: dh $@ override_dh_auto_clean: - # skip clean + # Nothing to clean + true override_dh_auto_configure: - CIRCLEINT_ITEMS="angkor;cwrap;pepper-str;pepper-strcast;pepper-csv2vec;pp" - CIRCLEINT_ITEMS="${CIRCLEINT_ITEMS};oops;loco;logo-core;logo;locop" - CIRCLEINT_ITEMS="${CIRCLEINT_ITEMS};hermes;hermes-std;safemain;mio-circle08" - CIRCLEINT_ITEMS="${CIRCLEINT_ITEMS};luci-compute;luci;luci-interpreter" - CIRCLEINT_ITEMS="${CIRCLEINT_ITEMS};foder;arser;vconone;circle-interpreter" - - ./nncc configure \ - -DENABLE_STRICT_BUILD=ON \ - -DENABLE_TEST=OFF \ - -DCMAKE_BUILD_TYPE=Release \ - -DEXTERNALS_BUILD_THREADS=4 \ - -DCMAKE_INSTALL_PREFIX=${NNCC_INSTALL_PREFIX} \ - -DBUILD_WHITELIST="${CIRCLEINT_ITEMS}" + # No configure step needed + true override_dh_auto_build: - ./nncc build -j4 + # No build step needed + true override_dh_auto_test: - # skip test + # No test step needed + true override_dh_auto_install: - cmake --build ${NNCC_WORKSPACE} -- install + # copy the bin file + mkdir -p ${DEBIAN_PREFIX}/bin + cp ${NNCC_INSTALL_PREFIX}/circle-interpreter ${DEBIAN_PREFIX}/bin/ override_dh_shlibdeps: dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info +override_dh_strip: + dh_strip --no-automatic-dbgsym + override_dh_builddeb: - dh_builddeb -- -Zgzip + dh_builddeb diff --git a/infra/debian/circle-interpreter/source/format b/infra/debian/circle-interpreter/source/format new file mode 100644 index 00000000000..163aaf8d82b --- /dev/null +++ b/infra/debian/circle-interpreter/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/infra/debian/circle-interpreter/source/lintian-overrides b/infra/debian/circle-interpreter/source/lintian-overrides new file mode 100644 index 00000000000..82b292ca660 --- /dev/null +++ b/infra/debian/circle-interpreter/source/lintian-overrides @@ -0,0 +1,10 @@ +circle-interpreter source: source-is-missing circle-interpreter +circle-interpreter source: source-is-missing libloco.so +circle-interpreter source: source-is-missing libluci_env.so +circle-interpreter source: source-is-missing libluci_import.so +circle-interpreter source: source-is-missing libluci_interpreter.so +circle-interpreter source: source-is-missing libluci_lang.so +circle-interpreter source: source-is-missing libluci_log.so +circle-interpreter source: source-is-missing libluci_logex.so +circle-interpreter source: source-is-missing libluci_plan.so +circle-interpreter source: source-is-missing libluci_profile.so