+++ /dev/null
-# Pacakge Information for pkg-config, for host program developers
-
-prefix=@PREFIX@
-exec_prefix=@EXEC_PREFIX@
-libdir=@LIB_INSTALL_DIR@
-includedir=@INCLUDE_INSTALL_DIR@
-
-Name: npuhost
-Description: Host Dev Kit of Samsung Research NPU
-Version: @VERSION@
-Requires:
-Libs: -L${libdir} -lnpuhost
-Cflags: -I${includedir}/npuhost
+++ /dev/null
-[main]
-resv_mem_size = 512M
-working_dir = /
-log_dir = /
-
+++ /dev/null
-subdir('src')
+++ /dev/null
-# DO NOTHING, YET
ne_prefix = get_option('prefix')
ne_libdir = join_paths(ne_prefix, get_option('libdir'))
ne_bindir = join_paths(ne_prefix, get_option('bindir'))
+ne_includedir = join_paths(ne_prefix, get_option('includedir'))
ne_inidir = get_option('sysconfdir')
-ne_common_inc = include_directories('../common/include')
+ne_common_inc = include_directories('include/common')
+ne_host_inc = include_directories('include/host')
libdl_dep = cc.find_library('dl') # DL library
libm_dep = cc.find_library('m') # math library
thread_dep = dependency('threads') # pthread library
iniparser_dep = dependency('iniparser') # iniparser library
-subdir('host')
-subdir('core')
+subdir('src')
comm_opt = get_option('comm_opt')
# Build final exported so
plugin_ip_executable = shared_library('npu-engine',
dependencies: ne_dependencies,
- install : false)
+ install : true,
+ install_dir: ne_libdir)
endif
+
+# Set configuration to install .ini
+ne_install_conf = configuration_data()
+
+ne_install_conf.set('VERSION', meson.project_version())
+ne_install_conf.set('PREFIX', ne_prefix)
+ne_install_conf.set('EXEC_PREFIX', ne_bindir)
+ne_install_conf.set('LIB_INSTALL_DIR', ne_libdir)
+ne_install_conf.set('INCLUDE_INSTALL_DIR', ne_includedir)
+
+ne_install_conf.set('RESV_MEM_SIZE', get_option('resv_mem_size'))
+ne_install_conf.set('WORKING_DIR', get_option('working_dir'))
+ne_install_conf.set('LOG_DIR', get_option('log_dir'))
+ne_install_conf.set('TEST_MODE', get_option('enable_test_mode'))
+
+# Install .ini
+configure_file(input: 'npu-engine.ini.in', output: 'npu-engine.ini',
+ install_dir: ne_inidir,
+ configuration: ne_install_conf)
+
+# Install .pc
+configure_file(input: 'npu-engine.pc.in', output: 'npu-engine.pc',
+ install_dir: join_paths(ne_libdir, 'pkgconfig'),
+ configuration: ne_install_conf)
+
+# Install headers
+ne_install_headers = [
+ 'include/common/npubinfmt.h',
+ 'include/common/typedef.h',
+ 'include/host/libnpuhost.h',
+]
+
+install_headers(ne_install_headers, subdir: 'npuengine')
option('comm_opt', type : 'combo', choices : ['ip', 'fm'], value : 'ip')
+option('resv_mem_size', type : 'string', value : '512M')
+option('working_dir', type : 'string', value : '/tmp/')
+option('log_dir', type : 'string', value : '/tmp')
+option('enable_test_mode', type : 'boolean', value : false)
--- /dev/null
+[main]
+resv_mem_size=@RESV_MEM_SIZE@
+working_dir=@WORKING_DIR@
+log_dir=@LOG_DIR@
+test_mode=@TEST_MODE@
--- /dev/null
+# Package Information for pkg-config, for npu engine developers
+
+prefix=@PREFIX@
+exec_prefix=@EXEC_PREFIX@
+libdir=@LIB_INSTALL_DIR@
+includedir=@INCLUDE_INSTALL_DIR@
+
+Name: npuengine
+Description: NPU Engine Dev Kit of Samsung Research NPU
+Version: @VERSION@
+Requires:
+Libs: -L${libdir} -lnpuengine
+Cflags: -I${includedir}/npuengine
-Name: npu-systemservice
+%define neexampledir %{_libdir}/npu-engine/bin
+
+Name: npu-engine
Summary: NPU Engine
Version: 0.0.1
Release: 1
Group: System Environment/Daemons
Packager: MyungJoo Ham <myungjoo.ham@samsung.com>
License: Proprietary
-Source0: npu-systemservice-%{version}.tar.gz
+Source0: npu-engine-%{version}.tar.gz
BuildRequires: meson
BuildRequires: ninja
CFLAGS="${CFLAGS} -fprofile-arcs -ftest-coverage"
%endif
-meson build
+meson build --prefix=%{_prefix} --sysconfdir=%{_sysconfdir} --libdir=%{_libdir} --includedir=%{_includedir} --bindir=%{neexampledir}
ninja -C build %{?_smp_mflags}
%install
-# @todo (NYI) install three times for the three different transport plugins for npu-engine
-
# Install Core (NPU-Engine)
-ninja install -C build
-
-# Install common headers for devel package (need PR #29 and #3)
-# @todo headers to be exported should be maintained by meson script. This script is temporaily used until meson scripts are well maintained.
-mkdir -p %{buildroot}%{_includedir}/npuhost
-install -m 0644 common/include/typedef.h %{buildroot}%{_includedir}/npuhost/
-install -m 0644 common/include/npubinfmt.h %{buildroot}%{_includedir}/npuhost/
-
-# Process pkg-config for devel package
-cp common/npuhost.pc.in common/npuhost.pc
-sed -i "s|@PREFIX@|%{_prefix}|" common/npuhost.pc
-sed -i "s|@EXEC_PREFIX@|%{_bindir}|" common/npuhost.pc
-sed -i "s|@LIB_INSTALL_DIR@|%{_libdir}|" common/npuhost.pc
-sed -i "s|@INCLUDE_INSTALL_DIR@|%{_includedir}|" common/npuhost.pc
-sed -i "s|@VERSION@|%{version}-%{release}|" common/npuhost.pc
-
-# Install pkg-config for devel package
-mkdir -p %{buildroot}%{_libdir}/pkgconfig
-install -m 0644 common/npuhost.pc %{buildroot}%{_libdir}/pkgconfig/
+DESTDIR=%{buildroot} ninja install -C build %{?_smp_mflags}
# Perform unit tests
%check
%if 0%{?unit_test}
- pushd build/core
- ./test/unittest_ne_mem
- ./test/unittest_ne_utils
- # add more unit tests...
+ pushd build/src/test
+ find . -maxdepth 1 -type f -perm 0755 -print0 | while IFS= read -r -d $'\0' unittest_exec; do
+ ./${unittest_exec}
+ done
popd
%endif
# Analyze test coverage
%if 0%{?test_coverage}
# 'lcov' generates the date format with UTC time zone by default. Let's replace UTC with KST
TZ='Asia/Seoul'; export TZ
- $(pwd)/core/test/unittestcoverage.py module $(pwd)/core
+ $(pwd)/src/test/unittestcoverage.py module $(pwd)/core
# Get commit info
- VCS=`cat ${RPM_SOURCE_DIR}/nnstreamer.spec | grep "^VCS:" | sed "s|VCS:\\W*\\(.*\\)|\\1|"`
+ VCS=`cat ${RPM_SOURCE_DIR}/npu-engine.spec | grep "^VCS:" | sed "s|VCS:\\W*\\(.*\\)|\\1|"`
# Create human readable unit test coverate report web page
cp -r result %{buildroot}%{_datadir}/unittest/
%endif
-%package -n npu-engine-fs
-Summary: NPU Engine Daemon for NPU-Fast-Model (File System Transport)
-Provides: npu-engine = %{version}-%{release}
-Conflicts: npu-engine-ip
-Conflicts: npu-engine-usb
-# Requires some usb library
-%description -n npu-engine-fs
-This is the core daemon in the npu device with the Fast Model simulator.
-%files -n npu-engine-fs
-
-%package -n npu-engine-usb
-Summary: NPU Engine Daemon for NPU-USB
-Provides: npu-engine = %{version}-%{release}
-Conflicts: npu-engine-ip
-Conflicts: npu-engine-fs
-# Requires some usb library
-%description -n npu-engine-usb
-This is the core daemon in the npu USB device.
-%files -n npu-engine-usb
-
-%package -n npu-engine-ip
-Summary: NPU Engine Daemon for NPU-SOC-IP
-Provides: npu-engine = %{version}-%{release}
-Conflicts: npu-engine-usb
-Conflicts: npu-engine-fs
-# Requires some IPC and DMABUF library
-%description -n npu-engine-ip
-This is the core daemon in the npu SoC-IP device.
-%files -n npu-engine-ip
-
-%package -n libnpu-host
-Summary: NPU Host Library
-%description -n libnpu-host
-Library for host machines to execute nerual network models with NPUs.
-%files -n libnpu-host
-
-%package -n libnpu-host-devel
-Summary: Development Support for NPU Host Library
-Requires: libnpu-host = %{version}-%{release}
-%description -n libnpu-host-devel
-Developmental packages to develop programs using libnpu-host.
-%files -n libnpu-host-devel
-%{_includedir}/npuhost/*.h
+%files
+%%defattr(-,root,root,-)
+%{_libdir}/libnpu-engine.so
+%{_sysconfdir}/npu-engine.ini
+
+%package devel
+Summary: Development Support for NPU Engine Library
+Requires: npu-engine = %{version}-%{release}
+%description devel
+Developmental packages to develop programs using npu-engine.
+This contains corresponding header files and .pc pkgconfig file.
+%files devel
+%{_includedir}/npuengine/*.h
%{_libdir}/pkgconfig/*.pc
-%package -n unittest-coverage
+%package unittest-coverage
Summary: NPU Engine UnitTest Coverage Analysis Result
-%description -n unittest-coverage
-HTML pages of lcov results of NPU SystemService generated during rpmbuild
+%description unittest-coverage
+HTML pages of lcov results of NPU Engine generated during rpmbuild
%if 0%{?test_coverage}
-%files -n unittest-coverage
+%files unittest-coverage
%{_datadir}/unittest/*
%endif
* @param[in] size the buffer size
* @param[in] prot prot
* @param[in] dmabuf indicates whether it's for dmabuf
- * @return mapped vaddr if no error. otherwise NULL value
+ * @return mapped vaddr if no error. otherwise MAP_FAILED
*/
static void *
__gem_mmap (int fd, uint32_t handle, uint32_t size, int prot, bool dmabuf)
{
- void *ptr;
+ void *ptr = MAP_FAILED;
if (!dmabuf) {
struct drm_mode_map_dumb arg = {
} else /* dma-buf */
ptr = mmap (0, size, prot, MAP_SHARED, fd, 0);
- if (ptr == MAP_FAILED)
- return NULL;
-
return ptr;
}
void *
gem_mmap (int fd, uint32_t handle, uint32_t size, int prot, bool dmabuf)
{
+ void *ptr;
+
assert (fd > 0);
assert (handle > 0);
assert (size > 0);
- return __gem_mmap(fd, handle, size, prot, dmabuf);
+ ptr = __gem_mmap(fd, handle, size, prot, dmabuf);
+
+ return ptr != MAP_FAILED ? ptr : NULL;
}
/**
-libgem_inc = include_directories('include')
-libgem_sources = ['src/GEMdrvAPI.c']
+libgem_src = ['GEMdrvAPI.c']
+libgem_inc = include_directories('.')
libgem_dependencies = [libdrm_dep]
# Build library (static)
libgem_build = static_library('gem-core',
- libgem_sources,
+ libgem_src,
dependencies: libgem_dependencies,
- include_directories: libgem_inc,
install: false
)
#include <sys/fcntl.h>
#include <sys/ioctl.h>
-#include <NPUdrvAPI.h>
+#include "NPUdrvAPI.h"
/** Enables debugging without device */
#define NO_DEV_DEBUG (1)
-libnpucore_src = ['src/NPUdrvAPI.c']
-libnpucore_inc = include_directories('./include')
+libnpucore_src = ['NPUdrvAPI.c']
+libnpucore_inc = include_directories('.')
# Build library (static)
libnpucore = static_library('npu-core',
libnpucore_src,
- include_directories: [ne_common_inc, libnpucore_inc],
+ include_directories: ne_common_inc,
install : false)
# Declare dependency for other modules
libnpucore_dep = declare_dependency(link_with : libnpucore,
- include_directories: libnpucore_inc)
+ include_directories: [ne_common_inc, libnpucore_inc])
subdir('libgem-core')
subdir('libnpu-core')
subdir('npu-engine')
-subdir('test')
# Declare dependency
plugin_ip_src_dep = declare_dependency(
sources : plugin_ip_sources,
- include_directories: [ne_common_inc, libnpuhost_inc]
+ include_directories: [ne_common_inc, ne_host_inc]
)
-libnpuhost_inc = include_directories('include')
+libnpuhost_inc = include_directories('.')
libnpuhost_dep = declare_dependency(include_directories: libnpuhost_inc)
subdir('libnpuhost')
-subdir('test')
--- /dev/null
+subdir('core')
+subdir('host')
+subdir('test')
+/**
+ * Proprietary
+ * Copyright (C) 2019 Samsung Electronics
+ * Copyright (C) 2019 Dongju Chae <dongju.chae@samsung.com>
+ */
+/**
+ * @file libgem_test.cpp
+ * @date 30 Jun 2019
+ * @brief UnitTests to test functions in libgem-core
+ * @author Dongju Chae <dongju.chae@samsung.com>
+ * @bug No known bugs except for NYI items
+ */
+
#include <unistd.h>
#include <sys/mman.h>
#include <gtest/gtest.h>
gtest_dep = dependency('gtest', required: false)
if gtest_dep.found()
- libgem_unittest_deps = [
- libgem_dep,
- gtest_dep
- ]
-
- unittest_libgem = executable('unittest_libgem',
- join_paths('libgem-core', 'gem_test.cpp'),
- dependencies: [libgem_unittest_deps],
- cpp_args : '-std=c++11'
- )
-
- test('unittest_libgem', unittest_libgem)
+#### TODO libgem unittest is not working on gbs because cgem driver is not installed
+#### Therefore, we skip the build this UnitTest temporally.
+# libgem_unittest_deps = [
+# libgem_dep,
+# gtest_dep
+# ]
+#
+# unittest_libgem = executable('unittest_libgem',
+# ['libgem_test.cpp'],
+# dependencies: [libgem_unittest_deps],
+# cpp_args : '-std=c++11'
+# )
+#
+# test('unittest_libgem', unittest_libgem)
libnpu_unittest_deps = [
libnpucore_dep,
]
unittest_libnpu = executable('unittest_libnpu',
- join_paths('libnpu-core', 'npu_api_test.cpp'),
- include_directories: ne_common_inc,
+ ['npu_api_test.cpp'],
dependencies: [libnpu_unittest_deps],
cpp_args : '-std=c++11'
)
]
unittest_ne_mem = executable('unittest_ne_mem',
- join_paths('npu-engine', 'ne_mem_test.cpp'),
+ ['ne_mem_test.cpp'],
dependencies: [npu_engine_unittest_deps],
cpp_args : '-std=c++11'
)
test('unittest_ne_mem', unittest_ne_mem)
unittest_ne_utils = executable('unittest_ne_utils',
- join_paths('npu-engine', 'ne_utils_test.cpp'),
+ ['ne_utils_test.cpp'],
dependencies: [npu_engine_unittest_deps],
cpp_args : '-std=c++11'
)
+/**
+ * Proprietary
+ * Copyright (C) 2019 Samsung Electronics
+ * Copyright (C) 2019 Dongju Chae <dongju.chae@samsung.com>
+ */
+/**
+ * @file ne_mem_tests.cpp
+ * @date 30 Jun 2019
+ * @brief UnitTests to test functions in memory allocator for NPU Engine
+ * @author Dongju Chae <dongju.chae@samsung.com>
+ * @bug No known bugs except for NYI items
+ */
+
#include <unistd.h>
#include <sys/mman.h>
#include <gtest/gtest.h>
+/**
+ * Proprietary
+ * Copyright (C) 2019 Samsung Electronics
+ * Copyright (C) 2019 Dongju Chae <dongju.chae@samsung.com>
+ */
+/**
+ * @file ne_utils_tests.cpp
+ * @date 30 Jun 2019
+ * @brief UnitTests to test functions in utility for NPU Engine
+ * @author Dongju Chae <dongju.chae@samsung.com>
+ * @bug No known bugs except for NYI items
+ */
+
#include <unistd.h>
#include <sys/mman.h>
#include <gtest/gtest.h>