diff --git a/BaseTools/Conf/build_rule.template b/BaseTools/Conf/build_rule.template index ec4dabaf4b..a0142a5c47 100755 --- a/BaseTools/Conf/build_rule.template +++ b/BaseTools/Conf/build_rule.template @@ -353,7 +353,7 @@ $(OUTPUT_DIR)(+)$(MODULE_NAME).map - ImageTool PeXip ${src} ${dst} $(MODULE_TYPE) + ImageTool GenImage -c PE -t $(MODULE_TYPE) -o ${dst} ${src} $(CP) ${dst} $(DEBUG_DIR) $(CP) ${dst} $(BIN_DIR)(+)$(MODULE_NAME_GUID).efi -$(CP) $(DEBUG_DIR)(+)*.map $(OUTPUT_DIR) @@ -363,7 +363,7 @@ $(CP) ${src} $(DEBUG_DIR)(+)$(MODULE_NAME).strip $(OBJCOPY) $(OBJCOPY_STRIPFLAG) $(DEBUG_DIR)(+)$(MODULE_NAME).strip - ImageTool ElfToPe $(DEBUG_DIR)(+)$(MODULE_NAME).strip ${dst} $(MODULE_TYPE) + ImageTool GenImage -c PE -t $(MODULE_TYPE) -o ${dst} $(DEBUG_DIR)(+)$(MODULE_NAME).strip $(CP) ${dst} $(DEBUG_DIR) $(CP) ${dst} $(BIN_DIR)(+)$(MODULE_NAME_GUID).efi @@ -374,7 +374,7 @@ "$(MTOC)" -subsystem $(MODULE_TYPE) $(MTOC_FLAGS) ${src} $(DEBUG_DIR)(+)$(MODULE_NAME).pecoff # create symbol file for GDB debug -$(DSYMUTIL) ${src} - ImageTool PeXip $(DEBUG_DIR)(+)$(MODULE_NAME).pecoff ${dst} $(MODULE_TYPE) + ImageTool GenImage -c PE -t $(MODULE_TYPE) -o ${dst} $(DEBUG_DIR)(+)$(MODULE_NAME).pecoff $(CP) ${dst} $(DEBUG_DIR) $(CP) ${dst} $(BIN_DIR)(+)$(MODULE_NAME_GUID).efi -$(CP) $(DEBUG_DIR)(+)*.map $(OUTPUT_DIR) @@ -392,7 +392,7 @@ $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc - ImageTool PeXip ${src} ${dst} $(MODULE_TYPE) $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc + ImageTool GenImage -c PE -t $(MODULE_TYPE) -h $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc -o ${dst} ${src} $(CP) ${dst} $(DEBUG_DIR) $(CP) ${dst} $(BIN_DIR)(+)$(MODULE_NAME_GUID).efi -$(CP) $(DEBUG_DIR)(+)*.map $(OUTPUT_DIR) @@ -402,7 +402,7 @@ $(CP) ${src} $(DEBUG_DIR)(+)$(MODULE_NAME).strip $(OBJCOPY) $(OBJCOPY_STRIPFLAG) $(DEBUG_DIR)(+)$(MODULE_NAME).strip - ImageTool ElfToPe $(DEBUG_DIR)(+)$(MODULE_NAME).strip ${dst} $(MODULE_TYPE) $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc + ImageTool GenImage -c PE -t $(MODULE_TYPE) -h $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc -o ${dst} $(DEBUG_DIR)(+)$(MODULE_NAME).strip $(CP) ${dst} $(DEBUG_DIR) $(CP) ${dst} $(BIN_DIR)(+)$(MODULE_NAME_GUID).efi @@ -413,7 +413,7 @@ "$(MTOC)" -subsystem $(MODULE_TYPE) $(MTOC_FLAGS) ${src} $(DEBUG_DIR)(+)$(MODULE_NAME).pecoff # create symbol file for GDB debug -$(DSYMUTIL) ${src} - ImageTool PeXip $(DEBUG_DIR)(+)$(MODULE_NAME).pecoff ${dst} $(MODULE_TYPE) $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc + ImageTool GenImage -c PE -t $(MODULE_TYPE) -h $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc -o ${dst} $(DEBUG_DIR)(+)$(MODULE_NAME).pecoff $(CP) ${dst} $(DEBUG_DIR) $(CP) ${dst} $(BIN_DIR)(+)$(MODULE_NAME_GUID).efi -$(CP) $(DEBUG_DIR)(+)*.map $(OUTPUT_DIR) @@ -481,12 +481,12 @@ "$(ASLCC)" $(DEPS_FLAGS) /Fo$(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj $(ASLCC_FLAGS) $(DEPS_FLAGS) $(INC) ${src} "$(ASLDLINK)" /OUT:$(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.dll $(ASLDLINK_FLAGS) $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj - ImageTool GetAcpi $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.dll ${dst} + ImageTool GetAcpi -o ${dst} $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.dll "$(ASLCC)" $(DEPS_FLAGS) -c -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj $(CC_FLAGS) $(ASLCC_FLAGS) $(DEPS_FLAGS) $(INC) ${src} "$(ASLDLINK)" -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.dll $(ASLDLINK_FLAGS) $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj - ImageTool GetAcpi $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.dll ${dst} + ImageTool GetAcpi -o ${dst} $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.dll [Acpi-Table-Code-File] @@ -501,23 +501,23 @@ "$(ASLCC)" $(DEPS_FLAGS) /Fo$(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj $(ASLCC_FLAGS) $(DEPS_FLAGS) $(INC) ${src} "$(ASLDLINK)" /OUT:$(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.dll $(ASLDLINK_FLAGS) $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj - ImageTool GetAcpi $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.dll ${dst} + ImageTool GetAcpi -o ${dst} $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.dll "$(ASLCC)" $(DEPS_FLAGS) -c -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj $(CC_FLAGS) $(ASLCC_FLAGS) $(DEPS_FLAGS) $(INC) ${src} "$(ASLDLINK)" -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.dll $(ASLDLINK_FLAGS) $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj $(CC_FLAGS) $(ASLCC_FLAGS) - ImageTool GetAcpi $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.dll ${dst} + ImageTool GetAcpi -o ${dst} $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.dll "$(ASLCC)" $(DEPS_FLAGS) -c -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj $(CC_FLAGS) $(ASLCC_FLAGS) $(DEPS_FLAGS) $(INC) ${src} "$(ASLDLINK)" /OUT:$(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.dll $(ASLDLINK_FLAGS) $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj - ImageTool GetAcpi $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.dll ${dst} + ImageTool GetAcpi -o ${dst} $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.dll "$(ASLCC)" $(DEPS_FLAGS) -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj $(ASLCC_FLAGS) $(DEPS_FLAGS) $(INC) ${src} "$(ASLDLINK)" -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.dll $(ASLDLINK_FLAGS) $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj "$(MTOC)" -subsystem $(MODULE_TYPE) $(MTOC_FLAGS) $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.dll $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.pecoff - ImageTool GetAcpi $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.pecoff ${dst} + ImageTool GetAcpi -o ${dst} $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.pecoff [Nasm-to-Binary-Code-File] @@ -646,4 +646,4 @@ $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc - ImageTool HiiBin $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc $(MODULE_GUID) $(HII_BINARY_PACKAGES) + ImageTool HiiBin $(MODULE_GUID) -o $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc $(HII_BINARY_PACKAGES) diff --git a/BaseTools/ImageTool/ImageTool.c b/BaseTools/ImageTool/ImageTool.c index 07f2f3bb51..2527526b86 100644 --- a/BaseTools/ImageTool/ImageTool.c +++ b/BaseTools/ImageTool/ImageTool.c @@ -379,65 +379,147 @@ GenExecutable ( int main (int argc, const char *argv[]) { - RETURN_STATUS Status; - UINT32 NumOfFiles; + RETURN_STATUS Status; + UINT32 NumOfFiles; + const char *OutputName; + const char *InputName; + const char *FormatName; + const char *TypeName; + const char *HiiFileName; + const char *BaseAddress; + bool Strip; + bool FixedAddress; + int ArgIndex; if (argc < 2) { fprintf (stderr, "ImageTool: No command is specified\n"); raise (); return -1; } - - if (strcmp (argv[1], "ElfToPe") == 0 || strcmp (argv[1], "PeXip") == 0) { + // + // The command structure must prefix all output files with "-o" and all + // following dash-less parameters must be input files due to scanning for + // these arguments by BaseTools/GenMake. + // + if (strcmp (argv[1], "GenImage") == 0) { if (argc < 5) { fprintf (stderr, "ImageTool: Command arguments are missing\n"); - fprintf (stderr, " Usage: ImageTool %s InputFile OutputFile ModuleType [HiiRc]\n", argv[1]); + fprintf (stderr, " Usage: ImageTool GenImage [-c Format] [-t ModuleType] [-h HiiRc] [-b BaseAddress] [-s] [-f] -o OutputFile InputFile\n"); raise (); return -1; } - Status = GenExecutable (argv[3], argv[2], "PE", argv[4], argc >= 6 ? argv[5] : NULL, NULL, FALSE, FALSE); + OutputName = NULL; + InputName = NULL; + FormatName = NULL; + TypeName = NULL; + HiiFileName = NULL; + BaseAddress = NULL; + Strip = false; + FixedAddress = false; + for (ArgIndex = 2; ArgIndex < argc; ++ArgIndex) { + if (strcmp (argv[ArgIndex], "-o") == 0) { + ++ArgIndex; + if (ArgIndex == argc) { + fprintf (stderr, "Must specify an argument to -o\n"); + return -1; + } + + OutputName = argv[ArgIndex]; + } else if (strcmp (argv[ArgIndex], "-c") == 0) { + ++ArgIndex; + if (ArgIndex == argc) { + fprintf (stderr, "Must specify an argument to -c\n"); + return -1; + } + + FormatName = argv[ArgIndex]; + } else if (strcmp (argv[ArgIndex], "-t") == 0) { + ++ArgIndex; + if (ArgIndex == argc) { + fprintf (stderr, "Must specify an argument to -t\n"); + return -1; + } + + TypeName = argv[ArgIndex]; + } else if (strcmp (argv[ArgIndex], "-h") == 0) { + ++ArgIndex; + if (ArgIndex == argc) { + fprintf (stderr, "Must specify an argument to -h\n"); + return -1; + } + + HiiFileName = argv[ArgIndex]; + } else if (strcmp (argv[ArgIndex], "-b") == 0) { + ++ArgIndex; + if (ArgIndex == argc) { + fprintf (stderr, "Must specify an argument to -b\n"); + return -1; + } + + BaseAddress = argv[ArgIndex]; + } else if (strcmp (argv[ArgIndex], "-s") == 0) { + Strip = true; + } else if (strcmp (argv[ArgIndex], "-f") == 0) { + FixedAddress = true; + } else if (argv[ArgIndex][0] == '-') { + fprintf (stderr, "Unknown parameter %s\n", argv[ArgIndex]); + } else if (InputName == NULL) { + InputName = argv[ArgIndex]; + } else { + fprintf (stderr, "GenImage only supports one input file.\n"); + return -1; + } + } + + if (OutputName == NULL) { + fprintf (stderr, "Must provide an output file.\n"); + return -1; + } + + if (InputName == NULL) { + fprintf (stderr, "Must provide an input file.\n"); + return -1; + } + + Status = GenExecutable ( + OutputName, + InputName, + FormatName, + TypeName, + HiiFileName, + BaseAddress, + Strip, + FixedAddress + ); if (RETURN_ERROR (Status)) { raise (); return -1; } } else if (strcmp (argv[1], "HiiBin") == 0) { - if (argc < 5) { + if (argc < 5 || strcmp (argv[3], "-o") != 0) { fprintf (stderr, "ImageTool: Command arguments are missing\n"); - fprintf (stderr, " Usage: ImageTool HiiBin OutputFile GUID InputFile1 InputFile2 ...\n"); + fprintf (stderr, " Usage: ImageTool HiiBin GUID -o OutputFile InputFile1 InputFile2 ...\n"); raise (); return -1; } - NumOfFiles = (UINT32)argc - 4U; + NumOfFiles = (UINT32)argc - 5U; - Status = HiiBin (argv[2], argv[3], &argv[4], NumOfFiles); - if (RETURN_ERROR (Status)) { - raise (); - return -1; - } - } else if (strcmp (argv[1], "Rebase") == 0) { - if (argc < 5) { - fprintf (stderr, "ImageTool: Command arguments are missing\n"); - fprintf (stderr, " Usage: ImageTool Rebase Address InputFile OutputFile\n"); - raise (); - return -1; - } - - Status = GenExecutable (argv[4], argv[3], "PE", NULL, NULL, argv[2], FALSE, FALSE); + Status = HiiBin (argv[4], argv[2], &argv[5], NumOfFiles); if (RETURN_ERROR (Status)) { raise (); return -1; } } else if (strcmp (argv[1], "GetAcpi") == 0) { - if (argc < 4) { + if (argc != 5 || strcmp (argv[2], "-o") != 0) { fprintf (stderr, "ImageTool: Command arguments are missing\n"); - fprintf (stderr, " Usage: ImageTool GetAcpi InputFile OutputFile\n"); + fprintf (stderr, " Usage: ImageTool GetAcpi -o OutputFile InputFile\n"); raise (); return -1; } - Status = GetAcpi (argv[2], argv[3]); + Status = GetAcpi (argv[4], argv[3]); if (RETURN_ERROR (Status)) { raise (); return -1; diff --git a/OpenCorePkg b/OpenCorePkg index d185827c70..f78f741042 160000 --- a/OpenCorePkg +++ b/OpenCorePkg @@ -1 +1 @@ -Subproject commit d185827c701dace24f32f7042ab05a9b0d50d6ec +Subproject commit f78f7410426cd18c1845cd7c5612e34a1efe7eae