Browse Source

CMake: Add specific target for nodeid header generator

Stefan Profanter 6 years ago
parent
commit
4b2c73cd54
3 changed files with 53 additions and 16 deletions
  1. 1 0
      CMakeLists.txt
  2. 1 0
      examples/nodeset/CMakeLists.txt
  3. 51 16
      tools/cmake/macros_public.cmake

+ 1 - 0
CMakeLists.txt

@@ -739,6 +739,7 @@ add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/ua_statuscodes.h
 ua_generate_nodeid_header(
     NAME "ua_nodeids"
     ID_PREFIX "NS0"
+    TARGET_SUFFIX "ids-ns0"
     FILE_CSV "${UA_FILE_NODEIDS}"
 )
 

+ 1 - 0
examples/nodeset/CMakeLists.txt

@@ -16,6 +16,7 @@ ua_generate_nodeset_and_datatypes(
 ua_generate_nodeid_header(
     NAME "example_nodeids"
     ID_PREFIX "EXAMPLE_NS"
+    TARGET_SUFFIX "ids_example"
     FILE_CSV "${PROJECT_SOURCE_DIR}/examples/nodeset/server_nodeset.csv"
 )
 

+ 51 - 16
tools/cmake/macros_public.cmake

@@ -14,20 +14,35 @@
 #   Arguments taking one value:
 #
 #   NAME            Full name of the generated files, e.g. di_nodeids
+#   TARGET_SUFFIX   Suffix for the resulting target. e.g. ids-di
+#   [TARGET_PREFIX] Optional prefix for the resulting target. Default `open62541-generator`
 #   ID_PREFIX       Prefix for the generated node ID defines, e.g. NS_DI
 #   [OUTPUT_DIR]    Optional target directory for the generated files. Default is '${PROJECT_BINARY_DIR}/src_generated'
 #   FILE_CSV        Path to the .csv file containing the node ids, e.g. 'OpcUaDiModel.csv'
 #
 function(ua_generate_nodeid_header)
     set(options )
-    set(oneValueArgs NAME ID_PREFIX OUTPUT_DIR FILE_CSV)
+    set(oneValueArgs NAME ID_PREFIX OUTPUT_DIR FILE_CSV TARGET_SUFFIX TARGET_PREFIX)
     set(multiValueArgs )
     cmake_parse_arguments(UA_GEN_ID "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
 
+    if(NOT UA_GEN_ID_TARGET_SUFFIX OR "${UA_GEN_ID_TARGET_SUFFIX}" STREQUAL "")
+        message(FATAL_ERROR "ua_generate_nodeid_header function requires a value for the TARGET_SUFFIX argument")
+    endif()
+
     # Set default value for output dir
-    if(NOT UA_GEN_ID_OUTPUT_DIR)
+    if(NOT UA_GEN_ID_OUTPUT_DIR OR "${UA_GEN_ID_OUTPUT_DIR}" STREQUAL "")
         set(UA_GEN_ID_OUTPUT_DIR ${PROJECT_BINARY_DIR}/src_generated)
     endif()
+    # Set default target prefix
+    if(NOT UA_GEN_ID_TARGET_PREFIX OR "${UA_GEN_ID_TARGET_PREFIX}" STREQUAL "")
+        set(UA_GEN_ID_TARGET_PREFIX "open62541-generator")
+    endif()
+
+
+    add_custom_target(${UA_GEN_ID_TARGET_PREFIX}-${UA_GEN_ID_TARGET_SUFFIX} DEPENDS
+        ${UA_GEN_ID_OUTPUT_DIR}/${UA_GEN_ID_NAME}.h
+    )
 
     # Header containing defines for all NodeIds
     add_custom_command(OUTPUT ${UA_GEN_ID_OUTPUT_DIR}/${UA_GEN_ID_NAME}.h
@@ -64,6 +79,7 @@ endfunction()
 #
 #   NAME            Full name of the generated files, e.g. ua_types_di
 #   TARGET_SUFFIX   Suffix for the resulting target. e.g. types-di
+#   [TARGET_PREFIX] Optional prefix for the resulting target. Default `open62541-generator`
 #   NAMESPACE_IDX   Namespace index of the nodeset, when it is loaded into the server. This index
 #                   is used for the node ids withing the types array and is currently not determined automatically.
 #                   Make sure that it matches the namespace index in the server.
@@ -80,7 +96,7 @@ endfunction()
 #
 function(ua_generate_datatypes)
     set(options BUILTIN)
-    set(oneValueArgs NAME TARGET_SUFFIX NAMESPACE_IDX OUTPUT_DIR FILE_CSV)
+    set(oneValueArgs NAME TARGET_SUFFIX TARGET_PREFIX NAMESPACE_IDX OUTPUT_DIR FILE_CSV)
     set(multiValueArgs FILES_BSD FILES_SELECTED)
     cmake_parse_arguments(UA_GEN_DT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
 
@@ -106,9 +122,14 @@ function(ua_generate_datatypes)
     endif()
 
     # Set default value for output dir
-    if(NOT UA_GEN_DT_OUTPUT_DIR)
+    if(NOT UA_GEN_DT_OUTPUT_DIR OR "${UA_GEN_DT_OUTPUT_DIR}" STREQUAL "")
         set(UA_GEN_DT_OUTPUT_DIR ${PROJECT_BINARY_DIR}/src_generated)
     endif()
+    # Set default target prefix
+    if(NOT UA_GEN_DT_TARGET_PREFIX OR "${UA_GEN_DT_TARGET_PREFIX}" STREQUAL "")
+        set(UA_GEN_DT_TARGET_PREFIX "open62541-generator")
+    endif()
+
 
     # ------ Add custom command and target -----
 
@@ -144,7 +165,7 @@ function(ua_generate_datatypes)
         ${UA_GEN_DT_FILES_BSD}
         ${UA_GEN_DT_FILE_CSV}
         ${UA_GEN_DT_FILES_SELECTED})
-    add_custom_target(open62541-generator-${UA_GEN_DT_TARGET_SUFFIX} DEPENDS
+    add_custom_target(${UA_GEN_DT_TARGET_PREFIX}-${UA_GEN_DT_TARGET_SUFFIX} DEPENDS
         ${UA_GEN_DT_OUTPUT_DIR}/${UA_GEN_DT_NAME}_generated.c
         ${UA_GEN_DT_OUTPUT_DIR}/${UA_GEN_DT_NAME}_generated.h
         ${UA_GEN_DT_OUTPUT_DIR}/${UA_GEN_DT_NAME}_generated_handling.h
@@ -186,6 +207,7 @@ endfunction()
 #   [OUTPUT_DIR]    Optional target directory for the generated files. Default is '${PROJECT_BINARY_DIR}/src_generated'
 #   [ENCODE_BINARY_SIZE]    Optional array size for binary encoding extension objects.
 #   [IGNORE]        Optional file containing a list of node ids which should be ignored. The file should have one id per line.
+#   [TARGET_PREFIX] Optional prefix for the resulting target. Default `open62541-generator`
 #
 #   Arguments taking multiple values:
 #
@@ -198,7 +220,7 @@ endfunction()
 function(ua_generate_nodeset)
 
     set(options INTERNAL )
-    set(oneValueArgs NAME TYPES_ARRAY OUTPUT_DIR ENCODE_BINARY_SIZE IGNORE)
+    set(oneValueArgs NAME TYPES_ARRAY OUTPUT_DIR ENCODE_BINARY_SIZE IGNORE TARGET_PREFIX)
     set(multiValueArgs FILE DEPENDS_TYPES DEPENDS_NS DEPENDS_TARGET)
     cmake_parse_arguments(UA_GEN_NS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
 
@@ -217,7 +239,7 @@ function(ua_generate_nodeset)
     endif()
 
     # Set default value for output dir
-    if(NOT UA_GEN_NS_OUTPUT_DIR)
+    if(NOT UA_GEN_NS_OUTPUT_DIR OR "${UA_GEN_NS_OUTPUT_DIR}" STREQUAL "")
         set(UA_GEN_NS_OUTPUT_DIR ${PROJECT_BINARY_DIR}/src_generated)
     endif()
 
@@ -228,6 +250,11 @@ function(ua_generate_nodeset)
         message(FATAL_ERROR "ua_generate_nodeset parameters DEPENDS_NS and DEPENDS_TYPES must have the same number of list elements")
     endif()
 
+    # Set default target prefix
+    if(NOT UA_GEN_NS_TARGET_PREFIX OR "${UA_GEN_NS_TARGET_PREFIX}" STREQUAL "")
+        set(UA_GEN_NS_TARGET_PREFIX "open62541-generator")
+    endif()
+
     # ------ Add custom command and target -----
 
     set(GEN_INTERNAL_HEADERS "")
@@ -298,12 +325,12 @@ function(ua_generate_nodeset)
                        ${UA_GEN_NS_DEPENDS_NS}
                        )
 
-    add_custom_target(open62541-generator-${TARGET_SUFFIX}
+    add_custom_target(${UA_GEN_NS_TARGET_PREFIX}-${TARGET_SUFFIX}
                       DEPENDS
                       ${UA_GEN_NS_OUTPUT_DIR}/ua_namespace${FILE_SUFFIX}.c
                       ${UA_GEN_NS_OUTPUT_DIR}/ua_namespace${FILE_SUFFIX}.h)
     if (UA_GEN_NS_DEPENDS_TARGET)
-        add_dependencies(open62541-generator-${TARGET_SUFFIX} ${UA_GEN_NS_DEPENDS_TARGET})
+        add_dependencies(${UA_GEN_NS_TARGET_PREFIX}-${TARGET_SUFFIX} ${UA_GEN_NS_DEPENDS_TARGET})
     endif()
 
     if(UA_COMPILE_AS_CXX)
@@ -316,7 +343,7 @@ function(ua_generate_nodeset)
     string(TOUPPER "${UA_GEN_NS_NAME}" GEN_NAME_UPPER)
     set(UA_NODESET_${GEN_NAME_UPPER}_SOURCES "${UA_GEN_NS_OUTPUT_DIR}/ua_namespace${FILE_SUFFIX}.c" CACHE INTERNAL "UA_NODESET_${GEN_NAME_UPPER} source files")
     set(UA_NODESET_${GEN_NAME_UPPER}_HEADERS "${UA_GEN_NS_OUTPUT_DIR}/ua_namespace${FILE_SUFFIX}.h" CACHE INTERNAL "UA_NODESET_${GEN_NAME_UPPER} header files")
-    set(UA_NODESET_${GEN_NAME_UPPER}_TARGET "open62541-generator-${TARGET_SUFFIX}" CACHE INTERNAL "UA_NODESET_${GEN_NAME_UPPER} target")
+    set(UA_NODESET_${GEN_NAME_UPPER}_TARGET "${UA_GEN_NS_TARGET_PREFIX}-${TARGET_SUFFIX}" CACHE INTERNAL "UA_NODESET_${GEN_NAME_UPPER} target")
 
 endfunction()
 
@@ -356,6 +383,7 @@ endfunction()
 #                   passed which will all combined to one resulting code.
 #   [NAMESPACE_IDX] Optional namespace index of the nodeset, when it is loaded into the server. This parameter is mandatory if FILE_CSV
 #                   or FILE_BSD is set. See ua_generate_datatypes function.
+#   [TARGET_PREFIX] Optional prefix for the resulting targets. Default `open62541-generator`
 #
 #   Arguments taking multiple values:
 #   [DEPENDS]       Optional list of nodeset names on which this nodeset depends. These names must match any name from a previous
@@ -365,11 +393,10 @@ endfunction()
 function(ua_generate_nodeset_and_datatypes)
 
     set(options INTERNAL)
-    set(oneValueArgs NAME FILE_NS FILE_CSV FILE_BSD NAMESPACE_IDX OUTPUT_DIR)
+    set(oneValueArgs NAME FILE_NS FILE_CSV FILE_BSD NAMESPACE_IDX OUTPUT_DIR TARGET_PREFIX)
     set(multiValueArgs DEPENDS)
     cmake_parse_arguments(UA_GEN "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
 
-
     if(NOT DEFINED open62541_TOOLS_DIR)
         message(FATAL_ERROR "open62541_TOOLS_DIR must point to the open62541 tools directory")
     endif()
@@ -407,25 +434,29 @@ function(ua_generate_nodeset_and_datatypes)
     endif()
 
     # Set default value for output dir
-    if(NOT UA_GEN_OUTPUT_DIR)
+    if(NOT UA_GEN_OUTPUT_DIR OR "${UA_GEN_OUTPUT_DIR}" STREQUAL "")
         set(UA_GEN_OUTPUT_DIR ${PROJECT_BINARY_DIR}/src_generated)
     endif()
+    # Set default target prefix
+    if(NOT UA_GEN_TARGET_PREFIX OR "${UA_GEN_TARGET_PREFIX}" STREQUAL "")
+        set(UA_GEN_TARGET_PREFIX "open62541-generator")
+    endif()
 
     set(NODESET_DEPENDS_TARGET "")
     set(NODESET_TYPES_ARRAY "UA_TYPES")
 
     if(NOT "${UA_GEN_FILE_BSD}" STREQUAL "")
         # Generate Datatypes for nodeset
-
         ua_generate_datatypes(
             NAME "ua_types_${UA_GEN_NAME}"
+            TARGET_PREFIX "${UA_GEN_TARGET_PREFIX}"
             TARGET_SUFFIX "types-${UA_GEN_NAME}"
             NAMESPACE_IDX ${UA_GEN_NAMESPACE_IDX}
             FILE_CSV "${UA_GEN_FILE_CSV}"
             FILES_BSD "${UA_GEN_FILE_BSD}"
             OUTPUT_DIR "${UA_GEN_OUTPUT_DIR}"
         )
-        set(NODESET_DEPENDS_TARGET "open62541-generator-types-${UA_GEN_NAME}")
+        set(NODESET_DEPENDS_TARGET "${UA_GEN_TARGET_PREFIX}-types-${UA_GEN_NAME}")
         set(NODESET_TYPES_ARRAY "UA_TYPES_${GEN_NAME_UPPER}")
 
         ua_generate_nodeid_header(
@@ -433,7 +464,10 @@ function(ua_generate_nodeset_and_datatypes)
             ID_PREFIX "${GEN_NAME_UPPER}"
             FILE_CSV "${UA_GEN_FILE_CSV}"
             OUTPUT_DIR "${UA_GEN_OUTPUT_DIR}"
+            TARGET_PREFIX "${UA_GEN_TARGET_PREFIX}"
+            TARGET_SUFFIX "ids-${UA_GEN_NAME}"
         )
+        set(NODESET_DEPENDS_TARGET ${NODESET_DEPENDS_TARGET} "${UA_GEN_TARGET_PREFIX}-ids-${UA_GEN_NAME}")
     endif()
 
     # Create a list of nodesets on which this nodeset depends on
@@ -450,7 +484,7 @@ function(ua_generate_nodeset_and_datatypes)
             set(NODESET_DEPENDS ${NODESET_DEPENDS} "${DEPENDS_FILE}")
             get_property(DEPENDS_TYPES GLOBAL PROPERTY "UA_GEN_NS_DEPENDS_TYPES_${f}")
             set(TYPES_DEPENDS ${TYPES_DEPENDS} "${DEPENDS_TYPES}")
-            set(NODESET_DEPENDS_TARGET ${NODESET_DEPENDS_TARGET} "open62541-generator-ns-${f}")
+            set(NODESET_DEPENDS_TARGET ${NODESET_DEPENDS_TARGET} "${UA_GEN_TARGET_PREFIX}-ns-${f}")
         endforeach()
     endif()
 
@@ -469,6 +503,7 @@ function(ua_generate_nodeset_and_datatypes)
         DEPENDS_NS ${NODESET_DEPENDS}
         DEPENDS_TARGET ${NODESET_DEPENDS_TARGET}
         OUTPUT_DIR "${UA_GEN_OUTPUT_DIR}"
+        TARGET_PREFIX "${UA_GEN_TARGET_PREFIX}"
     )
 
 endfunction()