Stefan Profanter a37c959ece Architecture: Allow overriding memory allocation functions 6 年之前
..
common cb061851bc Merge branch 'master' into feature/architectures 6 年之前
eCos ae1914b0ab Fix vxworks compiler dependencies and add guard for eCos 6 年之前
freertosLWIP 24aeec5209 Adapt pubsub 6 年之前
posix a37c959ece Architecture: Allow overriding memory allocation functions 6 年之前
vxworks a37c959ece Architecture: Allow overriding memory allocation functions 6 年之前
wec7 a37c959ece Architecture: Allow overriding memory allocation functions 6 年之前
win32 a37c959ece Architecture: Allow overriding memory allocation functions 6 年之前
CMakeLists.txt f4f0970776 added arch for windows embedded compact 7 6 年之前
Readme.md a0d6e2b166 Further adaption to architecture folder 6 年之前
ua_architecture_base.h a37c959ece Architecture: Allow overriding memory allocation functions 6 年之前
ua_architecture_definitions.h 43a2b539c2 Deprecate UA_TRUE/UA_FALSE for internal use 6 年之前
ua_architecture_functions.h a9c66b4600 Allow overriding file existance check in architectures 6 年之前
ua_network_tcp.c 1eb1a0aca7 Build using clang on Windows (#2180) 6 年之前
ua_network_tcp.h 443283f8e4 Merge remote-tracking branch 'upstream/master' into feature/architectures 6 年之前
ua_network_udp.c a0d6e2b166 Further adaption to architecture folder 6 年之前
ua_network_udp.h a0d6e2b166 Further adaption to architecture folder 6 年之前

Readme.md

To port to a new architecture you should follow this file:

  1. Create a folder with your architecture, let's call it new_arch
  2. In the CMakeLists.txt file located next to this file, add add_subdirectory(new_arch) at the end of it
  3. Create a CMakeLists.txt file in the new_arch folder
  4. Use the following template for it (remember that when you see new_arch you should replace with the name of your architecture)

    # ---------------------------------------------------
    # ---- Beginning of the CMakeLists.txt template -----
    # ---------------------------------------------------
        
    SET(SOURCE_GROUP ${SOURCE_GROUP}\\new_arch)
        
    ua_add_architecture("new_arch")
        
    if("${UA_ARCHITECTURE}" STREQUAL "new_arch")
        
        ua_include_directories(${CMAKE_CURRENT_SOURCE_DIR})
        ua_add_architecture_file(${CMAKE_CURRENT_SOURCE_DIR}/ua_clock.c)
            
        #
        # Add here below all the things that are specific for your architecture
        #
            
        #You can use the following available CMake functions:
             
        #ua_include_directories() include some directories specific to your architecture when compiling the open62541 stack
        #ua_architecture_remove_definitions() remove compiler flags from the general ../../CMakeLists.txt file that won't work with your architecture
        #ua_architecture_add_definitions() add compiler flags that your architecture needs
        #ua_architecture_append_to_library() add libraries to be linked to the open62541 that are needed by your architecture
        #ua_add_architecture_header() add header files to compilation (Don't add the file ua_architecture.h)
        #ua_add_architecture_file() add .c files to compilation    
            
    endif()
        
    # ---------------------------------------------------
    # ---- End of the CMakeLists.txt template -----
    # ---------------------------------------------------
    
  5. Create a ua_clock.c file that implements the following functions defined in ua_types.h:

    UA_DateTime UA_DateTime_now(void); UA_Int64 UA_DateTime_localTimeUtcOffset(void); UA_DateTime UA_DateTime_nowMonotonic(void);

  6. Create a file in the folder new_arch called ua_architecture.h

  7. Use the following template for it: a: Change YEAR, YOUR_NAME and YOUR_COMPANY in the header b: Change NEW_ARCH at the beginning in PLUGINS_ARCH_NEW_ARCH_UA_ARCHITECTUREH for your own name in uppercase

    ```C /* This work is licensed under a Creative Commons CCZero 1.0 Universal License.

    #ifndef PLUGINS_ARCH_NEW_ARCH_UA_ARCHITECTUREH #define PLUGINS_ARCH_NEW_ARCH_UA_ARCHITECTUREH

    /*

    • Define and include all that's needed for your architecture */

    /*

    • Define OPTVAL_TYPE for non windows systems. In doubt, use int //TODO: Is this really necessary */

    /*

    • Define the following network options */

    //#define UA_IPV6 1 //or 0 //#define UA_SOCKET //#define UA_INVALID_SOCKET //#define UA_ERRNO
    //#define UA_INTERRUPTED //#define UA_AGAIN //#define UA_EAGAIN //#define UA_WOULDBLOCK //#define UA_ERR_CONNECTION_PROGRESS //#define UA_INTERRUPTED

    /*

    • Define the ua_getnameinfo if your architecture supports it */

    /*

    • Use #define for the functions defined in ua_architecture_functions.h
    • or implement them in a ua_architecture_functions.c file and
    • put it in your new_arch folder and add it in the CMakeLists.txt file
    • using ua_add_architecture_file(${CMAKE_CURRENT_SOURCE_DIR}/ua_architecture_functions.c) */

    /*

    • Define UA_LOG_SOCKET_ERRNO_WRAP(LOG) which prints the string error given a char* errno_str variable
    • Do the same for UA_LOG_SOCKET_ERRNO_GAI_WRAP(LOG) for errors related to getaddrinfo */

    #include "../ua_architecture_functions.h"

    #endif /* PLUGINS_ARCH_NEW_ARCH_UA_ARCHITECTUREH */

    ```