+++ /dev/null
-cmake_minimum_required(VERSION 2.8.3)
-project(Classification)
-
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror -g -pthread")
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -g -std=c++11 -pthread")
-
-find_package(PkgConfig REQUIRED)
-
-pkg_check_modules(TFLITE tensorflow-lite)
-link_libraries(${TFLITE_LIBRARIES})
-
-pkg_check_modules(INIPARSER iniparser)
-link_libraries(${INIPARSER_LIBRARIES})
-
-pkg_check_modules(NNTRAINER nntrainer)
-link_libraries(${NNTRAINER_LIBRARIES})
-
-include_directories(
- ${CMAKE_CURRENT_SOURCE_DIR}
- ${TFLITE_INCLUDE_DIRS}
- ${NNTRAINER_INCLUDE_DIRS}
- ${INIPARSER_INCLUDE_DIRS}
- )
-
-set(SRCS
- main.cpp
- bitmap_helpers.cpp
- )
-
-add_executable(Classification ${SRCS})
-
-target_link_libraries( Classification ${TFLITE_LIBRARIES} ${CMAKE_DL_LIBS} ${NNTRAINER_LIBRARIES} ${INIPARSER_LIBRARIES})
-
-install (TARGETS Classification
- RUNTIME DESTINATION bin
- )
--- /dev/null
+classification_sources = [
+ 'main.cpp',
+ 'bitmap_helpers.cpp'
+]
+
+executable('nntrainer_classification',
+ classification_sources,
+ dependencies: [iniparser_dep, nntrainer_dep, tflite_dep],
+ include_directories: include_directories('.'),
+ install: get_option('install-app'),
+ install_dir: application_install_dir
+)
+++ /dev/null
-cmake_minimum_required(VERSION 2.8.3)
-project(KNN)
-
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror -g -pthread")
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -g -std=c++11 -pthread")
-find_package(PkgConfig REQUIRED)
-
-pkg_check_modules(TFLITE tensorflow-lite)
-link_libraries(${TFLITE_LIBRARIES})
-
-pkg_check_modules(NNTRAINER nntrainer)
-link_libraries(${NNTRAINER_LIBRARIES})
-
-include_directories( ${include_directories}
- ${CMAKE_CURRENT_SOURCE_DIR}
- ${TFLITE_INCLUDE_DIRS}
- ${NNTRAINER_INCLUDE_DIRS}
- )
-set(SRCS
- demo.cpp
- bitmap_helpers.cpp
- )
-
-add_executable(KNN ${SRCS})
-target_link_libraries( KNN ${TFLITE_LIBRARIES} ${CMAKE_DL_LIBS} ${NNTRAINER_LIBRARIES})
--- /dev/null
+knn_sources = [
+ 'main.cpp',
+ 'bitmap_helpers.cpp'
+]
+
+knn_inc = include_directories('.')
+
+executable('nntrainer_knn',
+ knn_sources,
+ dependencies: [iniparser_dep, nntrainer_dep, tflite_dep],
+ install: get_option('install-app'),
+ install_dir: application_install_dir
+)
--- /dev/null
+executable('nntrainer_logistic',
+ 'main.cpp',
+ dependencies: [iniparser_dep, nntrainer_dep],
+ install: get_option('install-app'),
+ install_dir: application_install_dir
+)
+++ /dev/null
-cmake_minimum_required(VERSION 2.8.3)
-project(DeepQ)
-
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror -g")
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -g -std=c++11")
-
-ADD_DEFINITIONS(-DUSING_CUSTOM_ENV)
-
-find_package(PkgConfig REQUIRED)
-
-pkg_check_modules(JSONCPP jsoncpp)
-link_libraries(${JSONCPP_LIBRARIES})
-
-pkg_check_modules(CURL libcurl)
-link_libraries(${CURL_LIBRARIES})
-
-pkg_check_modules(NNTRAINER nntrainer)
-link_libraries(${NNTRAINER_LIBRARIES})
-
-pkg_check_modules(INIPARSER iniparser)
-link_libraries(${INIPARSER_LIBRARIES})
-
-set(ENVDIR ../../Environment)
-
-include_directories( ${include_directories}
- ${CMAKE_CURRENT_SOURCE_DIR}/include
- ${JSONCPP_INCLUDE_DIRS}
- ${ENVDIR}
- ${NNTRAINER_INCLUDE_DIRS}
- ${INIPARSER_INCLUDE_DIRS}
- )
-set(SRCS
- main.cpp
- gym_binding.cpp
- ${ENVDIR}/CartPole/cartpole.cpp
- )
-
-add_executable(DeepQ ${SRCS})
-target_link_libraries( DeepQ ${JSONCPP_LIBRARIES} ${CURL_LIBRARIES} ${NNTRAINER_LIBRARIES} ${INIPARSER_INCLUDE_DIRS})
-
-install (TARGETS DeepQ
- RUNTIME DESTINATION bin
- )
--- /dev/null
+env_dir='../../Environment'
+
+deepq_sources = [
+ 'main.cpp',
+ 'gym_binding.cpp',
+ join_paths(env_dir, 'CartPole/cartpole.cpp')
+]
+
+deepq_inc = [
+ env_dir,
+ './'
+]
+
+executable('nntrainer_deepq',
+ deepq_sources,
+ dependencies: [iniparser_dep, nntrainer_dep, tflite_dep, jsoncpp_dep, libcurl_dep],
+ include_directories: include_directories(env_dir),
+ install: get_option('install-app'),
+ install_dir: application_install_dir
+)
+++ /dev/null
-cmake_minimum_required(VERSION 2.8.3)
-project(TransferLearning)
-
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror -g -pthread")
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -g -std=c++11 -pthread")
-find_package(PkgConfig REQUIRED)
-
-pkg_check_modules(TFLITE tensorflow-lite)
-link_libraries(${TFLITE_LIBRARIES})
-
-pkg_check_modules(INIPARSER iniparser)
-link_libraries(${INIPARSER_LIBRARIES})
-
-pkg_check_modules(NNTRAINER nntrainer)
-link_libraries(${NNTRAINER_LIBRARIES})
-
-include_directories(
- ${CMAKE_CURRENT_SOURCE_DIR}
- ${TFLITE_INCLUDE_DIRS}
- ${NNTRAINER_INCLUDE_DIRS}
- ${INIPARSER_INCLUDE_DIRS}
- )
-
-set(SRCS
- main.cpp
- bitmap_helpers.cpp
- )
-
-add_executable(TransferLearning ${SRCS})
-
-target_link_libraries( TransferLearning ${TFLITE_LIBRARIES} ${CMAKE_DL_LIBS} ${NNTRAINER_LIBRARIES} ${INIPARSER_LIBRARIES})
-
-install (TARGETS TransferLearning
- RUNTIME DESTINATION bin
- )
--- /dev/null
+training_sources = [
+ 'main.cpp',
+ 'bitmap_helpers.cpp'
+]
+
+executable('nntrainer_training',
+ training_sources,
+ dependencies: [iniparser_dep, nntrainer_dep, tflite_dep],
+ include_directories: include_directories('.'),
+ install: get_option('install-app'),
+ install_dir: application_install_dir
+)
--- /dev/null
+subdir('Classification/jni')
+subdir('KNN/jni')
+subdir('LogisticRegression/jni')
+subdir('ReinforcementLearning/DeepQ/jni')
+subdir('Training/jni')
+++ /dev/null
-cmake_minimum_required(VERSION 2.8.3)
-
-project(nntrainer)
-set(NNTRAINER_MAJOR 0)
-set(NNTRAINER_MINOR 0)
-set(NNTRAINER_RELEASE 1)
-set(NNTRAINER_VERSION ${NNTRAINER_MAJOR}.${NNTRAINER_MINOR}.${NNTRAINER_RELEASE})
-
-option(TIZEN "Build for Tizen" OFF)
-
-set (LIBDIR lib)
-
-if(TARGET_ARCH STREQUAL "x86_64")
- set (LIBDIR lib64)
-endif()
-
-set (BLASLIB blas-openblas)
-if(TIZEN)
- set (BLASLIB openblas)
-endif(TIZEN)
-
-if(NOT DEFINED CMAKE_INSTALL_LIBDIR)
- set(CMAKE_INSTALL_LIBDIR ${CMAKE_INSTALL_PREFIX}/${LIBDIR})
-endif(NOT DEFINED CMAKE_INSTALL_LIBDIR)
-
-set (PKGCONFIG_INSTALL_DIR "/usr/lib/pkgconfig/" )
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror -g -pthread")
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -g -std=c++11 -pthread")
-
-find_package(PkgConfig REQUIRED)
-pkg_check_modules(INIPARSER iniparser)
-link_libraries(${INIPARSER_LIBRAIRES})
-include_directories(${INIPARSER_INCLUDE_DIRS})
-
-option(USE_BLAS "Use BLAS library" ON)
-
-set(SRCS
- src/neuralnet.cpp
- src/tensor.cpp
- src/layers.cpp
- src/databuffer.cpp
- )
-
-set(NNTRAINER_HEADERS
- include/neuralnet.h
- include/tensor.h
- include/layers.h
- include/databuffer.h
- )
-
-include_directories(
- ${CMAKE_CURRENT_SOURCE_DIR}
- )
-
-if(USE_BLAS)
- ADD_DEFINITIONS(-DUSE_BLAS)
- pkg_check_modules(BLAS ${BLASLIB})
- link_libraries(${BLAS_LIBRARIES})
- include_directories(${BLAS_INCLUDE_DIRS})
- message("[-DUSE_BLAS] is enabled")
-endif(USE_BLAS)
-
-add_library( ${PROJECT_NAME} SHARED ${SRCS} )
-
-configure_file("package.pc.in" "${PROJECT_BINARY_DIR}/${CMAKE_PROJECT_NAME}.pc" @ONLY)
-install (FILES "${PROJECT_BINARY_DIR}/${CMAKE_PROJECT_NAME}.pc" DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
-
-install (TARGETS nntrainer
- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
- )
-
-install (FILES ${NNTRAINER_HEADERS} DESTINATION include/nntrainer)
--- /dev/null
+project('nntrainer', 'c', 'cpp',
+ version: '0.0.1',
+ license: ['apache-2.0'],
+ meson_version: '>=0.50.0',
+ default_options: [
+ 'werror=true',
+ 'warning_level=1',
+ 'c_std=gnu89',
+ 'cpp_std=c++14'
+ ]
+)
+
+cc = meson.get_compiler('c')
+cxx = meson.get_compiler('cpp')
+build_platform = ''
+
+if get_option('enable-tizen')
+ # Pass __TIZEN__ to the compiler
+ build_platform = 'tizen'
+endif
+
+warning_flags = [
+ '-Wredundant-decls',
+ '-Wwrite-strings',
+ '-Wformat',
+ '-Wformat-nonliteral',
+ '-Wformat-security',
+ '-Winit-self',
+ '-Waddress',
+ '-Wno-multichar',
+ '-Wvla',
+ '-Wpointer-arith'
+]
+
+warning_c_flags = [
+ '-Wmissing-declarations',
+ '-Wmissing-include-dirs',
+ '-Wmissing-prototypes',
+ '-Wnested-externs',
+ '-Waggregate-return',
+ '-Wold-style-definition',
+ '-Wdeclaration-after-statement'
+]
+
+foreach extra_arg : warning_flags
+ if cc.has_argument (extra_arg)
+ add_project_arguments([extra_arg], language: 'c')
+ endif
+ if cxx.has_argument (extra_arg)
+ add_project_arguments([extra_arg], language: 'cpp')
+ endif
+endforeach
+
+foreach extra_arg : warning_c_flags
+ if cc.has_argument (extra_arg)
+ add_project_arguments([extra_arg], language: 'c')
+ endif
+endforeach
+
+# Set install path
+nntrainer_prefix = get_option('prefix')
+nntrainer_libdir = join_paths(nntrainer_prefix, get_option('libdir'))
+nntrainer_bindir = join_paths(nntrainer_prefix, get_option('bindir'))
+nntrainer_includedir = join_paths(nntrainer_prefix, get_option('includedir'))
+nntrainer_inidir = get_option('sysconfdir')
+application_install_dir = join_paths(nntrainer_bindir, 'applications')
+
+
+# Set default configuration
+nntrainer_conf = configuration_data()
+nntrainer_conf.set('VERSION', meson.project_version())
+nntrainer_conf.set('PREFIX', nntrainer_prefix)
+nntrainer_conf.set('EXEC_PREFIX', nntrainer_bindir)
+nntrainer_conf.set('LIB_INSTALL_DIR', nntrainer_libdir)
+nntrainer_conf.set('INCLUDE_INSTALL_DIR', nntrainer_includedir)
+
+# Dependencies
+if get_option('enable-blas')
+ add_project_arguments('-DUSE_BLAS=1', language:['c','cpp'])
+ if build_platform == 'tizen'
+ blas_dep = dependency('openblas')
+ else
+ blas_dep = dependency('blas-openblas')
+ endif
+endif
+
+libm_dep = cxx.find_library('m') # cmath library
+libdl_dep = cxx.find_library('dl') # DL library
+thread_dep = dependency('threads') # pthread for tensorflow-lite
+iniparser_dep = dependency('iniparser') # iniparser
+jsoncpp_dep = dependency('jsoncpp') # jsoncpp
+libcurl_dep = dependency('libcurl')
+
+# Install .pc
+configure_file(input: 'nntrainer.pc.in', output: 'nntrainer.pc',
+ install_dir: join_paths(nntrainer_libdir, 'pkgconfig'),
+ configuration: nntrainer_conf
+)
+
+# Build nntrainer
+subdir('nntrainer')
+
+if get_option('enable-app')
+ tflite_dep = dependency('tensorflow-lite', required: true)
+ subdir('Applications')
+endif
--- /dev/null
+option('enable-tizen', type: 'boolean', value: false)
+option('enable-blas', type: 'boolean', value: true)
+option('enable-app', type: 'boolean', value: true)
+option('install-app', type: 'boolean', value: true)
-prefix=@CMAKE_INSTALL_PREFIX@
-libdir=${prefix}/lib
-includedir=${prefix}/include
+prefix=@PREFIX@
+libdir=@LIB_INSTALL_DIR@
+includedir=@INCLUDE_INSTALL_DIR@
Name : nntrainer
-Version : @NNTRAINER_VERSION@
+Version : @VERSION@
Description: Software Framework for Training Neural Network on Device
Libs: -L${libdir} -lnntrainer
Cflags: -I${includedir}/nntrainer
--- /dev/null
+nntrainer_inc = include_directories('./include')
+
+# Dependencies
+nntrainer_base_deps=[
+ blas_dep,
+ iniparser_dep,
+ libm_dep,
+ libdl_dep,
+ thread_dep
+]
+
+if build_platform == 'tizen'
+ nntrainer_base_deps += dependency('dlog')
+endif
+
+nntrainer_sources = [
+ 'src/neuralnet.cpp',
+ 'src/tensor.cpp',
+ 'src/layers.cpp',
+ 'src/databuffer.cpp'
+]
+
+nntrainer_headers = [
+ 'include/neuralnet.h',
+ 'include/tensor.h',
+ 'include/layers.h',
+ 'include/databuffer.h'
+]
+
+
+# Build libraries
+nntrainer_shared = shared_library('nntrainer',
+ nntrainer_sources,
+ dependencies: nntrainer_base_deps,
+ include_directories: nntrainer_inc,
+ install: true,
+ install_dir: nntrainer_libdir
+)
+
+nntrainer_static = static_library('nntrainer',
+ nntrainer_sources,
+ dependencies: nntrainer_base_deps,
+ include_directories: nntrainer_inc,
+ install: true,
+ install_dir: nntrainer_libdir
+)
+
+nntrainer_lib = nntrainer_shared
+if get_option('default_library') == 'static'
+ nntrainer_lib = nntrainer_static
+endif
+
+nntrainer_dep = declare_dependency(link_with: nntrainer_lib,
+ dependencies: nntrainer_base_deps,
+ include_directories: nntrainer_inc
+)
+
+# Install headers
+install_headers(nntrainer_headers,
+ subdir: 'nntrainer'
+)
%define enable_cblas 1
+%define nntrainerapplicationdir %{_libdir}/nntrainer/bin
Name: nntrainer
Summary: Software framework for traning neural networks
-Version: 0.0.1
-Release: 0
-Packager: Jijoong Moon <jijoong.moon@sansumg.com>
-License: Apache-2.0
-Source0: nntrainer-%{version}.tar.gz
-Source1001: nntrainer.manifest
-
-BuildRequires: cmake >= 2.8.3
-BuildRequires: openblas-devel
-BuildRequires: iniparser-devel
-Requires: iniparser
-Requires: libopenblas
+Version: 0.0.1
+Release: 0
+Packager: Jijoong Moon <jijoong.moon@sansumg.com>
+License: Apache-2.0
+Source0: nntrainer-%{version}.tar.gz
+Source1001: nntrainer.manifest
+
+BuildRequires: meson >= 0.50.0
+BuildRequires: openblas-devel
+BuildRequires: iniparser-devel
+Requires: iniparser
+Requires: libopenblas
%description
NNtrainer is Software Framework for Training Nerual Network Models on Devices.
%package devel
-Summary: Development package for custom nntrainer developers
-Requires: nntrainer = %{version}-%{release}
-Requires: iniparser-devel
-Requires: openblas-devel
+Summary: Development package for custom nntrainer developers
+Requires: nntrainer = %{version}-%{release}
+Requires: iniparser-devel
+Requires: openblas-devel
%description devel
Development pacage for custom nntrainer developers.
This contains corresponding header files and .pc pkgconfig file.
+%package applications
+Summary: NNTrainer Examples
+Requires: nntrainer = %{version}-%{release}
+Requires: iniparser
+BuildRequires: tensorflow-lite-devel
+BuildRequires: pkgconfig(jsoncpp)
+BuildRequires: pkgconfig(libcurl)
+BuildRequires: pkgconfig(dlog)
+
+%description applications
+NNTraier Exmaples for test purpose.
+
# Using cblas for Matrix calculation
%if 0%{?enable_cblas}
%define enable_cblas -DUSE_BLAS=ON
%build
CXXFLAGS=`echo $CXXFLAGS | sed -e "s|-std=gnu++11||"`
+# mkdir -p build
+# pushd build
+# cmake .. -DCMAKE_INSTALL_PREFIX=/usr %{enable_cblas} -DTIZEN=ON -DTARGET_ARCH=%{_arch}
+# make %{?jobs:-j%jobs}
+# popd
+
mkdir -p build
-pushd build
-cmake .. -DCMAKE_INSTALL_PREFIX=/usr %{enable_cblas} -DTIZEN=ON -DTARGET_ARCH=%{_arch}
-make %{?jobs:-j%jobs}
-popd
+meson --buildtype=plain --prefix=%{_prefix} --sysconfdir=%{_sysconfdir} \
+ --libdir=%{_libdir} --bindir=%{nntrainerapplicationdir} --includedir=%{_includedir}\
+ -Dinstall-app=true -Denable-tizen=true build
-%install
-pushd build
-%make_install
-popd
+ninja -C build %{?_smp_mflags}
+%install
+DESTDIR=%{buildroot} ninja -C build %{?_smp_mflags} install
%files
%manifest nntrainer.manifest
%{_includedir}/nntrainer/layers.h
%{_includedir}/nntrainer/neuralnet.h
%{_includedir}/nntrainer/tensor.h
+%{_libdir}/*.a
%{_libdir}/pkgconfig/nntrainer.pc
+%files applications
+%manifest nntrainer.manifest
+%defattr(-,root,root,-)
+%license LICENSE
+%{_libdir}/nntrainer/bin/applications/*
+
%changelog
* Wed Mar 18 2020 Jijoong Moon <jijoong.moon@samsung.com>
- packaged nntrainer