From ab9043186fd00fd5b6967edfb5df3d7b0b3f9a9a Mon Sep 17 00:00:00 2001 From: Marcelo Politzer <251334+mpolitzer@users.noreply.github.com> Date: Wed, 5 Jun 2024 10:34:44 -0300 Subject: [PATCH] feat!: Add run, dev and cross libcmt packages --- .github/workflows/main.yml | 14 ++-- Dockerfile | 24 +++++-- Makefile | 18 ++--- sys-utils/libcmt/Makefile | 69 ++++++++++++++----- sys-utils/libcmt/src/libcmt_mock.pc | 10 --- sys-utils/libcmt/tools/control.in | 8 +++ .../{src/libcmt.pc => tools/libcmt.pc.in} | 2 +- .../tools/template/cross-control.template | 8 --- 8 files changed, 98 insertions(+), 55 deletions(-) delete mode 100644 sys-utils/libcmt/src/libcmt_mock.pc create mode 100644 sys-utils/libcmt/tools/control.in rename sys-utils/libcmt/{src/libcmt.pc => tools/libcmt.pc.in} (90%) delete mode 100644 sys-utils/libcmt/tools/template/cross-control.template diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1df86d33..14d6ad8e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -76,7 +76,7 @@ jobs: - name: Build rootfs run: make fs - - name: Build [${{ env.TOOLS_LIBCMT }}] + - name: Build libcmt id: docker_build_libcmt uses: docker/build-push-action@v5 with: @@ -85,9 +85,9 @@ jobs: tags: ${{ env.TOOLS_IMAGE }}-libcmt push: false load: true - target: libcmt-debian-packager build-args: | - TOOLS_LIBCMT=${{ env.TOOLS_LIBCMT }} + VERSION=${{ env.VERSION }} + target: libcmt-debian-packager cache-from: type=gha,scope=regular,mode=max cache-to: type=gha,scope=regular @@ -101,14 +101,14 @@ jobs: path: | ${{ env.TOOLS_DEB }} ${{ env.TOOLS_ROOTFS }} - ${{ env.TOOLS_LIBCMT }} + libcmt/deb/* - name: Checksum artifacts if: startsWith(github.ref, 'refs/tags/v') run: | sha512sum ${{ env.TOOLS_DEB }} > ${{ env.TOOLS_DEB }}.sha512 sha512sum ${{ env.TOOLS_ROOTFS }} > ${{ env.TOOLS_ROOTFS }}.sha512 - sha512sum ${{ env.TOOLS_LIBCMT }} > ${{ env.TOOLS_LIBCMT }}.sha512 + for f in libcmt/deb/*; sha512sum $f > libcmt/$f.sha512; done - uses: softprops/action-gh-release@v1 if: startsWith(github.ref, 'refs/tags/v') @@ -119,8 +119,8 @@ jobs: ${{ env.TOOLS_DEB }}.sha512 ${{ env.TOOLS_ROOTFS }} ${{ env.TOOLS_ROOTFS }}.sha512 - ${{ env.TOOLS_LIBCMT }} - ${{ env.TOOLS_LIBCMT }}.sha512 + libcmt/deb/* + libcmt/deb/*.sha512 test: runs-on: ubuntu-latest-8-cores diff --git a/Dockerfile b/Dockerfile index 0bf25de0..8ef00c08 100644 --- a/Dockerfile +++ b/Dockerfile @@ -84,12 +84,26 @@ RUN make -C ${BUILD_BASE}/tools/sys-utils/ -j$(nproc) all # ------------------------------------------------------------------------------ FROM c-builder as libcmt-debian-packager ARG CMT_BASE=${BUILD_BASE}/tools/sys-utils/libcmt -ARG TOOLS_LIBCMT=libcmt.deb +ARG VERSION=0.0.0 USER root -RUN make -C ${CMT_BASE} debian-package \ - TARGET_DESTDIR=${BUILD_BASE}/_install \ - TARGET_PREFIX=/usr/riscv64-linux-gnu \ - LIBCMT_DEB_FILENAME=${BUILD_BASE}/${TOOLS_LIBCMT} + +RUN make -C ${CMT_BASE} \ + ARG_VERSION=${VERSION} \ + TARGET_PREFIX=/usr \ + TARGET_DESTDIR=${BUILD_BASE}/install/run \ + install-run libcmt-v${VERSION}.deb + +RUN make -C ${CMT_BASE} \ + ARG_VERSION=${VERSION} \ + TARGET_PREFIX=/usr \ + TARGET_DESTDIR=${BUILD_BASE}/install/dev \ + install libcmt-dev-v${VERSION}.deb + +RUN make -C ${CMT_BASE} \ + ARG_VERSION=${VERSION} \ + TARGET_PREFIX=/usr/riscv64-linux-gnu \ + TARGET_DESTDIR=${BUILD_BASE}/install/cross \ + install libcmt-dev-riscv64-cross-v${VERSION}.deb # build rust tools # ------------------------------------------------------------------------------ diff --git a/Makefile b/Makefile index 50645b0d..6bbfd3ec 100644 --- a/Makefile +++ b/Makefile @@ -23,7 +23,6 @@ VERSION := $(MAJOR).$(MINOR).$(PATCH)$(LABEL) TOOLS_DEB := machine-emulator-tools-v$(VERSION).deb TOOLS_IMAGE := cartesi/machine-emulator-tools:$(VERSION) TOOLS_ROOTFS := rootfs-tools-v$(VERSION).ext2 -TOOLS_LIBCMT := libcmt-v$(VERSION)-dev.deb IMAGE_KERNEL_VERSION ?= v0.20.0 LINUX_VERSION ?= 6.5.13-ctsi-1 @@ -63,25 +62,28 @@ $(TOOLS_ROOTFS) fs: $(TOOLS_DEB) xgenext2fs -fzB 4096 -b 25600 -i 4096 -a rootfs.tar -L rootfs $(TOOLS_ROOTFS) && \ rm -f rootfs.tar -$(TOOLS_LIBCMT) libcmt: +libcmt: + @mkdir $@ + +build-libcmt: @docker buildx build --load \ --target libcmt-debian-packager \ - --build-arg TOOLS_LIBCMT=$(TOOLS_LIBCMT) \ + --build-arg VERSION=$(VERSION) \ -t $(TOOLS_IMAGE)-libcmt \ -f Dockerfile \ . $(MAKE) copy-libcmt -copy-libcmt: +copy-libcmt: libcmt @ID=`docker create $(TOOLS_IMAGE)-libcmt` && \ - docker cp $$ID:/opt/cartesi/$(TOOLS_LIBCMT) . && \ + docker cp $$ID:/opt/cartesi/tools/sys-utils/libcmt/build/deb/ libcmt && \ docker rm $$ID env: + @echo VERSION=$(VERSION) @echo TOOLS_DEB=$(TOOLS_DEB) @echo TOOLS_ROOTFS=$(TOOLS_ROOTFS) @echo TOOLS_IMAGE=$(TOOLS_IMAGE) - @echo TOOLS_LIBCMT=$(TOOLS_LIBCMT) @echo IMAGE_KERNEL_VERSION=$(IMAGE_KERNEL_VERSION) @echo LINUX_VERSION=$(LINUX_VERSION) @echo LINUX_HEADERS_URLPATH=$(LINUX_HEADERS_URLPATH) @@ -128,7 +130,7 @@ clean-image: @(docker rmi $(TOOLS_IMAGE) > /dev/null 2>&1 || true) clean: - @rm -f $(TOOLS_DEB) control rootfs* libcmt-* + @rm -f $(TOOLS_DEB) control rootfs* libcmt* @$(MAKE) -C sys-utils clean distclean: clean clean-image @@ -146,4 +148,4 @@ help: @echo ' env - print useful Makefile variables as a KEY=VALUE list' @echo ' clean - remove the generated artifacts' -.PHONY: build fs deb env setup setup-required help distclean +.PHONY: build fs deb build-libcmt env setup setup-required help distclean diff --git a/sys-utils/libcmt/Makefile b/sys-utils/libcmt/Makefile index b45a9c95..841fd0b6 100644 --- a/sys-utils/libcmt/Makefile +++ b/sys-utils/libcmt/Makefile @@ -13,13 +13,6 @@ # 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. - -LIBCMT_VERSION ?=0.0.0 - -INSTALL_FILE= install -m0644 -INSTALL_EXEC= install -m0755 - -# paths PREFIX = /usr TARGET_PREFIX ?= $(PREFIX) @@ -65,7 +58,7 @@ libcmt_SRC := \ src/util.c \ src/io.c -libcmt_OBJDIR := build/lib +libcmt_OBJDIR := build/riscv64 libcmt_OBJ := $(patsubst %.c,$(libcmt_OBJDIR)/%.o,$(libcmt_SRC)) libcmt_LIB := $(libcmt_OBJDIR)/libcmt.a libcmt_SO := $(libcmt_OBJDIR)/libcmt.so @@ -81,19 +74,62 @@ $(libcmt_SO): $(libcmt_OBJ) $(TARGET_CC) -shared -o $@ $^ libcmt: $(libcmt_LIB) $(libcmt_SO) -install: $(libcmt_LIB) $(libcmt_SO) build/ffi.h +install-run: $(libcmt_SO) mkdir -p $(TARGET_DESTDIR)$(TARGET_PREFIX)/lib - cp -f $(libcmt_LIB) $(libcmt_SO) $(TARGET_DESTDIR)$(TARGET_PREFIX)/lib + cp -f $(libcmt_SO) $(TARGET_DESTDIR)$(TARGET_PREFIX)/lib + +install: $(libcmt_LIB) build/ffi.h + mkdir -p $(TARGET_DESTDIR)$(TARGET_PREFIX)/lib + cp -f $(libcmt_LIB) $(TARGET_DESTDIR)$(TARGET_PREFIX)/lib mkdir -p $(TARGET_DESTDIR)$(TARGET_PREFIX)/include/libcmt/ cp -f include/libcmt/*.h $(TARGET_DESTDIR)$(TARGET_PREFIX)/include/libcmt/ cp -f build/ffi.h $(TARGET_DESTDIR)$(TARGET_PREFIX)/include/libcmt/ mkdir -p $(TARGET_DESTDIR)$(TARGET_PREFIX)/lib/pkgconfig - sed -e 's|@ARG_PREFIX@|$(TARGET_PREFIX)|g' src/libcmt.pc > $(TARGET_DESTDIR)$(TARGET_PREFIX)/lib/pkgconfig/libcmt.pc - -debian-package: install - mkdir -p $(TARGET_DESTDIR)/DEBIAN - sed 's|ARG_VERSION|$(LIBCMT_VERSION)|g;' tools/template/cross-control.template > $(TARGET_DESTDIR)/DEBIAN/control - dpkg-deb -Zxz --root-owner-group --build $(TARGET_DESTDIR) $(LIBCMT_DEB_FILENAME) + sed -e 's|@PREFIX@|$(TARGET_PREFIX)|g' \ + tools/libcmt.pc.in > $(TARGET_DESTDIR)$(TARGET_PREFIX)/lib/pkgconfig/libcmt.pc + +# requires either install-run or install +debian-package: + mkdir -p $(dir $(DEB_FILENAME)) + dpkg-deb -Zxz --root-owner-group --build $(TARGET_DESTDIR) $(DEB_FILENAME) + +$(TARGET_DESTDIR)/DEBIAN/control: tools/control.in + mkdir -p $(@D) + sed -e 's|@PACKAGE@|$(ARG_PACKAGE)|' \ + -e 's|@VERSION@|$(ARG_VERSION)|' \ + -e 's|@ARCHITECTURE@|$(ARG_ARCHITECTURE)|' \ + -e 's|@SECTION@|$(ARG_SECTION)|' \ + -e 's|@PROVIDES@|$(ARG_PROVIDES)|' \ + -e 's|@DESCRIPTION@|$(ARG_DESCRIPTION)|' \ + $< > $@ + +# debian package variants +libcmt-v$(ARG_VERSION).deb: + $(MAKE) $(TARGET_DESTDIR)/DEBIAN/control \ + ARG_PACKAGE=libcmt \ + ARG_ARCHITECTURE=riscv64 \ + ARG_PROVIDES=libcmt \ + ARG_SECTION=libs \ + ARG_DESCRIPTION="Cartesi Machine Tools" + $(MAKE) debian-package DEB_FILENAME=build/deb/$@ + +libcmt-dev-v$(ARG_VERSION).deb: + $(MAKE) $(TARGET_DESTDIR)/DEBIAN/control \ + ARG_PACKAGE=libcmt-dev \ + ARG_ARCHITECTURE=riscv64 \ + ARG_PROVIDES=libcmt-dev \ + ARG_SECTION=devel \ + ARG_DESCRIPTION="Cartesi Machine Tools - (development files)" + $(MAKE) debian-package DEB_FILENAME=build/deb/$@ + +libcmt-dev-riscv64-cross-v$(ARG_VERSION).deb: + $(MAKE) $(TARGET_DESTDIR)/DEBIAN/control \ + ARG_PACKAGE=libcmt-riscv64-cross \ + ARG_ARCHITECTURE=all \ + ARG_PROVIDES=libcmt-dev-riscv64-cross \ + ARG_SECTION=devel \ + ARG_DESCRIPTION="Cartesi Machine Tools - (development files) (riscv64)" + $(MAKE) debian-package DEB_FILENAME=build/deb/$@ #------------------------------------------------------------------------------- mock_SRC := \ @@ -259,4 +295,5 @@ distclean: clean OBJ := $(mock_OBJ) $(libcmt_OBJ) $(examples_OBJ) $(tools_OBJ) +.PHONY: install -include $(OBJ:%.o=%.d) diff --git a/sys-utils/libcmt/src/libcmt_mock.pc b/sys-utils/libcmt/src/libcmt_mock.pc deleted file mode 100644 index c1b4a7bc..00000000 --- a/sys-utils/libcmt/src/libcmt_mock.pc +++ /dev/null @@ -1,10 +0,0 @@ -prefix=@ARG_PREFIX@ -exec_prefix=${prefix} -includedir=${prefix}/include -libdir=${exec_prefix}/lib - -Name: libcmt -Description: The Cartesi Machine Tools library -Version: 0.0.1 -Cflags: -I${includedir} -Libs: -L${libdir} -lcmt diff --git a/sys-utils/libcmt/tools/control.in b/sys-utils/libcmt/tools/control.in new file mode 100644 index 00000000..391dd653 --- /dev/null +++ b/sys-utils/libcmt/tools/control.in @@ -0,0 +1,8 @@ +Package: @PACKAGE@ +Version: @VERSION@ +Architecture: @ARCHITECTURE@ +Priority: optional +Section: @SECTION@ +Maintainer: Machine Reference Unit +Provides: @PROVIDES@ +Description: @DESCRIPTION@ diff --git a/sys-utils/libcmt/src/libcmt.pc b/sys-utils/libcmt/tools/libcmt.pc.in similarity index 90% rename from sys-utils/libcmt/src/libcmt.pc rename to sys-utils/libcmt/tools/libcmt.pc.in index c1b4a7bc..a5fcbfb4 100644 --- a/sys-utils/libcmt/src/libcmt.pc +++ b/sys-utils/libcmt/tools/libcmt.pc.in @@ -1,4 +1,4 @@ -prefix=@ARG_PREFIX@ +prefix=@PREFIX@ exec_prefix=${prefix} includedir=${prefix}/include libdir=${exec_prefix}/lib diff --git a/sys-utils/libcmt/tools/template/cross-control.template b/sys-utils/libcmt/tools/template/cross-control.template deleted file mode 100644 index 25193a4f..00000000 --- a/sys-utils/libcmt/tools/template/cross-control.template +++ /dev/null @@ -1,8 +0,0 @@ -Package: libcmt-dev-riscv64-cross -Version: ARG_VERSION -Architecture: all -Priority: optional -Section: devel -Maintainer: Machine Reference Unit -Provides: libcmt-dev-riscv64-cross -Description: Libcmt Library and Headers