diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000000..7ceb54045b --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,17 @@ +name: Docker Image CI + +on: + push: + branches: [ '*' ] + pull_request: + branches: [ '*' ] + +jobs: + build: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4.1.1 + with: + fetch-depth: 0 + - name: Build Docker image from sources + run: docker build . diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000..8e6339c2f8 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,35 @@ +FROM debian:bookworm + +ENV DEBIAN_FRONTEND noninteractive +ENV LC_ALL en_US.UTF-8 +ENV LANG ${LC_ALL} + +RUN echo "# log: Configuring locales" \ + && set -x \ + && apt-get update -y \ + && apt-get install -y locales \ + && echo "${LC_ALL} UTF-8" | tee /etc/locale.gen \ + && locale-gen ${LC_ALL} \ + && dpkg-reconfigure locales \ + && TZ=Etc/UTC apt-get -y install tzdata \ + && date -u + +ENV project unifysdk +ENV workdir /usr/local/opt/${project} +ADD . ${workdir} + +WORKDIR ${workdir} + +RUN echo "# log: Setup system" \ + && set -x \ + && apt-get install -y make sudo \ + && ./helper.mk help setup \ + && date -u + +RUN echo "# log: Build" \ + && set -x \ + && ./helper.mk \ + && date -u + +ENTRYPOINT [ "/usr/local/opt/unifysdk/helper.mk" ] +CMD [ "help" ] diff --git a/helper.mk b/helper.mk new file mode 100755 index 0000000000..7abab88281 --- /dev/null +++ b/helper.mk @@ -0,0 +1,212 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# ex: set tabstop=4 noexpandtab: +# -*- coding: utf-8 -* + +default: help zpc/default + @echo "$@: TODO: Support more than $^ by default" + @date -u + +SELF?=${CURDIR}/helper.mk + +project?=unifysdk +CMAKE_GENERATOR?=Ninja +export CMAKE_GENERATOR + +build_dir?=build +sudo?=sudo + +debian_codename?=bookworm + +packages?=cmake ninja-build build-essential python3-full ruby clang +packages+=git-lfs unp time file +packages+=nlohmann-json3-dev +# TODO: remove for offline build +packages+=curl wget python3-pip +packages+=time + +RUST_VERSION?=1.65.0 +export PATH := ${HOME}/.cargo/bin:${PATH} + +zpc_exe?=${build_dir}/applications/zpc/zpc +exes+=${zpc_exe} + +zpc_cmake_options?=\ + -DBUILD_AOXPC=OFF \ + -DBUILD_CPCD=OFF \ + -DBUILD_DEV_GUI=OFF \ + -DBUILD_EMD=OFF \ + -DBUILD_EPC=OFF \ + -DBUILD_GMS=OFF \ + -DBUILD_IMAGE_PROVIDER=OFF \ + -DBUILD_NAL=OFF \ + -DBUILD_OTBR=OFF \ + -DBUILD_POSITIONING=OFF \ + -DBUILD_TESTING=ON \ + -DBUILD_UPTI_CAP=OFF \ + -DBUILD_UPTI_WRITER=OFF \ + -DBUILD_UPVL=OFF \ + -DBUILD_ZIGBEED=OFF \ + -DBUILD_ZIGPC=OFF + +help: README.md + @cat $< + @echo "" + @echo "# Available rules at your own risk:" + @grep -o '^[^ ]*:' ${SELF} | grep -v '\$$' | grep -v '^#' | grep -v '^\.' + @echo "" + @echo "# Environment:" + @echo "# PATH=${PATH}" + @echo "" + +setup/debian: ${CURDIR}/docker/target_dependencies.apt + cat /etc/debian_version + -${sudo} apt update + ${sudo} apt install -y $(shell cat $<) + ${sudo} apt install -y ${packages} + @echo "$@: TODO: Support debian stable rustc=1.63 https://tracker.debian.org/pkg/rustc" + +setup/rust: + @echo "$@: TODO: Support https://tracker.debian.org/pkg/rustup" + curl https://sh.rustup.rs -sSf | bash -s -- -y --default-toolchain ${RUST_VERSION} + cat $${HOME}/.cargo/env + @echo '$@: info: You might like to add ". $${HOME}/.cargo/env" to "$${HOME}/.bashrc"' + -which rustc + rustc --version + cargo --version + @echo "$@: TODO: Support stable version from https://releases.rs/ or older" + +setup/python: + @echo "$@: TODO: https://github.com/wbond/pybars3/issues/82" + pip3 --version || echo "warning: Please install pip" + pip3 install pybars3 \ + || pip3 install --break-system-packages pybars3 + +cmake_url?=https://github.com/Kitware/CMake/releases/download/v3.21.6/cmake-3.21.6-Linux-x86_64.sh +cmake_filename?=$(shell basename -- "${cmake_url}") +cmake_sha256?=d460a33c42f248388a8f2249659ad2f5eab6854bebaf4f57c1df49ded404e593 + +setup/cmake: + @echo "$@: TODO: remove for debian-12+" + curl -O -L ${cmake_url} + sha256sum ${cmake_filename} \ + | grep "${cmake_sha256}" + ${SHELL} "${cmake_filename}" \ + --prefix=/usr/local \ + --skip-license + rm -v "${cmake_filename}" + cmake --version + +setup-cmake: setup/cmake + +setup/debian/bullseye: setup/debian setup/rust setup/python setup/cmake + date -u + +setup/debian/bookworm: setup/debian setup/rust setup/python + date -u + +setup: setup/debian/${debian_codename} + date -u + +git: .git/lfs + git lfs version || echo "$@: warning: Please install git-lfs" + git lfs status --porcelain || git lfs install + time git lfs pull + git lfs update || git lfs update --force + git lfs status --porcelain + +configure: ${build_dir}/CMakeCache.txt + file -E $< + +${build_dir}/CMakeCache.txt: CMakeLists.txt ${build_pre_list} + cmake -B ${build_dir} + +build: ${build_dir}/CMakeCache.txt + cmake --build ${