diff options
| author | crgeddes <crgeddes@us.ibm.com> | 2017-06-14 16:53:11 -0500 |
|---|---|---|
| committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2017-08-11 09:57:05 -0400 |
| commit | 18c1910fe597158178380a0cfb74504736b4fb3b (patch) | |
| tree | 45d0c6163bd0ef0aa02f26b4ba890ac84cba18e0 /src/usr/targeting/xmltohb | |
| parent | eb8df8822f732c47e0ea3326da1691596206f90d (diff) | |
| download | talos-hostboot-18c1910fe597158178380a0cfb74504736b4fb3b.tar.gz talos-hostboot-18c1910fe597158178380a0cfb74504736b4fb3b.zip | |
Autogenerate targeting xmls for ekb attributes
CMVC-Prereq: 1028808
Change-Id: I3d50cf242fd4cf23358c553a1b5395950616637e
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/41860
Reviewed-by: Martin Gloff <mgloff@us.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/targeting/xmltohb')
| -rwxr-xr-x | src/usr/targeting/xmltohb/fapi_utils.pl | 426 | ||||
| -rwxr-xr-x | src/usr/targeting/xmltohb/makefile | 289 | ||||
| -rwxr-xr-x | src/usr/targeting/xmltohb/updatetargetxml.pl | 9 |
3 files changed, 665 insertions, 59 deletions
diff --git a/src/usr/targeting/xmltohb/fapi_utils.pl b/src/usr/targeting/xmltohb/fapi_utils.pl new file mode 100755 index 000000000..7ba1c1fb1 --- /dev/null +++ b/src/usr/targeting/xmltohb/fapi_utils.pl @@ -0,0 +1,426 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/usr/targeting/xmltohb/fapi_utils.pl $ +# +# OpenPOWER HostBoot Project +# +# Contributors Listed Below - COPYRIGHT 2017 +# [+] International Business Machines Corp. +# +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# IBM_PROLOG_END_TAG +# A collection of utility functions to convert fapi attributes to targeting attributes + +$XML::Simple::PREFERRED_PARSER = 'XML::Parser'; +my $xml = new XML::Simple (KeyAttr=>[]); +use Digest::MD5 qw(md5_hex); +use strict; + +# Convert a FAPI2 target type to the equivalent TARGETING type +# Input: fapi2 type +# Output: targeting type +sub convertTargetFapi2Targ +{ + my $fapitype = shift; + my $targtype; + + $targtype =~ s/\s//g; + $targtype =~ s/TARGET_TYPE_//; + $targtype =~ s/_ENDPOINT//; + $targtype =~ s/_CHIPLET//; + $targtype =~ s/_CHIP//; + $targtype =~ s/^SYSTEM$/SYS/; + + #todo - check result against list of types from target_types? + + return $targtype; +} + + +# Convert a FAPI2 value type to the equivalent TARGETING type +# Input: fapi2 type +# Output: targeting type +sub convertValueFapi2Targ +{ + my $fapitype = shift; + my $targtype = $fapitype; + + $targtype =~ s/(uint\d+)/$1_t/ if($fapitype =~ /^uint\d+$/); + $targtype =~ s/(int\d+)/$1_t/ if($fapitype =~ /^int\d+$/); + + #todo - check result against list of types from target_types? + + return $targtype; +} + +# Create a TARGETING style enumeration based on the enum tag from +# a FAPI2 attribute definition +# Input: fapi2 attribute +# Output: targeting enumeration +sub createEnumFromAttr(\%) +{ + my($fapiattr) = @_; + my @enums; + + if (exists $fapiattr->{enum}) + { + # description: passed as-is + my $fapiattr_id = $fapiattr->{id}; + my $id = $fapiattr_id; + $id =~ s/ATTR_//; + my $description = $fapiattr->{description}; + $description =~ s/^\s+|\s+$//g; + + + my $enum = $fapiattr->{enum}; + my @enumerators = split( /,/, $enum); + my @enumeratorHashArray; + + foreach my $enumerator (@enumerators) { + my %enumeratorHash; + chomp($enumerator); + $enumerator =~ s/^\s+|\s+$//g; + + my @nameVal = split( /=/, $enumerator); + + my $name = $nameVal[0]; + $name =~ s/^\s+|\s+$//g; + my $value = $nameVal[1]; + $value =~ s/^\s+|\s+$//g; + + my %enumeratorHash = ( + name => $name, + value => $value + ); + + push @enumeratorHashArray, \%enumeratorHash; + } + + my %enumToAdd = ( + id => $id, + description => $description, + ); + $enumToAdd{'enumerator'} = [@enumeratorHashArray]; + return \%enumToAdd + } +} + +# Create full attribute definition from a fapi2 attribute definition +# Input: hashmap of a single fapi attribute +# Output: hashmap of a single targeting attribute +sub createAttrFromFapi(\%) +{ + my($fapiattr) = @_; + my $targattr = {}; + + # id: passed as-is + my $fapiattr_id = $fapiattr->{id}; + my $id = $fapiattr_id; + $id =~ s/ATTR_//; + $targattr->{id} = $id; + + # description: passed as-is + my $description = $fapiattr->{description}; + $targattr->{description} = $description; + + # valueType: convert + my $valueType = convertValueFapi2Targ($fapiattr->{valueType}); + $targattr->{simpleType}->{$valueType} = {}; + + # writeable: passed as-is + if( exists $fapiattr->{writeable} ) + { + $targattr->{writeable} = {}; + } + + #default: modifies simpleType + if( exists $fapiattr->{default} ) + { + $targattr->{simpleType}->{$valueType}->{default} = + $fapiattr->{default}; + } + + #array: modifies simpleType + if( exists $fapiattr->{array} ) + { + my @dimensions = split(' ',$fapiattr->{array}); + my $dimensions_cs = @dimensions[0]; + for my $i ( 1 .. $#dimensions ) + { + $dimensions_cs .= ",$dimensions[$i]"; + } + $dimensions_cs =~ s/,,/,/g; + $targattr->{simpleType}->{array} = $dimensions_cs; + } + + #platInit: influences persistency + #initToZero: influences persistency + #overrideOnly: influences persistency + if( exists $fapiattr->{platInit} ) + { + if( exists $fapiattr->{overrideOnly} ) + { + $targattr->{persistency} = "volatile"; + } + else + { + $targattr->{persistency} = "non-volatile"; + } + } + elsif( exists $fapiattr->{initToZero} ) + { + if( exists $fapiattr->{default} ) + { + print "INVALID - $fapiattr_id has initToZero and a default\n"; + } + $targattr->{persistency} = "volatile-zeroed"; + } + elsif( exists $fapiattr->{default} ) + { + $targattr->{persistency} = "volatile"; + } + else + { + $targattr->{persistency} = "volatile-zeroed"; + } + + #mssUnits: ignore + #mssAccessorName: ignore + #odmVisible: ignore + #odmChangeable: ignore + #persistent: ignore + #persistRuntime: ignore + + #enum: ignored here + #targetType: ignored here + + #always add these + $targattr->{readable} = {}; + $targattr->{hwpfToHbAttrMap}->{id} = $fapiattr_id; + $targattr->{hwpfToHbAttrMap}->{macro} = "DIRECT"; + +# print Dumper($targattr); + +# printTargAttr($targattr); + + return $targattr; +} + +# Create targetTypeExtensions from a fapi2 attribute definition +# Input: hashmap of a single fapi attribute +# array of all targetTypeExtensions +sub createTargetExtensionFromFapi(\%,\%) +{ + my($fapiattr,$alltargext) = @_; + #print "createTargetExtensionFromFapi---\n"; + open my $FHSTDOUT, ">&STDOUT"; + + # Conversions from FAPI2 to TARGETING types + my $fapi2targ = { + TARGET_TYPE_SYSTEM => "sys-sys-power9", + TARGET_TYPE_DIMM => "lcard-dimm", + TARGET_TYPE_PROC_CHIP => "chip-processor", + TARGET_TYPE_MEMBUF_CHIP => "chip-membuf", + TARGET_TYPE_EX => "unit-ex-power9", + TARGET_TYPE_MBA => "unit-mba", + TARGET_TYPE_MCS => "unit-mcs-power9", + TARGET_TYPE_XBUS => "unit-xbus-power9", + TARGET_TYPE_ABUS => "unit-abus-power9", + TARGET_TYPE_L4 => "unit-l4-power9", + TARGET_TYPE_CORE => "unit-core-power9", + TARGET_TYPE_EQ => "unit-eq-power9", + TARGET_TYPE_MCA => "unit-mca-power9", + TARGET_TYPE_MCBIST => "unit-mcbist-power9", + TARGET_TYPE_MI => "unit-mi-power9", + TARGET_TYPE_CAPP => "unit-capp-power9", + TARGET_TYPE_DMI => "unit-dmi-power9", + TARGET_TYPE_OBUS => "unit-obus-power9", + TARGET_TYPE_NV => "unit-nv-power9", + TARGET_TYPE_SBE => "unit-sbe-power9", + TARGET_TYPE_PPE => "unit-ppe-power9", + TARGET_TYPE_PERV => "unit-perv-power9", + TARGET_TYPE_PEC => "unit-pec-power9", + TARGET_TYPE_PHB => "unit-phb-power9", + TARGET_TYPE_MC => "unit-mc-power9", + }; + + # Loop through all of the targets that this attribute + # is needed on (per fapi xml) + my @types = split(',',$fapiattr->{targetType}); + foreach my $type(@types) + { + my $foundmatch = 0; + $type =~ s/\s//g; + my $targtype = $fapi2targ->{$type}; + #print "type = $type -> $targtype\n"; + my $attrid = $fapiattr->{id}; + $attrid =~ s/ATTR_//; + + # create new attribute element + my $newattr = {}; + $newattr->{id} = $attrid; + + # look for an existing targetTypeExtension entry + # to modify with new attribute + foreach my $targ (@{$alltargext->{targetTypeExtension}}) + { + if( $targ->{id} =~ $targtype ) + { + #print "-Found it\n"; + $foundmatch = 1; + #printTargExt($FHSTDOUT,$targ); + my $attrlist = $targ->{attribute}; + push @$attrlist, $newattr; + #printTargExt($FHSTDOUT,$targ); + last; + } + } + + # no existing entry for this kind of target, make a new one + if( $foundmatch == 0 ) + { + #print "-No entry found for $targtype, creating new entry\n"; + my $newext = {}; + $newext->{id} = $targtype; + my $newarray = []; + push @$newarray, $newattr; + $newext->{attribute} = $newarray; + my $allext = $alltargext->{targetTypeExtension}; + push @$allext, $newext; + #printTargExt($FHSTDOUT,$newext); + } + } + + + #print Dumper($alltargets); + + +# print "---\n"; +# printTargTarg($targtarg); +# print "---done\n"; +} + + + +# Print string representation of a targeting attribute +# Input: hashmap of a single targeting attribute +# Output: string of xml tags +sub printTargAttr +{ + my($FH1,$targattr) = @_; + print $FH1 $xml->XMLout( $targattr, RootName => 'attribute', NoAttr => 1 ); +} + +# Print string representation of a targeting enumeration +# Input: hashmap of a single targeting enumeration +# Output: string of xml tags +sub printTargEnum +{ + my($FH1,$targattr) = @_; + print $FH1 $xml->XMLout( $targattr, RootName => 'enumerationType', NoAttr => 1 ); +} + +# Print string representation of a targeting target +# Input: hashmap of a single targeting target +# Output: string of xml tags +sub printTargTarg +{ + my($FH1,$targtarg) = @_; + print $FH1 $xml->XMLout( $targtarg, RootName => 'targetType', NoAttr => 1 ); +} + +# Print string representation of a targeting targetExtension +# Input: hashmap of a single targeting target +# Output: string of xml tags +sub printTargExt +{ + my($FH1,$targtarg) = @_; + print $FH1 $xml->XMLout( $targtarg, RootName => 'targetTypeExtension', NoAttr => 1 ); +} + +# getArrayDimmensions +# Description: for a given attribute hashMap , return the array dimmensions +# if the attribute type is an array +# input : hashMap of attribute xml +# return : String of CSV list that lists the array dimmensions +sub getArrayDimmensions{ + my (%attrHash) = @_; + my $retValue = ""; + + my $simpleType = %attrHash->{simpleType}; + + my @keys = keys (%$simpleType); + + for my $key (@keys) + { + if( $key eq "array") + { + $retValue .= %attrHash->{simpleType}->{$key}; + } + } + #eat whitespace + $retValue =~ s/\s+//g; + return $retValue; +} + +# getFuncionBackedAttrs +# Description: Lookup all of the attributes that HB is backing with functions +# input : full path to attribute_service.H +# return : array of attribute IDs that are function backed +sub getFuncionBackedAttrs { + my ($headerFile) = @_; + my @attrIdArray; + open(my $attr_service_fh, '<', $headerFile) || die "unable to open $headerFile"; + + foreach my $row (<$attr_service_fh>) + { + my $attrIndex = index($row, "ATTR_"); + my $getMacroIndex = index($row, "_GETMACRO(ID"); + if($getMacroIndex != -1) + { + my $attrToAdd = substr $row, $attrIndex, $getMacroIndex - $attrIndex; + push @attrIdArray, $attrToAdd; + print " $0> FOUND $attrToAdd GETMACRO\n"; + } + } + return @attrIdArray; +} + +# getAttrType +# Description: for a given attribute hashMap , return the attribute type +# input : hashMap of attribute xml +# return : string represention attribute type +sub getAttrType { + my (%attrHash) = @_; + my $retValue = ""; + + my $simpleType = %attrHash->{simpleType}; + + my @keys = keys (%$simpleType); + + for my $key (@keys) + { + if( $key ne "array") + { + $retValue .= $key; + } + } + return $retValue; +} + + +# need to return 1 for other modules to include this +1; diff --git a/src/usr/targeting/xmltohb/makefile b/src/usr/targeting/xmltohb/makefile index 2e34e4941..35fa36761 100755 --- a/src/usr/targeting/xmltohb/makefile +++ b/src/usr/targeting/xmltohb/makefile @@ -46,8 +46,6 @@ include ${COMMON_TARGETING_MAKEFILE} VPATH = ${COMMON_TARGETING_REL_PATH} FAPI_ATTR_SOURCE_DIR = ${ROOTPATH}/src/usr/hwpf/hwp -XMLTOHB_FAPIATTR_SOURCES = \ - ${addprefix ${FAPI_ATTR_SOURCE_DIR}/, ${FAPI_ATTR_SOURCES}} FAPI2_ATTR_XML_DIR = ${ROOTPATH}/src/import/hwpf/fapi2/xml/attribute_info HB_TEMP_DFLT_SOURCES = $(wildcard \ @@ -59,6 +57,7 @@ FAPIATTRSRVC_SOURCE = \ ${FAPI2_INCLUDE_PATH}/${ATTRIBUTE_SERVICE_H} + # Attribute XML files. FAPI2_ATTR_XML += $(wildcard $(ROOTPATH)/src/import/chips/p9/procedures/xml/attribute_info/*) FAPI2_ATTR_XML += $(wildcard $(ROOTPATH)/src/import/hwpf/fapi2/xml/attribute_info/*) @@ -66,45 +65,112 @@ FAPI2_ATTR_XML += $(wildcard $(ROOTPATH)/src/import/hwpf/fapi2/xml/attribute_inf # NOTE: The hb_temp_defaults.xml file is not a normal attribute file with the # normal structures that define the attribute itself. It temporarily # provides default values for new attributes defined in other files. -FAPI2_ATTR_XML := $(filter-out ${HB_TEMP_DFLT_SOURCES},$(FAPI2_ATTR_XML)) + +FAPI2_ATTR_XML := $(filter-out $(ROOTPATH)/src/import/hwpf/fapi2/xml/attribute_info/hb_temp_defaults.xml,$(FAPI2_ATTR_XML)) +FAPI2_ATTR_XML := $(filter-out $(wildcard $(ROOTPATH)/src/import/hwpf/fapi2/xml/attribute_info/*~) ,$(FAPI2_ATTR_XML)) +FAPI2_ATTR_XML := $(filter-out $(wildcard $(ROOTPATH)/src/import/chips/p9/procedures/xml/attribute_info/*~),$(FAPI2_ATTR_XML)) XMLTOHB_FAPIATTR_SOURCES += ${FAPI2_ATTR_XML} -XMLTOHB_COMMON_ATTRIBUTE_SOURCES = attribute_types.xml -XMLTOHB_COMMON_TARGET_SOURCES = target_types.xml -XMLTOHB_HB_ATTRIBUTE_SOURCES = attribute_types_hb.xml -XMLTOHB_HB_TARGET_SOURCES = target_types_hb.xml +# Manually generated sources + +# Common +XMLTOHB_COMMON_ATTRIBUTE_TYPES = attribute_types.xml +XMLTOHB_COMMON_TARGET_TYPES = target_types.xml + +# HB only +XMLTOHB_HB_ATTRIBUTE_TYPES = attribute_types_hb.xml +XMLTOHB_HB_TARGET_TYPES = target_types_hb.xml + +# OP PowerVM only +XMLTOHB_OPPOWERVM_ATTRIBUTE_TYPES = attribute_types_oppowervm.xml +XMLTOHB_OPPOWERVM_TARGET_TYPES = target_types_oppowervm.xml + +# Empty Targeting XML - Needed to generate XMLTOHB_CONFIG_ATTRIBUTE_SOURCES +XMLTOHB_EMPTY_TARGET_TYPES = target_types_empty.xml + +# OP only +XMLTOHB_OPENPOWER_ATTRIBUTE_TYPES = attribute_types_openpower.xml +XMLTOHB_OPENPOWER_TARGET_TYPES = target_types_openpower.xml + +# Auto generated sources + +# EKB +# Common generated from EKB xml +XMLTOHB_EKB_ATTRIBUTE_TYPES = attribute_types_ekb.xml +XMLTOHB_EKB_TARGET_TYPES = target_types_ekb.xml + +# Config Sources +# Contains all sources in configuration +XMLTOHB_CONFIG_ATTRIBUTE_TYPES = attribute_types_config.xml +XMLTOHB_CONFIG_TARGET_TYPES = target_types_config.xml + +# SP Sources +# Contains xml that will be exported to SP +XMLTOHB_SP_ATTRIBUTE_TYPES = attribute_types_sp.xml +XMLTOHB_SP_TARGET_TYPES = target_types_sp.xml + +# SRC +# a_src = a + a_hb + a_xxx +# t_src = t + merge_extension(t_hb + t_xxx) +XMLTOHB_SRC_ATTRIBUTE_TYPES = attribute_types_src.xml +XMLTOHB_SRC_TARGET_TYPES = target_types_src.xml + + +# HBX +# a_hbx = a_ekb + a_xxx +# t_hbx = merge_extension(t_ekb + t_xxx) +#XMLTOHB_HBX_ATTRIBUTE_TYPES = attribute_types_hbx.xml +#XMLTOHB_HBX_TARGET_TYPES = target_types_hbx.xml + +# FULL +# a_full = a_src + a_ekb +# t_full = t_src + t_ekb +XMLTOHB_FULL_ATTRIBUTE_TYPES = attribute_types_full.xml +XMLTOHB_FULL_TARGET_TYPES = target_types_full.xml + +# attribute_customization +# hb_temp_defaults.xml + hb_customized_attrs.xml +XMLTOHB_ATTRIBUTE_CUSTOMIZATION = attribute_customization.xml + +#Note that order matters here , we want hb_customized_attrs to be first so it's defaults get picked up first +#if there are duplicates +XMLTOHB_ATTRIBUTE_CUSTOMIZATION_SOURCES += ${COMMON_TARGETING_REL_PATH}/${HB_CUSTOMIZED_ATTRS_XML} +XMLTOHB_ATTRIBUTE_CUSTOMIZATION_SOURCES += ${ROOTPATH}/src/import/hwpf/fapi2/xml/attribute_info/hb_temp_defaults.xml -# attribute files that are only included in power vm build. -XMLTOHB_OPPOWERVM_ATTRIBUTE_SOURCES = attribute_types_oppowervm.xml -XMLTOHB_OPPOWERVM_TARGET_SOURCES = target_types_oppowervm.xml +# SRC attribute sources +XMLTOHB_SRC_ATTRIBUTE_SOURCES += ${COMMON_TARGETING_REL_PATH}/${XMLTOHB_COMMON_ATTRIBUTE_TYPES} +XMLTOHB_SRC_ATTRIBUTE_SOURCES += ${COMMON_TARGETING_REL_PATH}/${XMLTOHB_HB_ATTRIBUTE_TYPES} +XMLTOHB_SRC_ATTRIBUTE_SOURCES += $(if $(CONFIG_INCLUDE_XML_OPPOWERVM),${XMLTOHB_OPPOWERVM_ATTRIBUTE_TYPES}) +XMLTOHB_SRC_ATTRIBUTE_SOURCES += $(if $(CONFIG_INCLUDE_XML_OPENPOWER),${XMLTOHB_OPENPOWER_ATTRIBUTE_TYPES}) -# attribute files that are only included in openpower build. -XMLTOHB_OPENPOWER_ATTRIBUTE_SOURCES = attribute_types_openpower.xml -XMLTOHB_OPENPOWER_TARGET_SOURCES = target_types_openpower.xml +# Config Sources +XMLTOHB_CONFIG_ATTRIBUTE_SOURCES += ${COMMON_TARGETING_REL_PATH}/${XMLTOHB_COMMON_ATTRIBUTE_TYPES} +XMLTOHB_CONFIG_ATTRIBUTE_SOURCES += $(if $(CONFIG_INCLUDE_XML_OPPOWERVM),${XMLTOHB_OPPOWERVM_ATTRIBUTE_TYPES}) +XMLTOHB_CONFIG_ATTRIBUTE_SOURCES += $(if $(CONFIG_INCLUDE_XML_OPENPOWER),${XMLTOHB_OPENPOWER_ATTRIBUTE_TYPES}) -XMLTOHB_MERGED_COMMON_TARGET_SOURCES = target_types_merged.xml # The customize target file combines all targetTypeExtension files before # combining them with the common target_types.xml file. To include a new file, -# just add it to the XMLTOHB_TARGET_SOURCES. -XMLTOHB_CUSTOMIZE_TARGET_SOURCES = target_types_customize.xml +# just add it to the XMLTOHB_*_EXT_TARGET_SOURCES. +XMLTOHB_SRC_CUSTOMIZE_TARGET_SOURCES = target_types_customize_src.xml +XMLTOHB_CONFIG_CUSTOMIZE_TARGET_SOURCES = target_types.customize_config.xml + + +XMLTOHB_SRC_EXT_TARGET_SOURCES += ${COMMON_TARGETING_REL_PATH}/${XMLTOHB_HB_TARGET_TYPES} +XMLTOHB_SRC_EXT_TARGET_SOURCES += $(if $(CONFIG_INCLUDE_XML_OPPOWERVM),${XMLTOHB_OPPOWERVM_TARGET_TYPES}) +XMLTOHB_SRC_EXT_TARGET_SOURCES += $(if $(CONFIG_INCLUDE_XML_OPENPOWER),${XMLTOHB_OPENPOWER_TARGET_TYPES}) + +XMLTOHB_CONFIG_EXT_TARGET_SOURCES += ${COMMON_TARGETING_REL_PATH}/${XMLTOHB_EMPTY_TARGET_TYPES} +XMLTOHB_CONFIG_EXT_TARGET_SOURCES += $(if $(CONFIG_INCLUDE_XML_OPPOWERVM),${XMLTOHB_OPPOWERVM_TARGET_TYPES}) +XMLTOHB_CONFIG_EXT_TARGET_SOURCES += $(if $(CONFIG_INCLUDE_XML_OPENPOWER),${XMLTOHB_OPENPOWER_TARGET_TYPES}) -XMLTOHB_TARGET_SOURCES += ${XMLTOHB_HB_TARGET_SOURCES} -XMLTOHB_TARGET_SOURCES += $(if $(CONFIG_INCLUDE_XML_OPPOWERVM),${XMLTOHB_OPPOWERVM_TARGET_SOURCES}) -XMLTOHB_TARGET_SOURCES += $(if $(CONFIG_INCLUDE_XML_OPENPOWER),${XMLTOHB_OPENPOWER_TARGET_SOURCES}) #Define XMLTOHB_GENERIC_SOURCES -XMLTOHB_GENERIC_SOURCES += ${XMLTOHB_COMMON_ATTRIBUTE_SOURCES} -XMLTOHB_GENERIC_SOURCES += ${XMLTOHB_HB_ATTRIBUTE_SOURCES} -XMLTOHB_GENERIC_SOURCES += $(if $(CONFIG_INCLUDE_XML_OPPOWERVM),${XMLTOHB_OPPOWERVM_ATTRIBUTE_SOURCES}) -XMLTOHB_GENERIC_SOURCES += $(if $(CONFIG_INCLUDE_XML_OPENPOWER),${XMLTOHB_OPENPOWER_ATTRIBUTE_SOURCES}) -XMLTOHB_GENERIC_SOURCES += ${GENDIR}/${XMLTOHB_MERGED_COMMON_TARGET_SOURCES} -XMLTOHB_GENERIC_SOURCES += ${XMLTOHB_HB_TARGET_SOURCES} -XMLTOHB_GENERIC_SOURCES += $(if $(CONFIG_INCLUDE_XML_OPPOWERVM),${XMLTOHB_OPPOWERVM_TARGET_SOURCES}) -XMLTOHB_GENERIC_SOURCES += $(if $(CONFIG_INCLUDE_XML_OPENPOWER),${XMLTOHB_OPENPOWER_TARGET_SOURCES}) +XMLTOHB_GENERIC_SOURCES += ${GENDIR}/${XMLTOHB_FULL_ATTRIBUTE_TYPES} +XMLTOHB_GENERIC_SOURCES += ${GENDIR}/${XMLTOHB_FULL_TARGET_TYPES} TEMP_DEFAULT_SOURCES = tempdefaults.xml @@ -123,7 +189,7 @@ XMLTOHB_SYSTEM_BINARIES += \ $(if $(CONFIG_SECUREBOOT),simics_NIMBUS_targeting.bin.protected) XMLTOHB_SYSTEM_BINARIES += \ $(if $(CONFIG_SECUREBOOT),simics_NIMBUS_targeting.bin.unprotected) - + XMLTOHB_SYSTEM_BINARIES += \ $(if $(CONFIG_SECUREBOOT),simics_CUMULUS_targeting.bin.protected) XMLTOHB_SYSTEM_BINARIES += \ @@ -142,12 +208,12 @@ XMLTOHB_SYSTEM_BINARIES += \ # @echo FAPI_ATTR_SOURCES = ${FAPI_ATTR_SOURCES} # @echo XMLTOHB_FAPIATTR_SOURCES = ${XMLTOHB_FAPIATTR_SOURCES} # @echo HB_TEMP_DFLT_SOURCES = ${HB_TEMP_DFLT_SOURCES} -# @echo XMLTOHB_COMMON_ATTRIBUTE_SOURCES = ${XMLTOHB_COMMON_ATTRIBUTE_SOURCES} -# @echo XMLTOHB_COMMON_TARGET_SOURCES = ${XMLTOHB_COMMON_TARGET_SOURCES} +# @echo XMLTOHB_COMMON_ATTRIBUTE_TYPES = ${XMLTOHB_COMMON_ATTRIBUTE_TYPES} +# @echo XMLTOHB_COMMON_TARGET_TYPES = ${COMMON_TARGETING_REL_PATH}/${XMLTOHB_COMMON_TARGET_TYPES} # @echo TEMP_DEFAULT_SOURCES = ${TEMP_DEFAULT_SOURCES} -# @echo XMLTOHB_HB_ATTRIBUTE_SOURCES = ${XMLTOHB_HB_ATTRIBUTE_SOURCES} -# @echo XMLTOHB_HB_TARGET_SOURCES = ${XMLTOHB_HB_TARGET_SOURCES} -# @echo XMLTOHB_MERGED_COMMON_TARGET_SOURCES = ${XMLTOHB_MERGED_COMMON_TARGET_SOURCES} +# @echo XMLTOHB_HB_ATTRIBUTE_TYPES = ${XMLTOHB_HB_ATTRIBUTE_TYPES} +# @echo XMLTOHB_HB_TARGET_TYPES = ${XMLTOHB_HB_TARGET_TYPES} +# @echo XMLTOHB_SRC_TARGET_TYPES = ${XMLTOHB_SRC_TARGET_TYPES} # @echo TEMP_GENERIC_XML = ${TEMP_GENERIC_XML} # @echo VPATH = ${VPATH} @@ -156,14 +222,25 @@ EXTRA_PARTS = $(addprefix $(IMGDIR)/, $(XMLTOHB_SYSTEM_BINARIES)) CLEAN_TARGETS += $(addprefix $(GENDIR)/, ${XMLTOHB_SYSTEM_BINARIES}) CLEAN_TARGETS += $(addprefix $(GENDIR)/, ${XMLTOHB_SYSTEM_BINARIES:.bin=.xml}) CLEAN_TARGETS += ${GENDIR}/${HB_PLAT_ATTR_SRVC_H} -CLEAN_TARGETS += ${GENDIR}/${TEMP_GENERIC_XML} CLEAN_TARGETS += ${GENDIR}/${XMLTOHB_GENERIC_XML} CLEAN_TARGETS += ${GENDIR}/${XMLTOHB_FAPI_XML} -CLEAN_TARGETS += ${GENDIR}/${XMLTOHB_MERGED_COMMON_TARGET_SOURCES} CLEAN_TARGETS += ${GENDIR}/errl/errludattribute.H CLEAN_TARGETS += ${GENDIR}/errl/errludtarget.H CLEAN_TARGETS += ${GENDIR}/targAttrInfo.csv CLEAN_TARGETS += ${GENDIR}/targAttrOverrideData.H +CLEAN_TARGETS += ${GENDIR}/${XMLTOHB_SRC_TARGET_TYPES} +CLEAN_TARGETS += ${GENDIR}/${XMLTOHB_SRC_ATTRIBUTE_TYPES} +CLEAN_TARGETS += ${GENDIR}/${XMLTOHB_CONFIG_ATTRIBUTE_TYPES} +CLEAN_TARGETS += ${GENDIR}/${XMLTOHB_CONFIG_TARGET_TYPES} +CLEAN_TARGETS += ${GENDIR}/${XMLTOHB_SRC_CUSTOMIZE_TARGET_SOURCES} +CLEAN_TARGETS += ${GENDIR}/${XMLTOHB_CONFIG_CUSTOMIZE_TARGET_SOURCES} +CLEAN_TARGETS += ${GENDIR}/${XMLTOHB_SP_ATTRIBUTE_TYPES} +CLEAN_TARGETS += ${GENDIR}/${XMLTOHB_SP_TARGET_TYPES} +CLEAN_TARGETS += ${GENDIR}/${XMLTOHB_EKB_ATTRIBUTE_TYPES} +CLEAN_TARGETS += ${GENDIR}/${XMLTOHB_EKB_TARGET_TYPES} +CLEAN_TARGETS += ${GENDIR}/${XMLTOHB_FULL_ATTRIBUTE_TYPES} +CLEAN_TARGETS += ${GENDIR}/${XMLTOHB_FULL_TARGET_TYPES} +CLEAN_TARGETS += ${GENDIR}/${XMLTOHB_ATTRIBUTE_CUSTOMIZATION} GENDIR_ERRL = $(ROOTPATH)/obj/genfiles/errl @@ -173,24 +250,93 @@ CLEAN_TARGETS += $(XMLTOHB_RAN_INDICATION) COPYHDR_RAN_INDICATION = $(GENDIR)/.called_copy_attrsrvhdr CLEAN_TARGETS += $(COPYHDR_RAN_INDICATION) +GEN_PASS_BODY += ${GENDIR}/${XMLTOHB_CONFIG_ATTRIBUTE_TYPES} +GEN_PASS_BODY += ${GENDIR}/${XMLTOHB_CONFIG_TARGET_TYPES} +GEN_PASS_BODY += ${GENDIR}/${XMLTOHB_SP_ATTRIBUTE_TYPES} +GEN_PASS_BODY += ${GENDIR}/${XMLTOHB_SP_TARGET_TYPES} + include ${ROOTPATH}/config.mk # Delete any generated file on error -.DELETE_ON_ERROR: +# # .DELETE_ON_ERROR: ${EXTRA_PARTS}: ${IMGDIR}/% : ${GENDIR}/% cp -f $^ $@ +# create merged config attribute xml +${GENDIR}/${XMLTOHB_CONFIG_ATTRIBUTE_TYPES}: \ + ${XMLTOHB_MERGE_SCRIPT} ${XMLTOHB_CONFIG_ATTRIBUTE_SOURCES} + $< $(wordlist 2,$(words $^),$^) > $@ + +# create merged src attribute xml +${GENDIR}/${XMLTOHB_SRC_ATTRIBUTE_TYPES}: \ + ${XMLTOHB_MERGE_SCRIPT} ${XMLTOHB_SRC_ATTRIBUTE_SOURCES} + $< $(wordlist 2,$(words $^),$^) > $@ + +# create merged src target xml +${GENDIR}/${XMLTOHB_SRC_CUSTOMIZE_TARGET_SOURCES}: \ + ${XMLTOHB_MERGE_SCRIPT} ${XMLTOHB_SRC_EXT_TARGET_SOURCES} + $< $(wordlist 2,$(words $^),$^) > $@ + +# TODO RTC: 178228 Review usage of XMLTOHB_TARGET_MERGE_SCRIPT in this makefile +${GENDIR}/${XMLTOHB_SRC_TARGET_TYPES}: \ + ${XMLTOHB_TARGET_MERGE_SCRIPT} ${COMMON_TARGETING_REL_PATH}/${XMLTOHB_COMMON_TARGET_TYPES} \ + ${GENDIR}/${XMLTOHB_SRC_CUSTOMIZE_TARGET_SOURCES} + ./${XMLTOHB_TARGET_MERGE_SCRIPT} $(addprefix --hb=,${GENDIR}/${XMLTOHB_SRC_CUSTOMIZE_TARGET_SOURCES}) \ + $(addprefix --common=,${COMMON_TARGETING_REL_PATH}/${XMLTOHB_COMMON_TARGET_TYPES}) > $@ -# create merged target xml -${GENDIR}/${XMLTOHB_CUSTOMIZE_TARGET_SOURCES}: \ - ${XMLTOHB_MERGE_SCRIPT} ${XMLTOHB_TARGET_SOURCES} +# create merged config target xml +${GENDIR}/${XMLTOHB_CONFIG_CUSTOMIZE_TARGET_SOURCES}: \ + ${XMLTOHB_MERGE_SCRIPT} ${XMLTOHB_CONFIG_EXT_TARGET_SOURCES} $< $(wordlist 2,$(words $^),$^) > $@ -${GENDIR}/${XMLTOHB_MERGED_COMMON_TARGET_SOURCES}: \ - ${XMLTOHB_TARGET_MERGE_SCRIPT} ${XMLTOHB_COMMON_TARGET_SOURCES} ${GENDIR}/${XMLTOHB_CUSTOMIZE_TARGET_SOURCES} - ./${XMLTOHB_TARGET_MERGE_SCRIPT} $(addprefix --hb=,${GENDIR}/${XMLTOHB_CUSTOMIZE_TARGET_SOURCES}) \ - $(addprefix --common=,${COMMON_TARGETING_REL_PATH}/${XMLTOHB_COMMON_TARGET_SOURCES}) > $@ +# TODO RTC: 178228 Review usage of XMLTOHB_TARGET_MERGE_SCRIPT in this makefile +${GENDIR}/${XMLTOHB_CONFIG_TARGET_TYPES}: \ + ${XMLTOHB_TARGET_MERGE_SCRIPT} ${COMMON_TARGETING_REL_PATH}/${XMLTOHB_COMMON_TARGET_TYPES} \ + ${GENDIR}/${XMLTOHB_CONFIG_CUSTOMIZE_TARGET_SOURCES} + ./${XMLTOHB_TARGET_MERGE_SCRIPT} $(addprefix --hb=,${GENDIR}/${XMLTOHB_CONFIG_CUSTOMIZE_TARGET_SOURCES}) \ + $(addprefix --common=,${COMMON_TARGETING_REL_PATH}/${XMLTOHB_COMMON_TARGET_TYPES}) > $@ + + +# TODO RTC: 178228 Review usage of XMLTOHB_TARGET_MERGE_SCRIPT in this makefile +# create merged full target xml +${GENDIR}/${XMLTOHB_FULL_TARGET_TYPES}: \ + ${XMLTOHB_TARGET_MERGE_SCRIPT} ${GENDIR}/${XMLTOHB_EKB_TARGET_TYPES} \ + ${GENDIR}/${XMLTOHB_SRC_TARGET_TYPES} ${GENDIR}/${XMLTOHB_SRC_ATTRIBUTE_TYPES} \ + ${GENDIR}/${XMLTOHB_EKB_TARGET_TYPES} ${GENDIR}/${XMLTOHB_FULL_ATTRIBUTE_TYPES} + ./${XMLTOHB_TARGET_MERGE_SCRIPT} $(addprefix --hb=,${GENDIR}/${XMLTOHB_EKB_TARGET_TYPES}) \ + $(addprefix --common=,${GENDIR}/${XMLTOHB_SRC_TARGET_TYPES}) > $@ + ${COMMON_TARGETING_REL_PATH}/${XMLTOHB_SWAP_MAPPED_ATTR_SCRIPT} \ + $(addprefix --srcTargetXml=,${GENDIR}/${XMLTOHB_SRC_TARGET_TYPES}) \ + $(addprefix --ekbTargetXml=,${GENDIR}/${XMLTOHB_EKB_TARGET_TYPES}) \ + $(addprefix --fullAttrXml=,${GENDIR}/${XMLTOHB_FULL_ATTRIBUTE_TYPES}) \ + $(addprefix --fullTargetXml=,${GENDIR}/${XMLTOHB_FULL_TARGET_TYPES}) \ + $(addprefix --fapi2Header=,${ROOTPATH}/src/include/usr/fapi2/attribute_service.H) + echo '<attributes>' | cat - ${GENDIR}/${XMLTOHB_FULL_TARGET_TYPES} > tempFull && mv tempFull ${GENDIR}/${XMLTOHB_FULL_TARGET_TYPES} + echo '</attributes>' | cat ${GENDIR}/${XMLTOHB_FULL_TARGET_TYPES} - > tempFull && mv tempFull ${GENDIR}/${XMLTOHB_FULL_TARGET_TYPES} + +# TODO RTC: 178228 Review usage of XMLTOHB_TARGET_MERGE_SCRIPT in this makefile +# create merged sp target xml +${GENDIR}/${XMLTOHB_SP_TARGET_TYPES}: \ + ${XMLTOHB_TARGET_MERGE_SCRIPT} ${GENDIR}/${XMLTOHB_EKB_TARGET_TYPES} \ + ${GENDIR}/${XMLTOHB_CONFIG_TARGET_TYPES} ${GENDIR}/${XMLTOHB_CONFIG_ATTRIBUTE_TYPES} \ + ${GENDIR}/${XMLTOHB_EKB_TARGET_TYPES} ${GENDIR}/${XMLTOHB_SP_ATTRIBUTE_TYPES} + ./${XMLTOHB_TARGET_MERGE_SCRIPT} $(addprefix --hb=,${GENDIR}/${XMLTOHB_EKB_TARGET_TYPES}) \ + $(addprefix --common=,${GENDIR}/${XMLTOHB_CONFIG_TARGET_TYPES}) > $@ + ${COMMON_TARGETING_REL_PATH}/${XMLTOHB_SWAP_MAPPED_ATTR_SCRIPT} \ + $(addprefix --srcTargetXml=,${GENDIR}/${XMLTOHB_CONFIG_TARGET_TYPES}) \ + $(addprefix --ekbTargetXml=,${GENDIR}/${XMLTOHB_EKB_TARGET_TYPES}) \ + $(addprefix --fullAttrXml=,${GENDIR}/${XMLTOHB_SP_ATTRIBUTE_TYPES}) \ + $(addprefix --fullTargetXml=,${GENDIR}/${XMLTOHB_SP_TARGET_TYPES}) \ + $(addprefix --fapi2Header=,${ROOTPATH}/src/include/usr/fapi2/attribute_service.H) + echo '<attributes>' | cat - ${GENDIR}/${XMLTOHB_SP_TARGET_TYPES} > tempSp && mv tempSp ${GENDIR}/${XMLTOHB_SP_TARGET_TYPES} + echo '</attributes>' | cat ${GENDIR}/${XMLTOHB_SP_TARGET_TYPES} - > tempSp && mv tempSp ${GENDIR}/${XMLTOHB_SP_TARGET_TYPES} + ${COMMON_TARGETING_REL_PATH}/${XMLTOHB_REMOVE_HB_MAPPED_ATTR_SCRIPT} \ + $(addprefix --spAttrXml=,${GENDIR}/${XMLTOHB_SP_ATTRIBUTE_TYPES}) \ + $(addprefix --spTargXml=,${GENDIR}/${XMLTOHB_SP_TARGET_TYPES}) \ + $(addprefix --hbAttrXml=,${COMMON_TARGETING_REL_PATH}/${XMLTOHB_HB_ATTRIBUTE_TYPES}) \ + + # merge all FAPI attribute files into one ${GENDIR}/${XMLTOHB_FAPI_XML}: ${XMLTOHB_MERGE_SCRIPT} \ @@ -203,23 +349,51 @@ $(COPYHDR_RAN_INDICATION): ${FAPIATTRSRVC_SOURCE} cp ${FAPIATTRSRVC_SOURCE} ${GENDIR}/${HB_PLAT_ATTR_SRVC_H} touch $(COPYHDR_RAN_INDICATION) -# temp generic XML is created from the generic sources only -${GENDIR}/${TEMP_GENERIC_XML}: \ - ${XMLTOHB_MERGE_SCRIPT} ${XMLTOHB_GENERIC_SOURCES} +# merge all attribute customization srcs together +${GENDIR}/${XMLTOHB_ATTRIBUTE_CUSTOMIZATION}: ${XMLTOHB_MERGE_SCRIPT} \ + ${XMLTOHB_ATTRIBUTE_CUSTOMIZATION_SOURCES} $< $(wordlist 2,$(words $^),$^) > $@ -# generic XML is created from temp generic XML, temporary defaults, merged FAPI -# attributes, and HB temp defaults +# convert FAPI attrs to HB attrs +${GENDIR}/${XMLTOHB_EKB_ATTRIBUTE_TYPES} \ +${GENDIR}/${XMLTOHB_EKB_TARGET_TYPES}: \ + ${XMLTOHB_EKB_TARGATTR_SCRIPT} ${GENDIR}/${XMLTOHB_FAPI_XML} \ + fapi_utils.pl ${GENDIR}/${XMLTOHB_ATTRIBUTE_CUSTOMIZATION} + ${COMMON_TARGETING_REL_PATH}/${XMLTOHB_EKB_TARGATTR_SCRIPT} \ + $(addprefix --fapi=,${GENDIR}/${XMLTOHB_FAPI_XML}) \ + $(addprefix --attr=,${GENDIR}/${XMLTOHB_EKB_ATTRIBUTE_TYPES}) \ + $(addprefix --targ=,${GENDIR}/${XMLTOHB_EKB_TARGET_TYPES}) \ + $(addprefix --default=,${GENDIR}/${XMLTOHB_ATTRIBUTE_CUSTOMIZATION})\ + + +# Add EKB attribute xml to src xml to produce the final output. +# Skip adding any attributes that already exists in the src xml +${GENDIR}/${XMLTOHB_FULL_ATTRIBUTE_TYPES}: \ + ${XMLTOHB_DUPLICATE_SCRIPT} ${GENDIR}/${XMLTOHB_EKB_ATTRIBUTE_TYPES} \ + ${GENDIR}/${XMLTOHB_SRC_ATTRIBUTE_TYPES} + ${COMMON_TARGETING_REL_PATH}/${XMLTOHB_DUPLICATE_SCRIPT} \ + $(addprefix --ekbXmlFile=,${GENDIR}/${XMLTOHB_EKB_ATTRIBUTE_TYPES}) \ + $(addprefix --hbXmlFile=,${GENDIR}/${XMLTOHB_SRC_ATTRIBUTE_TYPES}) \ + $(addprefix --fapi2Header=,${ROOTPATH}/src/include/usr/fapi2/attribute_service.H) \ + $(addprefix --outFile=,${GENDIR}/${XMLTOHB_FULL_ATTRIBUTE_TYPES}) \ + --verbose + +# Add EKB attribute xml to config xml to produce the final output. +# Skip adding any attributes that already exists in the src xml +${GENDIR}/${XMLTOHB_SP_ATTRIBUTE_TYPES}: \ + ${XMLTOHB_DUPLICATE_SCRIPT} ${GENDIR}/${XMLTOHB_EKB_ATTRIBUTE_TYPES} \ + ${GENDIR}/${XMLTOHB_CONFIG_ATTRIBUTE_TYPES} + ${COMMON_TARGETING_REL_PATH}/${XMLTOHB_DUPLICATE_SCRIPT} \ + $(addprefix --ekbXmlFile=,${GENDIR}/${XMLTOHB_EKB_ATTRIBUTE_TYPES}) \ + $(addprefix --hbXmlFile=,${GENDIR}/${XMLTOHB_CONFIG_ATTRIBUTE_TYPES}) \ + $(addprefix --fapi2Header=,${ROOTPATH}/src/include/usr/fapi2/attribute_service.H) \ + $(addprefix --outFile=,${GENDIR}/${XMLTOHB_SP_ATTRIBUTE_TYPES}) \ + --verbose + +# generic XML is created from the generic sources only ${GENDIR}/${XMLTOHB_GENERIC_XML}: \ - ${XMLTOHB_TEMPS_MERGE_SCRIPT} ${GENDIR}/${TEMP_GENERIC_XML} \ - ${GENDIR}/${XMLTOHB_FAPI_XML} \ - ${HB_TEMP_DFLT_SOURCES} ${TEMP_DEFAULT_SOURCES} - ./${XMLTOHB_TEMPS_MERGE_SCRIPT} \ - --generic=${GENDIR}/${TEMP_GENERIC_XML} \ - --fapi=${GENDIR}/${XMLTOHB_FAPI_XML} \ - --fapi_inc=${ROOTPATH}/src/include/usr/fapi2/attribute_service.H \ - --fw_dflts=${HB_TEMP_DFLT_SOURCES} \ - --defaults=${COMMON_TARGETING_REL_PATH}/${TEMP_DEFAULT_SOURCES} > $@ + ${XMLTOHB_MERGE_SCRIPT} ${XMLTOHB_GENERIC_SOURCES} + $< $(wordlist 2,$(words $^),$^) > $@ # create the header files, only needs generic xml $(call GENTARGET,$(XMLTOHB_TARGETS)) : $(XMLTOHB_RAN_INDICATION) @@ -233,6 +407,7 @@ $(XMLTOHB_RAN_INDICATION): ${XMLTOHB_COMPILER_SCRIPT} \ cp ${GENDIR_ERRL}/errludtarget.H ${GENDIR_PLUGINS} touch $(XMLTOHB_RAN_INDICATION) +# .PRECIOUS: ${GENDIR}/%.hb.xml # system-specific XML needs the generic xml plus the xxx.system.xml file + the # MRW file ${GENDIR}/%.hb.xml: %.system.xml ${GENDIR}/${XMLTOHB_GENERIC_XML} %.mrw.xml diff --git a/src/usr/targeting/xmltohb/updatetargetxml.pl b/src/usr/targeting/xmltohb/updatetargetxml.pl index 8d86159df..11b38c3ba 100755 --- a/src/usr/targeting/xmltohb/updatetargetxml.pl +++ b/src/usr/targeting/xmltohb/updatetargetxml.pl @@ -6,7 +6,7 @@ # # OpenPOWER HostBoot Project # -# Contributors Listed Below - COPYRIGHT 2012,2014 +# Contributors Listed Below - COPYRIGHT 2012,2017 # [+] International Business Machines Corp. # # @@ -83,7 +83,7 @@ foreach my $Extension ( @{$generic->{targetTypeExtension}} ) { $default = $attr->{default}->[0]; } - #print "$id, $attribute_id $default\n"; + if (! exists $generic1->{targetType}->{$id}->{attribute}->{$attribute_id}) { push @NewAttr, [ $id, $attribute_id, $default ]; @@ -91,6 +91,11 @@ foreach my $Extension ( @{$generic->{targetTypeExtension}} ) } } +#for my $i ( 0 .. $#NewAttr ) +#{ + # print STDERR "$NewAttr[$i][0], $NewAttr[$i][1], $NewAttr[$i][2]\n"; +#} + open (FH, "<$common"); my $check = 0; |

