Skip to content

Commit 0787ba3

Browse files
committed
feat!: Add run, dev and cross libcmt packages
1 parent cd65bce commit 0787ba3

File tree

8 files changed

+91
-53
lines changed

8 files changed

+91
-53
lines changed

.github/workflows/main.yml

+5-7
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ jobs:
7676
- name: Build rootfs
7777
run: make fs
7878

79-
- name: Build [${{ env.TOOLS_LIBCMT }}]
79+
- name: Build libcmt
8080
id: docker_build_libcmt
8181
uses: docker/build-push-action@v5
8282
with:
@@ -86,8 +86,6 @@ jobs:
8686
push: false
8787
load: true
8888
target: libcmt-debian-packager
89-
build-args: |
90-
TOOLS_LIBCMT=${{ env.TOOLS_LIBCMT }}
9189
cache-from: type=gha,scope=regular,mode=max
9290
cache-to: type=gha,scope=regular
9391

@@ -101,14 +99,14 @@ jobs:
10199
path: |
102100
${{ env.TOOLS_DEB }}
103101
${{ env.TOOLS_ROOTFS }}
104-
${{ env.TOOLS_LIBCMT }}
102+
libcmt/deb/*
105103
106104
- name: Checksum artifacts
107105
if: startsWith(github.ref, 'refs/tags/v')
108106
run: |
109107
sha512sum ${{ env.TOOLS_DEB }} > ${{ env.TOOLS_DEB }}.sha512
110108
sha512sum ${{ env.TOOLS_ROOTFS }} > ${{ env.TOOLS_ROOTFS }}.sha512
111-
sha512sum ${{ env.TOOLS_LIBCMT }} > ${{ env.TOOLS_LIBCMT }}.sha512
109+
for f in libcmt/deb/*; sha512sum $f > libcmt/$f.sha512; done
112110
113111
- uses: softprops/action-gh-release@v1
114112
if: startsWith(github.ref, 'refs/tags/v')
@@ -119,8 +117,8 @@ jobs:
119117
${{ env.TOOLS_DEB }}.sha512
120118
${{ env.TOOLS_ROOTFS }}
121119
${{ env.TOOLS_ROOTFS }}.sha512
122-
${{ env.TOOLS_LIBCMT }}
123-
${{ env.TOOLS_LIBCMT }}.sha512
120+
libcmt/deb/*
121+
libcmt/deb/*.sha512
124122
125123
test:
126124
runs-on: ubuntu-latest-8-cores

Dockerfile

+19-5
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,26 @@ RUN make -C ${BUILD_BASE}/tools/sys-utils/ -j$(nproc) all
8484
# ------------------------------------------------------------------------------
8585
FROM c-builder as libcmt-debian-packager
8686
ARG CMT_BASE=${BUILD_BASE}/tools/sys-utils/libcmt
87-
ARG TOOLS_LIBCMT=libcmt.deb
87+
ARG VERSION=0.0.0
8888
USER root
89-
RUN make -C ${CMT_BASE} debian-package \
90-
TARGET_DESTDIR=${BUILD_BASE}/_install \
91-
TARGET_PREFIX=/usr/riscv64-linux-gnu \
92-
LIBCMT_DEB_FILENAME=${BUILD_BASE}/${TOOLS_LIBCMT}
89+
90+
RUN make -C ${CMT_BASE} \
91+
ARG_VERSION=${VERSION} \
92+
TARGET_PREFIX=/usr \
93+
TARGET_DESTDIR=${BUILD_BASE}/install/run \
94+
install-run libcmt-v${VERSION}.deb
95+
96+
RUN make -C ${CMT_BASE} \
97+
ARG_VERSION=${VERSION} \
98+
TARGET_PREFIX=/usr \
99+
TARGET_DESTDIR=${BUILD_BASE}/install/dev \
100+
install libcmt-dev-v${VERSION}.deb
101+
102+
RUN make -C ${CMT_BASE} \
103+
ARG_VERSION=${VERSION} \
104+
TARGET_PREFIX=/usr/riscv64-linux-gnu \
105+
TARGET_DESTDIR=${BUILD_BASE}/install/cross \
106+
install libcmt-dev-riscv64-cross-v${VERSION}.deb
93107

94108
# build rust tools
95109
# ------------------------------------------------------------------------------

Makefile

+6-7
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ VERSION := $(MAJOR).$(MINOR).$(PATCH)$(LABEL)
2323
TOOLS_DEB := machine-emulator-tools-v$(VERSION).deb
2424
TOOLS_IMAGE := cartesi/machine-emulator-tools:$(VERSION)
2525
TOOLS_ROOTFS := rootfs-tools-v$(VERSION).ext2
26-
TOOLS_LIBCMT := libcmt-v$(VERSION)-dev.deb
2726

2827
IMAGE_KERNEL_VERSION ?= v0.20.0
2928
LINUX_VERSION ?= 6.5.13-ctsi-1
@@ -63,25 +62,25 @@ $(TOOLS_ROOTFS) fs: $(TOOLS_DEB)
6362
xgenext2fs -fzB 4096 -b 25600 -i 4096 -a rootfs.tar -L rootfs $(TOOLS_ROOTFS) && \
6463
rm -f rootfs.tar
6564

66-
$(TOOLS_LIBCMT) libcmt:
65+
libcmt:
6766
@docker buildx build --load \
6867
--target libcmt-debian-packager \
69-
--build-arg TOOLS_LIBCMT=$(TOOLS_LIBCMT) \
68+
--build-arg VERSION=$(VERSION) \
7069
-t $(TOOLS_IMAGE)-libcmt \
7170
-f Dockerfile \
7271
.
7372
$(MAKE) copy-libcmt
7473

7574
copy-libcmt:
75+
@mkdir libcmt
7676
@ID=`docker create $(TOOLS_IMAGE)-libcmt` && \
77-
docker cp $$ID:/opt/cartesi/$(TOOLS_LIBCMT) . && \
77+
docker cp $$ID:/opt/cartesi/tools/sys-utils/libcmt/build/deb/ libcmt && \
7878
docker rm $$ID
7979

8080
env:
8181
@echo TOOLS_DEB=$(TOOLS_DEB)
8282
@echo TOOLS_ROOTFS=$(TOOLS_ROOTFS)
8383
@echo TOOLS_IMAGE=$(TOOLS_IMAGE)
84-
@echo TOOLS_LIBCMT=$(TOOLS_LIBCMT)
8584
@echo IMAGE_KERNEL_VERSION=$(IMAGE_KERNEL_VERSION)
8685
@echo LINUX_VERSION=$(LINUX_VERSION)
8786
@echo LINUX_HEADERS_URLPATH=$(LINUX_HEADERS_URLPATH)
@@ -128,7 +127,7 @@ clean-image:
128127
@(docker rmi $(TOOLS_IMAGE) > /dev/null 2>&1 || true)
129128

130129
clean:
131-
@rm -f $(TOOLS_DEB) control rootfs* libcmt-*
130+
@rm -f $(TOOLS_DEB) control rootfs* libcmt*
132131
@$(MAKE) -C sys-utils clean
133132

134133
distclean: clean clean-image
@@ -146,4 +145,4 @@ help:
146145
@echo ' env - print useful Makefile variables as a KEY=VALUE list'
147146
@echo ' clean - remove the generated artifacts'
148147

149-
.PHONY: build fs deb env setup setup-required help distclean
148+
.PHONY: build fs deb libcmt env setup setup-required help distclean

sys-utils/libcmt/Makefile

+52-15
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,6 @@
1313
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1414
# See the License for the specific language governing permissions and
1515
# limitations under the License.
16-
17-
LIBCMT_VERSION ?=0.0.0
18-
19-
INSTALL_FILE= install -m0644
20-
INSTALL_EXEC= install -m0755
21-
22-
# paths
2316
PREFIX = /usr
2417
TARGET_PREFIX ?= $(PREFIX)
2518

@@ -65,7 +58,7 @@ libcmt_SRC := \
6558
src/util.c \
6659
src/io.c
6760

68-
libcmt_OBJDIR := build/lib
61+
libcmt_OBJDIR := build/riscv64
6962
libcmt_OBJ := $(patsubst %.c,$(libcmt_OBJDIR)/%.o,$(libcmt_SRC))
7063
libcmt_LIB := $(libcmt_OBJDIR)/libcmt.a
7164
libcmt_SO := $(libcmt_OBJDIR)/libcmt.so
@@ -81,19 +74,62 @@ $(libcmt_SO): $(libcmt_OBJ)
8174
$(TARGET_CC) -shared -o $@ $^
8275

8376
libcmt: $(libcmt_LIB) $(libcmt_SO)
77+
install-run: $(libcmt_SO)
78+
mkdir -p $(TARGET_DESTDIR)$(TARGET_PREFIX)/lib
79+
cp -f $(libcmt_SO) $(TARGET_DESTDIR)$(TARGET_PREFIX)/lib
80+
8481
install: $(libcmt_LIB) $(libcmt_SO) build/ffi.h
8582
mkdir -p $(TARGET_DESTDIR)$(TARGET_PREFIX)/lib
86-
cp -f $(libcmt_LIB) $(libcmt_SO) $(TARGET_DESTDIR)$(TARGET_PREFIX)/lib
83+
cp -f $(libcmt_SO) $(libcmt_LIB) $(TARGET_DESTDIR)$(TARGET_PREFIX)/lib
8784
mkdir -p $(TARGET_DESTDIR)$(TARGET_PREFIX)/include/libcmt/
8885
cp -f include/libcmt/*.h $(TARGET_DESTDIR)$(TARGET_PREFIX)/include/libcmt/
8986
cp -f build/ffi.h $(TARGET_DESTDIR)$(TARGET_PREFIX)/include/libcmt/
9087
mkdir -p $(TARGET_DESTDIR)$(TARGET_PREFIX)/lib/pkgconfig
91-
sed -e 's|@ARG_PREFIX@|$(TARGET_PREFIX)|g' src/libcmt.pc > $(TARGET_DESTDIR)$(TARGET_PREFIX)/lib/pkgconfig/libcmt.pc
92-
93-
debian-package: install
94-
mkdir -p $(TARGET_DESTDIR)/DEBIAN
95-
sed 's|ARG_VERSION|$(LIBCMT_VERSION)|g;' tools/template/cross-control.template > $(TARGET_DESTDIR)/DEBIAN/control
96-
dpkg-deb -Zxz --root-owner-group --build $(TARGET_DESTDIR) $(LIBCMT_DEB_FILENAME)
88+
sed -e 's|@PREFIX@|$(TARGET_PREFIX)|g' \
89+
tools/libcmt.pc.in > $(TARGET_DESTDIR)$(TARGET_PREFIX)/lib/pkgconfig/libcmt.pc
90+
91+
# requires either install-run or install
92+
debian-package:
93+
mkdir -p $(dir $(DEB_FILENAME))
94+
dpkg-deb -Zxz --root-owner-group --build $(TARGET_DESTDIR) $(DEB_FILENAME)
95+
96+
$(TARGET_DESTDIR)/DEBIAN/control: tools/control.in
97+
mkdir -p $(@D)
98+
sed -e 's|@PACKAGE@|$(ARG_PACKAGE)|' \
99+
-e 's|@VERSION@|$(ARG_VERSION)|' \
100+
-e 's|@ARCHITECTURE@|$(ARG_ARCHITECTURE)|' \
101+
-e 's|@SECTION@|$(ARG_SECTION)|' \
102+
-e 's|@PROVIDES@|$(ARG_PROVIDES)|' \
103+
-e 's|@DESCRIPTION@|$(ARG_DESCRIPTION)|' \
104+
$< > $@
105+
106+
# debian package variants
107+
libcmt-v$(ARG_VERSION).deb:
108+
$(MAKE) $(TARGET_DESTDIR)/DEBIAN/control \
109+
ARG_PACKAGE=libcmt \
110+
ARG_ARCHITECTURE=riscv64 \
111+
ARG_PROVIDES=libcmt \
112+
ARG_SECTION=libs \
113+
ARG_DESCRIPTION="Cartesi Machine Tools"
114+
$(MAKE) debian-package DEB_FILENAME=build/deb/$@
115+
116+
libcmt-dev-v$(ARG_VERSION).deb:
117+
$(MAKE) $(TARGET_DESTDIR)/DEBIAN/control \
118+
ARG_PACKAGE=libcmt-dev \
119+
ARG_ARCHITECTURE=any \
120+
ARG_PROVIDES=libcmt-dev \
121+
ARG_SECTION=devel \
122+
ARG_DESCRIPTION="Cartesi Machine Tools - (development files)"
123+
$(MAKE) debian-package DEB_FILENAME=build/deb/$@
124+
125+
libcmt-dev-riscv64-cross-v$(ARG_VERSION).deb:
126+
$(MAKE) $(TARGET_DESTDIR)/DEBIAN/control \
127+
ARG_PACKAGE=libcmt \
128+
ARG_ARCHITECTURE=riscv64 \
129+
ARG_PROVIDES=libcmt-dev-riscv64-cross \
130+
ARG_SECTION=devel \
131+
ARG_DESCRIPTION="Cartesi Machine Tools - (development files) (riscv64)"
132+
$(MAKE) debian-package DEB_FILENAME=build/deb/$@
97133

98134
#-------------------------------------------------------------------------------
99135
mock_SRC := \
@@ -259,4 +295,5 @@ distclean: clean
259295

260296
OBJ := $(mock_OBJ) $(libcmt_OBJ) $(examples_OBJ) $(tools_OBJ)
261297

298+
.PHONY: install
262299
-include $(OBJ:%.o=%.d)

sys-utils/libcmt/src/libcmt_mock.pc

-10
This file was deleted.

sys-utils/libcmt/tools/control.in

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
Package: @PACKAGE@
2+
Version: @VERSION@
3+
Architecture: @ARCHITECTURE@
4+
Priority: optional
5+
Section: @SECTION@
6+
Maintainer: Machine Reference Unit <https://discord.com/channels/600597137524391947/1107965671976992878>
7+
Provides: @PROVIDES@
8+
Description: @DESCRIPTION@

sys-utils/libcmt/src/libcmt.pc renamed to sys-utils/libcmt/tools/libcmt.pc.in

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
prefix=@ARG_PREFIX@
1+
prefix=@PREFIX@
22
exec_prefix=${prefix}
33
includedir=${prefix}/include
44
libdir=${exec_prefix}/lib

sys-utils/libcmt/tools/template/cross-control.template

-8
This file was deleted.

0 commit comments

Comments
 (0)