From cde6fa285725aa9ec03c030f1fff8101048aed7c Mon Sep 17 00:00:00 2001
From: Ruslan Bukin
Date: Wed, 4 Apr 2018 14:31:56 +0000
Subject: [PATCH] Add new shared library -- libopencsd.
OpenCSD is an ARM CoreSight(tm) trace packets decoder.
- Connect libopencsd to the arm64 build.
- Install opencsd headers to /usr/include/opencsd/
Sponsored by: DARPA, AFRL
---
etc/mtree/BSD.include.dist | 12 +++
lib/Makefile | 4 +
lib/libopencsd/Makefile | 175 +++++++++++++++++++++++++++++++++++++
share/mk/bsd.libnames.mk | 1 +
share/mk/src.libnames.mk | 2 +
5 files changed, 194 insertions(+)
create mode 100644 lib/libopencsd/Makefile
diff --git a/etc/mtree/BSD.include.dist b/etc/mtree/BSD.include.dist
index cf184592fbf..fbffe0ece86 100644
--- a/etc/mtree/BSD.include.dist
+++ b/etc/mtree/BSD.include.dist
@@ -317,6 +317,18 @@
..
nfsserver
..
+ opencsd
+ c_api
+ ..
+ etmv3
+ ..
+ etmv4
+ ..
+ ptm
+ ..
+ stm
+ ..
+ ..
openssl
..
pcap
diff --git a/lib/Makefile b/lib/Makefile
index a4fc9638df6..b8ccf56df10 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -175,6 +175,10 @@ SUBDIR.${MK_NIS}+= libypclnt
_libvgl= libvgl
.endif
+.if ${MACHINE_CPUARCH} == "aarch64"
+SUBDIR.${MK_PMC}+= libopencsd
+.endif
+
.if ${MACHINE_CPUARCH} == "amd64"
SUBDIR.${MK_PMC}+= libipt
SUBDIR.${MK_BHYVE}+= libvmmapi
diff --git a/lib/libopencsd/Makefile b/lib/libopencsd/Makefile
new file mode 100644
index 00000000000..b151c53543d
--- /dev/null
+++ b/lib/libopencsd/Makefile
@@ -0,0 +1,175 @@
+# $FreeBSD$
+
+PACKAGE=lib${LIB}
+SHLIBDIR?= /lib
+
+.include
+
+OPENCSDSRC= ${SRCTOP}/contrib/opencsd
+
+.PATH: ${OPENCSDSRC}/decoder/source/etmv4/ \
+ ${OPENCSDSRC}/decoder/source/etmv3/ \
+ ${OPENCSDSRC}/decoder/source/pkt_printers/ \
+ ${OPENCSDSRC}/decoder/source/mem_acc/ \
+ ${OPENCSDSRC}/decoder/source/i_dec/ \
+ ${OPENCSDSRC}/decoder/source/c_api/ \
+ ${OPENCSDSRC}/decoder/source/ptm/ \
+ ${OPENCSDSRC}/decoder/source/stm/ \
+ ${OPENCSDSRC}/decoder/source/ \
+ ${OPENCSDSRC}/decoder/include/opencsd/etmv4/ \
+ ${OPENCSDSRC}/decoder/include/opencsd/etmv3/ \
+ ${OPENCSDSRC}/decoder/include/opencsd/stm/ \
+ ${OPENCSDSRC}/decoder/include/opencsd/ptm/ \
+ ${OPENCSDSRC}/decoder/include/opencsd/c_api/ \
+ ${OPENCSDSRC}/decoder/include/opencsd/ \
+ ${OPENCSDSRC}/decoder/include
+
+LIB= opencsd
+SHLIB_MAJOR=0
+
+# ETMv3
+SRCS= \
+ trc_cmp_cfg_etmv3.cpp \
+ trc_pkt_decode_etmv3.cpp \
+ trc_pkt_elem_etmv3.cpp \
+ trc_pkt_proc_etmv3.cpp \
+ trc_pkt_proc_etmv3_impl.cpp
+
+# ETMv4
+SRCS+= \
+ trc_cmp_cfg_etmv4.cpp \
+ trc_etmv4_stack_elem.cpp \
+ trc_pkt_decode_etmv4i.cpp \
+ trc_pkt_elem_etmv4d.cpp \
+ trc_pkt_elem_etmv4i.cpp \
+ trc_pkt_proc_etmv4.cpp \
+ trc_pkt_proc_etmv4i_impl.cpp
+
+# PKT_PRINTERS
+SRCS+= \
+ raw_frame_printer.cpp \
+ trc_print_fact.cpp
+
+# PTM
+SRCS+= \
+ trc_cmp_cfg_ptm.cpp \
+ trc_pkt_decode_ptm.cpp \
+ trc_pkt_elem_ptm.cpp \
+ trc_pkt_proc_ptm.cpp
+
+# STM
+SRCS+= \
+ trc_pkt_decode_stm.cpp \
+ trc_pkt_elem_stm.cpp \
+ trc_pkt_proc_stm.cpp
+
+# C_API
+SRCS+= \
+ ocsd_c_api_custom_obj.cpp \
+ ocsd_c_api.cpp
+
+# SRC
+SRCS+= \
+ ocsd_code_follower.cpp \
+ ocsd_dcd_tree.cpp \
+ ocsd_error.cpp \
+ ocsd_error_logger.cpp \
+ ocsd_gen_elem_list.cpp \
+ ocsd_lib_dcd_register.cpp \
+ ocsd_msg_logger.cpp \
+ ocsd_version.cpp \
+ trc_component.cpp \
+ trc_core_arch_map.cpp \
+ trc_frame_deformatter.cpp \
+ trc_gen_elem.cpp \
+ trc_printable_elem.cpp \
+ trc_ret_stack.cpp
+
+# MEM_ACC
+SRCS+= \
+ trc_mem_acc_base.cpp \
+ trc_mem_acc_cb.cpp \
+ trc_mem_acc_mapper.cpp \
+ trc_mem_acc_bufptr.cpp \
+ trc_mem_acc_file.cpp
+
+# I_DEC
+SRCS+= \
+ trc_i_decode.cpp \
+ trc_idec_arminst.cpp
+
+CFLAGS+= \
+ -I${OPENCSDSRC}/decoder/include/ \
+ -I${.CURDIR}
+
+INCS= \
+ ocsd_if_types.h \
+ trc_gen_elem_types.h \
+ trc_pkt_types.h
+
+INCSDIR=${INCLUDEDIR}/opencsd
+
+APIINCS= \
+ ocsd_c_api_cust_fact.h \
+ ocsd_c_api_cust_impl.h \
+ ocsd_c_api_custom.h \
+ ocsd_c_api_types.h \
+ opencsd_c_api.h
+
+APIINCSDIR=${INCLUDEDIR}/opencsd/c_api/
+
+ETMV4INCS= \
+ etmv4_decoder.h \
+ trc_cmp_cfg_etmv4.h \
+ trc_dcd_mngr_etmv4i.h \
+ trc_etmv4_stack_elem.h \
+ trc_pkt_decode_etmv4i.h \
+ trc_pkt_elem_etmv4d.h \
+ trc_pkt_elem_etmv4i.h \
+ trc_pkt_proc_etmv4.h \
+ trc_pkt_types_etmv4.h
+
+ETMV4INCSDIR=${INCLUDEDIR}/opencsd/etmv4/
+
+ETMV3INCS= \
+ etmv3_decoder.h \
+ trc_cmp_cfg_etmv3.h \
+ trc_dcd_mngr_etmv3.h \
+ trc_pkt_decode_etmv3.h \
+ trc_pkt_elem_etmv3.h \
+ trc_pkt_proc_etmv3.h \
+ trc_pkt_types_etmv3.h
+
+ETMV3INCSDIR=${INCLUDEDIR}/opencsd/etmv3/
+
+PTMINCS= \
+ ptm_decoder.h \
+ trc_cmp_cfg_ptm.h \
+ trc_dcd_mngr_ptm.h \
+ trc_pkt_decode_ptm.h \
+ trc_pkt_elem_ptm.h \
+ trc_pkt_proc_ptm.h \
+ trc_pkt_types_ptm.h
+
+PTMINCSDIR=${INCLUDEDIR}/opencsd/ptm/
+
+STMINCS= \
+ stm_decoder.h \
+ trc_cmp_cfg_stm.h \
+ trc_dcd_mngr_stm.h \
+ trc_pkt_decode_stm.h \
+ trc_pkt_elem_stm.h \
+ trc_pkt_proc_stm.h \
+ trc_pkt_types_stm.h
+
+STMINCSDIR=${INCLUDEDIR}/opencsd/stm/
+
+INCSGROUPS=INCS APIINCS ETMV3INCS ETMV4INCS PTMINCS STMINCS
+
+LIBADD= cxxrt
+
+WARNS?= 1
+
+HAS_TESTS=
+
+.include
diff --git a/share/mk/bsd.libnames.mk b/share/mk/bsd.libnames.mk
index c9072411739..f15ed551f94 100644
--- a/share/mk/bsd.libnames.mk
+++ b/share/mk/bsd.libnames.mk
@@ -118,6 +118,7 @@ LIBNETGRAPH?= ${LIBDESTDIR}${LIBDIR_BASE}/libnetgraph.a
LIBNGATM?= ${LIBDESTDIR}${LIBDIR_BASE}/libngatm.a
LIBNV?= ${LIBDESTDIR}${LIBDIR_BASE}/libnv.a
LIBNVPAIR?= ${LIBDESTDIR}${LIBDIR_BASE}/libnvpair.a
+LIBOPENCSD?= ${LIBDESTDIR}${LIBDIR_BASE}/libopencsd.a
LIBOPENSM?= ${LIBDESTDIR}${LIBDIR_BASE}/libopensm.a
LIBOPIE?= ${LIBDESTDIR}${LIBDIR_BASE}/libopie.a
LIBOSMCOMP?= ${LIBDESTDIR}${LIBDIR_BASE}/libosmcomp.a
diff --git a/share/mk/src.libnames.mk b/share/mk/src.libnames.mk
index 48d8089b535..c6ee3b5fef3 100644
--- a/share/mk/src.libnames.mk
+++ b/share/mk/src.libnames.mk
@@ -135,6 +135,7 @@ _LIBRARIES= \
ngatm \
nv \
nvpair \
+ opencsd \
opie \
pam \
panel \
@@ -307,6 +308,7 @@ _DP_gssapi_krb5+= gssapi krb5 crypto roken asn1 com_err
_DP_lzma= pthread
_DP_ucl= m
_DP_vmmapi= util
+_DP_opencsd= cxxrt
_DP_ctf= z
_DP_dtrace= ctf elf proc pthread rtld_db
_DP_xo= util