Leif:
  VFR file has the similar case. VFR is converted to xxx.c, then compile it to 
obj file. 

Bob:
  Has BaseTools such detection if VFR and C source file have the same file name?

Thanks
Liming
> -----Original Message-----
> From: Leif Lindholm <l...@nuviainc.com>
> Sent: Monday, July 27, 2020 9:58 PM
> To: devel@edk2.groups.io; pierre.gond...@arm.com; Masahisa Kojima 
> <masahisa.koj...@linaro.org>
> Cc: sami.muja...@arm.com; tomas.pi...@arm.com; Feng, Bob C 
> <bob.c.f...@intel.com>; Gao, Liming <liming....@intel.com>; Ard
> Biesheuvel <ard.biesheu...@arm.com>
> Subject: Re: [edk2-devel] [PATCH v5 4/5] BaseTools: Compile AML bytecode 
> arrays into .obj file
> 
> Hi Pierre, (+Masahisa)
> 
> This commit (0a4aa20e8d44) made for an exciting start to my week.
> 
> Socionext's Developerbox failed to build for me, with the spectacular
> error message:
> 
> /usr/lib/gcc-cross/aarch64-linux-gnu/8/../../../../aarch64-linux-gnu/bin/ld:
> DWARF error: could not find abbrev number 5912
> /tmp/ccKt4gaM.ltrans0.ltrans.o: in function `RegisterDevices':
> <artificial>:(.text.RegisterDevices+0xb0): undefined reference to
> `RegisterEmmc'
> 
> GCC49 (without lto) and CLANG38 profiles give much the same result,
> with slightly less esoteric messages.
> 
> The reason for this turned out to be that edk2-platforms
> Silicon/Socionext/SynQuacer/Drivers/PlatformDxe/ has both an Emmc.asl
> and an Emmc.c file, which after this patch both generate an Emmc.obj
> in the same output directory.
> 
> I think the correct course of action is to fix this in the SynQuacer
> driver, but I am reporting it here so we get it logged in the list
> archives.
> 
> It would of course be good if the build system could detect and warn
> over cases like this, rather than silently overwriting existing object
> files.
> 
> Masahisa - since Ard is still on holiday, could you create a patch and
> send out for me to review? Either one of the files needs to be
> renamed, or we need to move the .asl files (Emmc.asl and Optee.asl)
> into a subdirectory.
> 
> Best Regards,
> 
> Leif
> 
> On Wed, Jul 01, 2020 at 15:06:03 +0100, PierreGondois wrote:
> > From: Pierre Gondois <pierre.gond...@arm.com>
> >
> > The AmlToHex script and Posix/WindowsLike wrappers convert
> > an AML file to a .hex file, containing a C array storing
> > AML bytecode. This ".hex" file can then be included in a
> > C file, allowing to access the AML bytecode from this C
> > file.
> >
> > The EDK2 build system doesn't allow to a depict dependency
> > orders between files of different languages. For instance,
> > in a module containing a ".c" file and a ".asl", the ".c"
> > file may or may not be built prior to the ".asl" file.
> > This prevents any inclusion of a generated ".hex" in a
> > ".c" file since this later ".hex" file may or may not
> > have been created yet.
> >
> > This patch modifies the AmlToC script to generate a C file
> > instead of a ".hex" file.
> > It also adds the generation of an intermediate ".amli" file
> > when compiling an ASL file, and adds a rule to convert this
> > ".amli" to a C file.
> >
> > This allows to generate a C file containing the AML bytecode
> > from an ASL file. This C file will then be handled by the EDK2
> > build system to generate an object file.
> > Thus, no file inclusion will be required anymore. The C file
> > requiring the AML bytecode as a C array, and the ASL file,
> > will be compiled independently. The C array must be defined
> > as an external symbol. The linker is resolving the
> > reference to the C array symbol.
> >
> > To summarize, the flow goes as:
> >  -1. ASL file is compiled to AML;
> >  -2. AML file is copied to a ".amli" intermediate file;
> >  -3. EDK2 build system applies the rule relevant to ".amli"
> >      files. This is, calling the "AmlToC" script, generating
> >      a C file from the ".amli" file;
> >  -4. EDK2 build system applies the rule relevant to C files.
> >      This is creating an object file.
> >  -5. EDK2 build system links the object file containing the
> >      AML bytecode with the object file requiring it.
> >
> > Signed-off-by: Pierre Gondois <pierre.gond...@arm.com>
> > Suggested-by: Tomas Pilar <tomas.pi...@arm.com>
> > ---
> >
> > The changes can be seen at: 
> > https://github.com/PierreARM/edk2/commits/803_Compile_AML_bytecode_array_into_OBJ_file_v5
> >
> > Notes:
> >     v1:
> >      - Add a new rule to the build_rule.template file to
> >        generate ".obj" files from .asl files, and modify
> >        the AmlToC script accordingly. [Pierre]
> >     v2:
> >      - Restrict the rule to DXE_DRIVER. This allows to build
> >        the OvmfPkg, which was not the case in v1. [Pierre]
> >     v3:
> >      - Changed "Signed-off-by" to "Suggested-by". [Bob]
> >     v4:
> >     - No modification. Re-sending the patch with base64
> >       encoding to conserve the right line endings. [Bob]
> >     v5:
> >      - No modification. [Pierre]
> >
> >  BaseTools/Conf/build_rule.template       | 15 +++-
> >  BaseTools/Source/Python/AmlToC/AmlToC.py | 82 ++++++++------------
> >  2 files changed, 47 insertions(+), 50 deletions(-)
> >
> > diff --git a/BaseTools/Conf/build_rule.template 
> > b/BaseTools/Conf/build_rule.template
> > index 
> > 0822b681fcd9f61c6508e6f93ffc31fa70fd7059..c034869915914936e28f64a6aadba08e0169da44
> >  100755
> > --- a/BaseTools/Conf/build_rule.template
> > +++ b/BaseTools/Conf/build_rule.template
> > @@ -419,6 +419,7 @@
> >
> >      <OutputFile>
> >          $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.aml
> > +        $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.amli
> >
> >      <ExtraDependency>
> >          $(MAKE_FILE)
> > @@ -428,14 +429,24 @@
> >          "$(ASLPP)" $(DEPS_FLAGS) $(ASLPP_FLAGS) $(INC) /I${s_path} 
> > $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i >
> $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii
> >          Trim --source-code -l -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iiii 
> > $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii
> >          "$(ASL)" $(ASL_FLAGS) $(ASL_OUTFLAGS)${dst} 
> > $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iiii
> > -        -AmlToHex $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.aml
> > +        $(CP) $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.aml 
> > $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.amli
> >
> >      <Command.GCC>
> >          Trim --asl-file --asl-deps -o 
> > $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i -i $(INC_LIST) ${src}
> >          "$(ASLPP)" $(DEPS_FLAGS) $(ASLPP_FLAGS) $(INC) -I${s_path} 
> > $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i >
> $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii
> >          Trim --source-code -l -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iiii 
> > $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii
> >          "$(ASL)" $(ASL_FLAGS) $(ASL_OUTFLAGS)${dst} 
> > $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iiii
> > -        -AmlToHex $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.aml
> > +        $(CP) $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.aml 
> > $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.amli
> > +
> > +[Acpi-Machine-Language-File-to-C.DXE_DRIVER]
> > +    <InputFile>
> > +        ?.amli
> > +
> > +    <OutputFile>
> > +        ${s_path}(+)${s_base}.c
> > +
> > +    <Command>
> > +        -AmlToC ${src}
> >
> >  [C-Code-File.AcpiTable]
> >      <InputFile>
> > diff --git a/BaseTools/Source/Python/AmlToC/AmlToC.py 
> > b/BaseTools/Source/Python/AmlToC/AmlToC.py
> > index 
> > 643db2910e37acfdd80ac18d288c921320a79ce1..346de7159de702d860bbd809ddbe8175f1493cfb
> >  100644
> > --- a/BaseTools/Source/Python/AmlToC/AmlToC.py
> > +++ b/BaseTools/Source/Python/AmlToC/AmlToC.py
> > @@ -1,9 +1,9 @@
> >  ## @file
> >  #
> > -# Convert an AML file to a .hex file containing the AML bytecode stored in 
> > a
> > +# Convert an AML file to a .c file containing the AML bytecode stored in a
> >  # C array.
> > -# By default, "Tables\Dsdt.aml" will generate "Tables\Dsdt.hex".
> > -# "Tables\Dsdt.hex" will contain a C array named "dsdt_aml_code" that 
> > contains
> > +# By default, "Tables\Dsdt.aml" will generate "Tables\Dsdt.c".
> > +# "Tables\Dsdt.c" will contain a C array named "dsdt_aml_code" that 
> > contains
> >  # the AML bytecode.
> >  #
> >  # Copyright (c) 2020, ARM Limited. All rights reserved.<BR>
> > @@ -17,31 +17,26 @@ from Common.BuildToolError import *
> >  import sys
> >  import os
> >
> > +__description__ = """
> > +Convert an AML file to a .c file containing the AML bytecode stored in a C
> > +array. By default, Tables\Dsdt.aml will generate Tables\Dsdt.c.
> > +Tables\Dsdt.c will contain a C array named "dsdt_aml_code" that contains
> > +the AML bytecode.
> > +"""
> > +
> >  ## Parse the command line arguments.
> >  #
> >  # @retval A argparse.NameSpace instance, containing parsed values.
> >  #
> >  def ParseArgs():
> >      # Initialize the parser.
> > -    Parser = argparse.ArgumentParser(
> > -      description="Convert an AML file to a .hex file containing the AML " 
> > + \
> > -                  "bytecode stored in a C array. By default, " + \
> > -                  "\"Tables\\Dsdt.aml\" will generate" + \
> > -                  "\"Tables\\Dsdt.hex\". \"Tables\\Dsdt.hex\" will " + \
> > -                  "contain a C array named \"dsdt_aml_code\" that " + \
> > -                  "contains the AML bytecode."
> > -      )
> > +    Parser = argparse.ArgumentParser(description=__description__)
> >
> >      # Define the possible arguments.
> > -    Parser.add_argument(
> > -      dest="InputFile",
> > -      help="Path to an input AML file to generate a .hex file from."
> > -      )
> > -    Parser.add_argument(
> > -      "-o", "--out-dir", dest="OutDir",
> > -      help="Output directory where the .hex file will be generated. " + \
> > -           "Default is the input file's directory."
> > -      )
> > +    Parser.add_argument(dest="InputFile",
> > +                        help="Path to an input AML file to generate a .c 
> > file from.")
> > +    Parser.add_argument("-o", "--out-dir", dest="OutDir",
> > +                        help="Output directory where the .c file will be 
> > generated. Default is the input file's directory.")
> >
> >      # Parse the input arguments.
> >      Args = Parser.parse_args()
> > @@ -55,9 +50,7 @@ def ParseArgs():
> >          with open(Args.InputFile, "rb") as fIn:
> >              Signature = str(fIn.read(4))
> >              if ("DSDT" not in Signature) and ("SSDT" not in Signature):
> > -                EdkLogger.info("Invalid file type. " + \
> > -                                "File does not have a valid " + \
> > -                                "DSDT or SSDT signature: %s" % 
> > Args.InputFile)
> > +                EdkLogger.info("Invalid file type. File does not have a 
> > valid DSDT or SSDT signature: {}".format(Args.InputFile))
> >                  return None
> >
> >      # Get the basename of the input file.
> > @@ -66,42 +59,39 @@ def ParseArgs():
> >
> >      # If no output directory is specified, output to the input directory.
> >      if not Args.OutDir:
> > -        Args.OutputFile = os.path.join(
> > -          os.path.dirname(Args.InputFile),
> > -          BaseName + ".hex"
> > -          )
> > +        Args.OutputFile = os.path.join(os.path.dirname(Args.InputFile),
> > +                                       BaseName + ".c")
> >      else:
> >          if not os.path.exists(Args.OutDir):
> >              os.mkdir(Args.OutDir)
> > -        Args.OutputFile = os.path.join(Args.OutDir, BaseName + ".hex")
> > +        Args.OutputFile = os.path.join(Args.OutDir, BaseName + ".c")
> >
> >      Args.BaseName = BaseName
> >
> >      return Args
> >
> > -## Convert an AML file to a .hex file containing the AML bytecode stored
> > +## Convert an AML file to a .c file containing the AML bytecode stored
> >  #  in a C array.
> >  #
> >  # @param  InputFile     Path to the input AML file.
> > -# @param  OutputFile    Path to the output .hex file to generate.
> > +# @param  OutputFile    Path to the output .c file to generate.
> >  # @param  BaseName      Base name of the input file.
> > -#                       This is also the name of the generated .hex file.
> > +#                       This is also the name of the generated .c file.
> >  #
> > -def AmlToHex(InputFile, OutputFile, BaseName):
> > +def AmlToC(InputFile, OutputFile, BaseName):
> >
> > -    MacroName = "__{}_HEX__".format(BaseName.upper())
> >      ArrayName = BaseName.lower() + "_aml_code"
> > +    FileHeader =\
> > +"""
> > +// This file has been generated from:
> > +//   -Python script: {}
> > +//   -Input AML file: {}
> > +
> > +"""
> >
> >      with open(InputFile, "rb") as fIn, open(OutputFile, "w") as fOut:
> >          # Write header.
> > -        fOut.write("// This file has been generated from:\n" + \
> > -                   "// \tPython script: " + \
> > -                   os.path.abspath(__file__) + "\n" + \
> > -                   "// \tInput AML file: " + \
> > -                   os.path.abspath(InputFile) + "\n\n" + \
> > -                   "#ifndef {}\n".format(MacroName) + \
> > -                   "#define {}\n\n".format(MacroName)
> > -                   )
> > +        fOut.write(FileHeader.format(os.path.abspath(InputFile), 
> > os.path.abspath(__file__)))
> >
> >          # Write the array and its content.
> >          fOut.write("unsigned char {}[] = {{\n  ".format(ArrayName))
> > @@ -115,15 +105,12 @@ def AmlToHex(InputFile, OutputFile, BaseName):
> >              byte = fIn.read(1)
> >          fOut.write("\n};\n")
> >
> > -        # Write footer.
> > -        fOut.write("#endif // {}\n".format(MacroName))
> > -
> >  ## Main method
> >  #
> >  # This method:
> >  #   1-  Initialize an EdkLogger instance.
> >  #   2-  Parses the input arguments.
> > -#   3-  Converts an AML file to a .hex file containing the AML bytecode 
> > stored
> > +#   3-  Converts an AML file to a .c file containing the AML bytecode 
> > stored
> >  #       in a C array.
> >  #
> >  # @retval 0     Success.
> > @@ -139,10 +126,9 @@ def Main():
> >          if not CommandArguments:
> >              return 1
> >
> > -        # Convert an AML file to a .hex file containing the AML bytecode 
> > stored
> > +        # Convert an AML file to a .c file containing the AML bytecode 
> > stored
> >          # in a C array.
> > -        AmlToHex(CommandArguments.InputFile, CommandArguments.OutputFile,
> > -                          CommandArguments.BaseName)
> > +        AmlToC(CommandArguments.InputFile, CommandArguments.OutputFile, 
> > CommandArguments.BaseName)
> >      except Exception as e:
> >          print(e)
> >          return 1
> > --
> > 'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)'
> >
> > �

-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#63301): https://edk2.groups.io/g/devel/message/63301
Mute This Topic: https://groups.io/mt/75236043/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to