/rt-app

rt-app emulates typical mobile and real-time systems use cases and gives runtime information

Primary LanguageCGNU General Public License v2.0GPL-2.0

README for rt-app @VERSION@

==============
 INTRODUCTION
==============

rt-app is a test application that starts multiple periodic threads in order to
simulate a real-time periodic load.

Code is currently maintained on GitHub:

	http://github.com/scheduler-tools/rt-app


==============
 REQUIREMENTS
==============

rt-app runs on GNU/Linux. It needs bash, autoconf, automake, libtool,
libjson-c, GNU make and a recent compiler (tested on: gcc) for basic features.
If your system has numactl (libnuma-dev) installed, numa features will be supported.  


=================
 BUILDING json-c
=================

If you are not happy using the version installed by your packaging system,
if it does not provide static libraries and you need them, need to
cross-compile, build it from source like this:

retrieve source code available here:

    https://github.com/json-c/json-c

cross-compile json-c and build both static and shared libraries for aarch64:

    export ac_cv_func_malloc_0_nonnull=yes
    export ac_cv_func_realloc_0_nonnull=yes
    ./autogen.sh
    ./configure --host=aarch64-linux-gnu --enable-shared --enable-static
    make


=================
 BUILDING numactl
=================

If you are not happy using the version installed by your packaging system,
if it does not provide static libraries and you need them, need to
cross-compile, build it from source like this:

retrieve source code available here:

    git clone https://github.com/numactl/numactl.git

cross-compile numactl and build static libraries for aarch64:

    ./autogen.sh
    ./configure --host=aarch64-linux-gnu --disable-shared --enable-static
    make


================================
 BUILDING AND INSTALLING rt-app
================================

VARIANT A)
cross-compile a static rt-app for aarch64, using your own json-c and/or numactl build
----------------------------------------------------------------------
(...that wasn't installed (or not into the standard locations))

    export ac_cv_lib_json_c_json_object_from_file=yes
    export ac_cv_lib_numa_numa_available=yes
    
    ./autogen.sh
    ./configure --host=aarch64-linux-gnu LDFLAGS="-L<absolute path to json repo> -L<absolute path to numactl repo>" CFLAGS="-I<path to parent of json-c repo> -I<path to parent of numactl repo>"
    AM_LDFLAGS="-all-static" make

configure supports the usual flags, like `--help` and `--prefix`, there is an
install target in the Makefile as well.


EXAMPLE: with a directory structure like the following:

    $ tree -d -L 2
    .
    ├── json-c
    │   ├── autoconf-archive
    │   ├── cmake
    │   ├── fuzz
    │       └── tests
    ├── numactl
    │   ├── m4
    │   └── test
    └── rt-app
        ├── doc
        ├── libdl
        └── src


you would run:

    cd rt-app
    export ac_cv_lib_json_c_json_object_from_file=yes
    export ac_cv_lib_numa_numa_available=yes
    ./autogen.sh
    ./configure --host=aarch64-linux-gnu LDFLAGS="-L$PWD/../json-c -L$PWD/../numactl" CFLAGS="-I$PWD/../"
    AM_LDFLAGS="-all-static" make

and you should get a static rt-app executable in the src directory.


VARIANT B)
regular build of rt-app for your host against json-c in canonical locations
---------------------------------------------------------------------------
(and installation with PREFIX=/usr/local)

    ./autogen.sh
    ./configure
    make
    make install


=======
 USAGE
=======

    $ rt-app [-l <log level>] <config_file>

where config file is a full/relative path to a json file (look under
doc/examples for examples) or "-" (without quotes) to read JSON data from
stdin.

Refer to file doc/tutorial.txt for information about how to write the json
file.