Commit 65d4ea0c authored by Dimitris Lampridis's avatar Dimitris Lampridis

Merge branch '35-migrate-ci-software-build-and-publishing-to-new-common-pipeline' into 'master'

Resolve "Migrate CI software build and publishing to new common pipeline"

Closes #35

See merge request be-cem-edl/common/mockturtle!26
parents 608454f4 0e874789
......@@ -11,7 +11,6 @@ include:
- project: 'be-cem-edl/evergreen/gitlab-ci'
ref: master
file: 'edl-gitlab-ci.yml'
- local: 'hdl/syn/.gitlab-ci.yml'
- local: 'hdl/testbench/.gitlab-ci.yml'
- local: 'tests/.gitlab-ci.yml'
......@@ -20,30 +19,21 @@ cppcheck:
image:
name: gitlab-registry.cern.ch/coht/common-containers/static-analysis:latest
script:
- make cppcheck
- make -C software cppcheck
build-drivers-cc7:
interruptible: true
extends: .kernel_build_cc7
software_build:
extends: .build_fec_os_sw
variables:
EDL_CI_KBUILD_PATHS: software/kernel
EDL_CI_SW_PATHS: software
build-software-cc7:
interruptible: true
test_fw_build:
stage: build
image:
name: gitlab-registry.cern.ch/be-cem-edl/evergreen/gitlab-ci/build-fec-sw:latest
variables:
_SW_DEST: $CI_PROJECT_DIR/$EDL_CI_EOS_OUTPUT_DIR/software
image: gitlab-registry.cern.ch/be-cem-edl/evergreen/gitlab-ci/build-fec-sw:latest
script:
- make release
- mkdir -p $_SW_DEST
- cp *.tar.gz $_SW_DEST/
- make -C tests/firmware
artifacts:
paths:
- $_SW_DEST/*
- tests/firmware/*/*.bin
- tests/firmware/**/*.bin
trtl-project-creator:
interruptible: true
......@@ -54,3 +44,13 @@ trtl-project-creator:
- TRTL=$PWD make -C /tmp/trtl_project_test/software lib
- TRTL=$PWD make -C /tmp/trtl_project_test/software tools
# TODO add firmware (need riscv32-gcc)
fpga_synthesis:
extends: .synthesis-ise-14-7
interruptible: true
allow_failure: true
parallel:
matrix:
- EDL_CI_SYN_SRC_PATH:
- hdl/syn/spec_mt_demo
- hdl/syn/svec_mt_demo
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# SPDX-FileCopyrightText: 2019 CERN
TOP_DIR ?= $(shell pwd)
TRTL ?= $(TOP_DIR)
include common.mk
all:
$(MAKE) -C software
release:
$(eval TEMP_RELEASE_DIR := $(shell mktemp -d))
$(MAKE) PREFIX=$(TEMP_RELEASE_DIR) -C software/include install
$(MAKE) PREFIX=$(TEMP_RELEASE_DIR) -C software/lib install
$(MAKE) PREFIX=$(TEMP_RELEASE_DIR) -C software/lib/PyMockTurtle install
$(MAKE) PREFIX=$(TEMP_RELEASE_DIR) -C software/tools install
@cd $(TEMP_RELEASE_DIR) && tar -czf $(TOP_DIR)/mockturtle-software-$(VERSION).tar.gz *
@rm -r $(TEMP_RELEASE_DIR)
%:
$(MAKE) -C software $@
# SPDX-FileCopyrightText: 2022 CERN (home.cern)
#
# SPDX-License-Identifier: LGPL-2.1-or-later
fpga_synthesis:
extends: .synthesis-ise-14-7
interruptible: true
allow_failure: true
parallel:
matrix:
- EDL_CI_SYN_SRC_PATH:
- hdl/syn/spec_mt_demo
- hdl/syn/svec_mt_demo
......@@ -13,7 +13,7 @@ TOP_DIR ?= $(shell pwd)/..
TRTL ?= $(TOP_DIR)
include $(TRTL)/common.mk
DIRS = kernel lib tools include
DIRS = kernel lib lib/PyMockTurtle tools include
all: lib tools include modules
clean install: $(DIRS)
......@@ -26,7 +26,6 @@ tools: lib
.PHONY: all clean modules install modules_install $(DIRS)
.PHONY: prereq_install prereq_install_warn
.PHONY: gtags cppcheck
.PHONY: release
install modules_install: prereq_install_warn
......
......@@ -6,7 +6,9 @@ TOP_DIR ?= $(shell pwd)/../..
TRTL ?= $(TOP_DIR)
include $(TRTL)/common.mk
INCLUDEDESTDIR ?= $(PREFIX)/include
DESTDIR ?=
prefix ?= /usr/local
includedir ?= $(prefix)/include
all:
ifneq ($(wildcard ./mockturtle/hw/Makefile),) # Removed during distribution
......@@ -19,16 +21,8 @@ ifneq ($(wildcard ./mockturtle/hw/Makefile),) # Removed during distribution
endif
install: all
install -d $(INCLUDEDESTDIR)/mockturtle
install -m 0644 mockturtle/*.h $(INCLUDEDESTDIR)/mockturtle
install -d $(INCLUDEDESTDIR)/mockturtle/hw
install -m 0644 mockturtle/hw/*.h $(INCLUDEDESTDIR)/mockturtle/hw
mkdir -m 0775 -p $(DESTDIR)$(includedir)/mockturtle/hw
install -D -t $(DESTDIR)$(includedir)/mockturtle -m 0644 mockturtle/*.h
install -D -t $(DESTDIR)$(includedir)/mockturtle/hw -m 0644 mockturtle/hw/*.h
uninstall:
rm -f $(INCLUDEDESTDIR)/mockturtle/hw/*
rmdir --ignore-fail-on-non-empty $(INCLUDEDESTDIR)/mockturtle/hw
rm -f $(INCLUDEDESTDIR)/mockturtle/*
rmdir --ignore-fail-on-non-empty $(INCLUDEDESTDIR)/mockturtle
rmdir --ignore-fail-on-non-empty $(INCLUDEDESTDIR)
.PHONY: all clean install uninstall
.PHONY: all clean install
......@@ -15,13 +15,25 @@ TOP_DIR ?= $(shell pwd)/../..
TRTL ?= $(TOP_DIR)
include $(TRTL)/common.mk
SO_VERSION_XYZ := $(shell echo $(VERSION) | grep -o -E "[0-9]+\.[0-9]+\.[0-9]+")
SO_VERSION_X := $(shell echo $(SO_VERSION_XYZ) | cut -d "." -f 1)
GIT_VERSION = $(shell git describe --dirty --long --tags --always | tr -d "v")
VER_MAJOR=$(word 1,$(subst ., ,$(GIT_VERSION)))
VER_MINOR=$(word 2,$(subst ., ,$(GIT_VERSION)))
VER_PATCH=$(word 1,$(subst -, ,$(word 3,$(subst ., ,$(GIT_VERSION)))))
DESTLIBDIR ?= $(PREFIX)/lib
SO_VERSION_XYZ=$(VER_MAJOR).$(VER_MINOR).$(VER_PATCH)
SO_VERSION_X=$(VER_MAJOR)
LIBS = libmockturtle.so
LIBS_XYZ = $(LIBS).$(SO_VERSION_XYZ)
ifeq ($(SO_VERSION_X),)
SO_VERSION_X := 0
endif
DESTDIR ?=
prefix ?= /usr/local
libdir ?= $(prefix)/lib
LIBSO = libmockturtle.so
LIBSO_XYZ = $(LIBSO).$(SO_VERSION_XYZ)
LIBSO_X = $(LIBSO).$(SO_VERSION_X)
LIB = libmockturtle.a
LOBJ := libmockturtle.o
LOBJ += libmockturtle-rt-msg.o
......@@ -34,30 +46,29 @@ ARFLAGS = rcv
CPPCHECK ?= cppcheck
all: $(LIB) $(LIBS_XYZ)
all: $(LIB) $(LIBSO) $(LIBSO_XYZ)
$(LIB): $(LOBJ)
$(AR) $(ARFLAGS) $@ $^
$(LIBS_XYZ): $(LIB)
$(CC) -shared -o $@ -Wl,--whole-archive,-soname,$@ $^ -Wl,--no-whole-archive
$(LIBSO_XYZ): $(LOBJ)
$(CC) -shared $^ -Wl,-soname,$(LIBSO_X) -o $@
$(LIBSO): $(LIBSO_XYZ)
ln -sf $< $@
clean:
rm -f $(LIB) $(LIBS) $(LIBS_XYZ) .depend *.o *~
rm -f $(LIB) $(LIBSO) $(LIBSO_XYZ) $(LOBJ) .depend *.o *.so* *~
.depend: Makefile $(wildcard *.c *.h)
$(CC) $(CFLAGS) -M $(LOBJ:.o=.c) -o $@
install: $(LIB) $(LIBS_XYZ)
install -d $(DESTLIBDIR)
install -m 0644 $(LIB) $(DESTLIBDIR)
install -m 0755 $(LIBS_XYZ) $(DESTLIBDIR)
ln -sf $(LIBS_XYZ) $(DESTLIBDIR)/$(LIBS).$(SO_VERSION_X)
ln -sf $(LIBS).$(SO_VERSION_X) $(DESTLIBDIR)/$(LIBS)
uninstall:
rm -f $(DESTLIBDIR)/$(LIB) $(DESTLIBDIR)/$(LIBS_XYZ)
rmdir --ignore-fail-on-non-empty $(DESTLIBDIR)
deploy deploy-libmockturtle: install
install: $(LIB) $(LIBSO) $(LIBSO_XYZ)
mkdir -m 0775 -p $(DESTDIR)$(libdir)
install -D -t $(DESTDIR)$(libdir) -m 0755 $(LIBSO_XYZ)
install -D -t $(DESTDIR)$(libdir) -m 0644 $(LIB)
cp -d $(LIBSO) $(DESTDIR)$(libdir)
modules_install:
......@@ -68,4 +79,4 @@ cppcheck:
--enable=warning,style,information,missingInclude \
*.c *.h --error-exitcode=1
.PHONY: all clean cppcheck install uninstall modules_install
.PHONY: all clean cppcheck install modules_install
......@@ -5,3 +5,4 @@
*.pyc
build
MANIFEST
PyMockTurtle.egg-info
......@@ -10,9 +10,26 @@ include $(TRTL)/common.mk
PYTHON ?= python
GIT_VERSION = $(shell git describe --dirty --long --tags --always | tr -d "v")
VER_MAJOR=$(word 1,$(subst ., ,$(GIT_VERSION)))
VER_MINOR=$(word 2,$(subst ., ,$(GIT_VERSION)))
VER_PATCH=$(word 1,$(subst -, ,$(word 3,$(subst ., ,$(GIT_VERSION)))))
VERSION=$(VER_MAJOR).$(VER_MINOR).$(VER_PATCH)
DESTDIR ?=
prefix ?= /usr/local
libdir ?= $(prefix)/lib
pythondir ?= $(libdir)/python
all:
clean:
rm -rf dist *.egg-info
deploy deploy-pymockturtle: install
install:
VERSION=$(VERSION) $(PYTHON) setup.py install --prefix $(PREFIX)
python -m pip install build
VERSION=$(VERSION) python -m build -o $(DESTDIR)$(pythondir)
.PHONY: all clean install
......@@ -196,7 +196,8 @@ struct trtl_dev *trtl_open(const char *device)
trtl = malloc(sizeof(struct trtl_desc));
if (!trtl)
return NULL;
strncpy(trtl->name, device, TRTL_NAME_LEN);
/* device names are trtl-%04x and TRTL_NAME_LEN is 16, this is safe. */
strncpy(trtl->name, device, TRTL_NAME_LEN - 1);
ret = sscanf(trtl->name, "trtl-%"SCNx32, &trtl->devid);
if (ret != 1) {
......@@ -518,7 +519,7 @@ int trtl_cpu_load_application_raw(struct trtl_dev *trtl,
struct trtl_desc *wdesc = (struct trtl_desc *)trtl;
char path[TRTL_PATH_LEN + TRTL_NAME_LEN + 1 + 3];
int fd;
ssize_t ret;
ssize_t ret = 0;
size_t i = 0;
snprintf(path, sizeof(path), "%s/%s-%02u",
......
......@@ -15,7 +15,10 @@ TOP_DIR ?= $(shell pwd)/../..
TRTL ?= $(TOP_DIR)
include $(TRTL)/common.mk
BINDESTDIR ?= $(PREFIX)/bin
DESTDIR ?=
prefix ?= /usr/local
exec_prefix ?= $(prefix)
bindir ?= $(exec_prefix)/bin
CFLAGS += -Wall -Werror
CFLAGS += -I$(TRTL_SW)/include
......@@ -37,13 +40,10 @@ CPPCHECK ?= cppcheck
all: $(PROGS)
deploy deploy-progs: install
install: $(PROGS)
install -d $(BINDESTDIR)
install -m 0755 $(PROGS) $(BINDESTDIR)
uninstall:
rm -f $(addprefix $(BINDESTDIR)/,$(PROGS))
rmdir --ignore-fail-on-non-empty $(BINDESTDIR)
mkdir -m 0775 -p $(DESTDIR)$(bindir)
install -D -t $(DESTDIR)$(bindir) -m 0555 $(PROGS)
%: %.c $(TRTL_SW)/lib/libmockturtle.a
$(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@ $(LDLIBS)
......
......@@ -13,8 +13,8 @@ test_on_hw:
# unfortunately the $CARD variable cannot be expanded here
- "fpga_synthesis: [hdl/syn/spec_mt_demo]"
- "fpga_synthesis: [hdl/syn/svec_mt_demo]"
- "build-drivers-cc7"
- "build-software-cc7"
- "software_build: [build-fec-sw, 3.10.0-957.1.3.rt56.913.el7.x86_64, L867]"
- "test_fw_build"
tags:
- fec-runner
- card-$CARD
......@@ -23,7 +23,6 @@ test_on_hw:
_BASE_DEST: $CI_PROJECT_DIR/$EDL_CI_EOS_OUTPUT_DIR
_BITSTREAM_DEST: $_BASE_DEST/bitstreams
_SW_DEST: $_BASE_DEST/software
_DRV_DEST: $_BASE_DEST/driver
rules:
- if: $CARD == "spec"
variables:
......@@ -44,11 +43,11 @@ test_on_hw:
- rmmod $CARD-fmc-carrier || true
- sh /usr/local/drivers/scripts/${CARD}_fmc_carrier_install.sh
- export TMP_DIR=$(mktemp -d)
- tar xvf $_SW_DEST/mockturtle-software-*.tar.gz -C $TMP_DIR/
- mkdir -p $TMP_DIR/lib/modules
- cp -r /usr/local/lib/modules/$(uname -r) $TMP_DIR/lib/modules
- cp -r $_DRV_DEST/lib/modules/$(uname -r) $TMP_DIR/lib/modules
- export MODPROBE_ROOT=$TMP_DIR
- mkdir -p $TMP_DIR/usr/lib/modules
- cp -r /usr/local/lib/modules/$(uname -r) $TMP_DIR/usr/lib/modules
- find $TMP_DIR/usr/lib/modules -name mockturtle*.ko -delete
- tar xvf $_SW_DEST/mockturtle-software-L867.tar.xz -C $TMP_DIR/
- export MODPROBE_ROOT=$TMP_DIR/usr
- depmod -b $MODPROBE_ROOT
- export FIRMWARE_PATH=$TMP_DIR/bitstreams
- mkdir -p $FIRMWARE_PATH
......@@ -70,16 +69,16 @@ test_on_hw:
- modprobe -d $MODPROBE_ROOT mockturtle
- modprobe -d $MODPROBE_ROOT mockturtle-${CARD}-demo
- export MT_NODE=$(ls -d /sys/bus/platform/devices/id\:$VID$PID.*/mock-turtle.* | cut -d '.' -f 4)
- export LD_LIBRARY_PATH=$TMP_DIR/lib
- export LD_LIBRARY_PATH=$TMP_DIR/usr/local/lib
- source /acc/local/share/python/acc-py/base/pro/setup.sh
- acc-py venv $TMP_DIR/venv
- source $TMP_DIR/venv/bin/activate
- pip install software/lib/PyMockTurtle
- pip install $TMP_DIR/usr/local/lib/python/PyMockTurtle-*.whl
- pip install -r tests/requirements.txt
script:
- tail -n +1 /sys/kernel/debug/$DEVID/fpga_device_metadata
- tail -n +1 /sys/kernel/debug/$DEVID/$FPGAID/build_info
- $TMP_DIR/bin/lsmockturtle
- $TMP_DIR/usr/local/bin/lsmockturtle
- cd tests
- pytest --id $MT_NODE --junitxml=./pytest.xml
artifacts:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment