diff --git a/lib/c/2014/Makefile b/lib/c/2014/Makefile index b18a9e469ed7c24e8c845138c5adb2db856ae180..0b0d0ee3cfd33b38962cf5e231efdd572e31c8a4 100644 --- a/lib/c/2014/Makefile +++ b/lib/c/2014/Makefile @@ -2,10 +2,10 @@ VERSION=2014 LIBVERSION=2014 -include ../os_compat.mk - ALL_DEPS=../liblabcomm$(LIBVERSION).a ../liblabcomm$(LIBVERSION).so +include ../os_compat.mk + # TODO: Support for Codesourcery ARM toolchain. OBJS=labcomm$(VERSION).o \ diff --git a/lib/c/2014/labcomm2014_compat_vxworks.h b/lib/c/2014/labcomm2014_compat_vxworks.h index ab32a5025c28d3a51c551f234291441ee9ebf7df..94b161f19b77cc29f67e20b0c8257081617df033 100644 --- a/lib/c/2014/labcomm2014_compat_vxworks.h +++ b/lib/c/2014/labcomm2014_compat_vxworks.h @@ -10,6 +10,7 @@ #include <types.h> #include <timers.h> #include <stdio.h> +#include <limits.h> #include <private/stdioP.h> #ifdef __INT64_MAX__ diff --git a/lib/c/os_compat.mk b/lib/c/os_compat.mk index 505c7a2f930b639e22f140698b62cb1ab12d9a8a..5f5bbf28cc1fb07de635f5394a0c2b74c604bd94 100644 --- a/lib/c/os_compat.mk +++ b/lib/c/os_compat.mk @@ -3,41 +3,28 @@ UNAME_S=$(shell uname -s) VERSION=2014 LIBVERSION=2014 -ifeq ($(UNAME_S),Linux) - CC=$(CROSS_COMPILE)gcc - LD=$(CROSS_COMPILE)gcc - CFLAGS=-std=c99 -g -Wall -Werror -O3 -I. - CFLAGS_TEST=$(CFLAGS) -Itest - LDFLAGS=-L.. - LDLIBS=-llabcomm$(LIBVERSION) -lrt +CC=$(CROSS_COMPILE)gcc +LD=$(CROSS_COMPILE)gcc +CFLAGS=-std=c99 -g -Wall -Werror -O3 -I. +CFLAGS_TEST=$(CFLAGS) -Itest -DVERSION=$(VERSION) +LDFLAGS=-L.. +LDLIBS=-llabcomm$(LIBVERSION) + +ifeq ($(CROSS_COMPILE),i586-wrs-vxworks-) + ALL_DEPS:=$(filter-out %.so, $(ALL_DEPS)) # PIC is only supported for RTPs + CFLAGS:=$(CFLAGS) -DLABCOMM_COMPAT=\"labcomm$(VERSION)_compat_vxworks.h\" +else ifeq ($(UNAME_S),Linux) + LDLIBS+=-lrt MAKESHARED=gcc -o $1 -shared -Wl,-soname,$2 $3 -lc -lrt else ifeq ($(UNAME_S),Darwin) - #CC=$(CROSS_COMPILE)clang - #LD=$(CROSS_COMPILE)ld - CC=$(CROSS_COMPILE)gcc - LD=$(CROSS_COMPILE)gcc - CFLAGS=-g -Wall -Werror -O3 -I. -Itest \ - -DLABCOMM_COMPAT=\"labcomm$(VERSION)_compat_osx.h\" \ - -DLABCOMM_OS_DARWIN=1 \ - -Wno-unused-function -# -Wno-tautological-compare - CFLAGS+=-std=c99 - LDFLAGS=-L.. - LDLIBS=-llabcomm$(LIBVERSION) + CFLAGS+=-DLABCOMM_COMPAT=\"labcomm$(VERSION)_compat_osx.h\" \ + -DLABCOMM_OS_DARWIN=1 \ + -Wno-unused-function MAKESHARED=clang -o $1 -shared -Wl,-install_name,$2 $3 -lc else ifneq ($(findstring CYGWIN,$(UNAME_S)),) - CC=$(CROSS_COMPILE)gcc - LD=$(CROSS_COMPILE)ld - CFLAGS=-std=c99 -g -Wall -Werror -O3 -I. - LDFLAGS=-L.. - LDLIBS=-llabcomm$(LIBVERSION) -lrt - ALL_DEPS:=$(filter-out %.so.1, $(ALL_DEPS)) # No -fPIC supported in windows? + LDLIBS+=-lrt + ALL_DEPS:=$(filter-out %.so, $(ALL_DEPS)) # No -fPIC supported in windows? else $(error Unknown system $(UNAME_S)) endif -CFLAGS_TEST=$(CFLAGS) -Itest -DVERSION=$(VERSION) -ifeq ($(CROSS_COMPILE),i586-wrs-vxworks-) - ALL_DEPS:=$(filter-out %.so.1, $(ALL_DEPS)) # PIC is only supported for RTPs - CFLAGS:=$(CFLAGS) -DLABCOMM_COMPAT=\"labcomm_compat_vxworks.h\" -endif diff --git a/packaging/.gitignore b/packaging/.gitignore index f73a06a537d57c357f8017e7e94d6ce760036400..0f566f5289718341319789172bcd50842750c827 100644 --- a/packaging/.gitignore +++ b/packaging/.gitignore @@ -1,2 +1,2 @@ -labcomm2014-*.src.rpm +*labcomm2014-*.src.rpm rpmbuild diff --git a/packaging/make_srpm b/packaging/make_srpm index ef2dced94616eba28395d25e3447c9735f9ed5c8..97e7298bae54c8f6366d13502f5ba4ce50499583 100755 --- a/packaging/make_srpm +++ b/packaging/make_srpm @@ -9,7 +9,7 @@ Summary: LabComm communication protocol License: GPLv3 # https://gitlab.control.lth.se/anders_blomdell/labcomm/repository/archive.tar.gz?__COMMIT__ -Source0: labcomm.__DESCRIBE__.tar.gz +Source0: labcomm__DESCRIBE__.tar.gz BuildRequires: gcc BuildRequires: ant @@ -17,6 +17,8 @@ BuildRequires: java BuildRequires: java-devel BuildRequires: mono-core BuildRequires: python2-devel +# valgrind needed for %check +BuildRequires: valgrind %description LabComm communication protocol @@ -28,7 +30,6 @@ Requires: %{name} = %{version}-%{release} %description devel LabComm communication protocol -% %prep %setup -q -c -a 0 @@ -72,6 +73,9 @@ install -m u=r,g=r,o=r lib/csharp/labcomm2014.dll ${RPM_BUILD_ROOT}/usr/lib install -d ${RPM_BUILD_ROOT}/%{python2_sitelib}/labcomm2014 install lib/python/labcomm2014/* ${RPM_BUILD_ROOT}/%{python2_sitelib}/labcomm2014 +%check +make test + %files %defattr (-, root, root) %exclude /usr/lib/debug @@ -88,6 +92,54 @@ install lib/python/labcomm2014/* ${RPM_BUILD_ROOT}/%{python2_sitelib}/labcomm201 EOF } +cross_spec() { +cat << 'EOF' +%define _libdir __LIBDIR__ +%define _includedir __INCLUDEDIR__ +# No debug package for cross-compiled library +%global debug_package %{nil} + +Name: __CROSS_COMPILE__-labcomm__SUFFIX__ +Version: __VERSION__ +Release: 1 +Summary: LabComm communication protocol +License: GPLv3 + +# https://gitlab.control.lth.se/anders_blomdell/labcomm/repository/archive.tar.gz?__COMMIT__ +Source0: labcomm__DESCRIBE__.tar.gz + +BuildRequires: __CROSS_COMPILE__-gcc + +%description +LabComm communication protocol + +%prep +%setup -q -c -a 0 + +%build +pwd +cd lib/c/__SUFFIX__ +WIND_BASE=__WIND_BASE__ \ + make CROSS_COMPILE=__CROSS_COMPILE__- + +%install +# +# C +# +install -d ${RPM_BUILD_ROOT}/%{_libdir} +install lib/c/liblabcomm2014.a ${RPM_BUILD_ROOT}/%{_libdir}/ +install -d ${RPM_BUILD_ROOT}/%{_includedir}/labcomm +install lib/c/2014/*h ${RPM_BUILD_ROOT}/%{_includedir}/labcomm + + +%files +%defattr (-, root, root) +%_libdir/ +%_includedir/ + +EOF +} + # Create a suitable directory for rpmbuild rm -rf rpmbuild mkdir -p rpmbuild/BUILD @@ -97,22 +149,54 @@ mkdir -p rpmbuild/SRPMS mkdir -p rpmbuild/SOURCES rm -rf rpmbuild/SOURCES/* -# Create spec and .tar.gz +# Define useful variables from git version DESCRIBE=$(git describe | sed -e 's/^v\(.*\)/\1/') SUFFIX=$(echo ${DESCRIBE} | sed -e 's/^\([^.]*\)[.].*$/\1/g') VERSION=$(echo ${DESCRIBE} | sed -e 's/^[^.]*[.]\(.*\)/\1/g;s/-/./g') COMMIT=$(git rev-parse HEAD) + +# Create .tar.gz +( + cd $(git rev-parse --show-toplevel) + git archive --format tar HEAD +) > rpmbuild/SOURCES/labcomm${DESCRIBE}.tar.gz + +# Create spec and .src.rpm ( spec | \ sed -e "s/__SUFFIX__/${SUFFIX}/g" | \ sed -e "s/__VERSION__/${VERSION}/g" | \ sed -e "s/__DESCRIBE__/${DESCRIBE}/g" | \ - sed -e "s/__COMMIT__/${COMMIT}/g" \ -) > rpmbuild/SPECS/labcomm.spec -( - cd $(git rev-parse --show-toplevel) - git archive --format tar HEAD -) > rpmbuild/SOURCES/labcomm.${DESCRIBE}.tar.gz + sed -e "s/__COMMIT__/${COMMIT}/g" +) > rpmbuild/SPECS/labcomm${SUFFIX}-${VERSION}.spec rpmbuild --define "_topdir $(pwd)/rpmbuild" \ - -bs rpmbuild/SPECS/labcomm.spec 2>&1 | sed -e 's|rpmbuild/SRPMS/||g' + -bs rpmbuild/SPECS/labcomm${SUFFIX}-${VERSION}.spec 2>&1 \ + | sed -e 's|rpmbuild/SRPMS/||g' + +# Create cross compilation spec and .src.rpm +(cat << 'EOF' +i586-wrs-vxworks /opt/robot/include/vxworks/5.5.1/ +EOF +) | while read C_C W_B ; do + L_D=/usr/${C_C}/lib + I_D=/usr/${C_C}/include + echo "CROSS_COMPILE=${C_C}" + echo "LIBDIR=${L_D}" + echo "INCLUDEDIR=${L_D}" + echo "WIND_BASE=${W_B}" + (set -x + cross_spec \ + | sed -e "s|__SUFFIX__|${SUFFIX}|g" \ + | sed -e "s|__VERSION__|${VERSION}|g" \ + | sed -e "s|__DESCRIBE__|${DESCRIBE}|g" \ + | sed -e "s|__COMMIT__|${COMMIT}|g" \ + | sed -e "s|__CROSS_COMPILE__|${C_C}|g" \ + | sed -e "s|__WIND_BASE__|${W_B}|g" \ + | sed -e "s|__LIBDIR__|${L_D}|g" \ + | sed -e "s|__INCLUDEDIR__|${I_D}|g" + ) > rpmbuild/SPECS/${C_C}-labcomm${SUFFIX}-${VERSION}.spec + rpmbuild --define "_topdir $(pwd)/rpmbuild" \ + -bs rpmbuild/SPECS/${C_C}-labcomm${SUFFIX}-${VERSION}.spec 2>&1 \ + | sed -e 's|rpmbuild/SRPMS/||g' +done mv rpmbuild/SRPMS/* .