User Tools

Site Tools


compiler_support

Compiler Support

This Wiki page documents characterstics of various compilers that, some of which may not be supported by IoTivity, as well as C and C++ language features required by IoTivity.

Operating Systems

The following table lists several operating systems, and whether they support features required by IoTivity with the stock packages shipped with the operating system. While users may certainly install updated versions of the compiler tool chain to support features required by IoTivity, for example, it is not expected that they do so, which is why only compilers shipped with the operating system are listed.

IoTivity is not necessarily supported on all platforms listed in this table. The table is meant to document the feasibility or difficulty of supporting IoTivity on a listed platform.

Platform Compiler
Name Version Name Version C99 C++11
Android
Arduino
iOS/OSX clang 6.1.0 Yes Yes
OpenSUSE
RHEL 7 GCC 4.8 Yes Yes
CentOS
Scientific
Arch
Tizen 2.3 GCC 4.6.1 Yes Incomplete
3.0 GCC 4.9.2 Yes Yes
Ubuntu 12.04LTS GCC 4.6.3 Yes Incomplete
14.04LTS GCC 4.8.2 Yes Yes
14.10 GCC 4.9.1 Yes Yes
QNX 6.5 GCC 4.4 Yes Incomplete
6.6 GCC 4.7 Yes Yes
Windows Embedded Compact 7 Visual Studio 2008 No No
RT / Phone Visual Studio 2013 Yes Yes

Compilers

Compilers supported by IoTivity are documented in this section.

GCC

The minimum supported version of GCC is 4.6.1 (as of 11 March 2015)

Features

This section lists various language features required by IoTivity.

C

IoTivity requires several C99 features including but not limited to:

  • bool data type
  • new integer types (e.g. int32_t)
  • intermingled declarations (e.g. variables need not be declared at the beginning of a scope)
  • one line comments
  • for-scope declarations
  • designated initializers

The following is sample code that demonstrates some of the C99 features used by IoTivity:

#include <assert.h>
#include <limits.h>
 
// Some headers found in C99.
#include <stdbool.h>
#include <stdint.h>
 
int main()
{
    struct foo
    {
        bool b;      // C99
        int i;
        uint64_t q;  // C99
    };
 
    // No need to declare variable at beginning of scope.
    const int t = INT_MIN;
 
    // Integer type large enough to hold pointer.
    const intptr_t pt = (const intptr_t) &t;
 
    assert(*((const int *)pt) == t);
 
    // Designated initializer.
    struct foo bar = {
        .b = false,
        .q = UINT64_MAX };
 
    // Implicitly initialized field.
    assert(bar.i == 0);
 
    int i = INT_MAX;
 
    // Loop-scope variable
    for (int i = 0; i < 5 ; ++i)
        assert(i != INT_MAX);
 
    // Incremented loop index variable with same name does not affect
    // value.
    assert(i == INT_MAX);
 
    return 0;
}

C++

The IoTivity C++ SDK requires several C++11 features including:

  • variadic templates
  • std::unique_ptr
  • magic statics
  • auto and decltype
  • lambdas
  • constexpr
  • deleted and defaulted functions
  • nullptr
  • rvalue references, move semantics, std::forward
  • std::atomic, std::thread, std::mutex, std::condition_variable
  • ranged-for
  • scoped enumerations
  • std::begin and std::end
  • type aliases
  • std::function and std::bind
compiler_support.txt · Last modified: 2015/07/23 00:20 by Charlie Lenahan