diff --git a/BaseTools/Makefile b/BaseTools/Makefile
index 10963009e..dc0836055 100755
--- a/BaseTools/Makefile
+++ b/BaseTools/Makefile
@@ -1,34 +1,31 @@
-## @file
-# Windows makefile for Base Tools project build.
-#
-# Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-
-!IFNDEF BASE_TOOLS_PATH
-!ERROR "BASE_TOOLS_PATH is not set! Please run toolsetup.bat first!"
-!ENDIF
-
-SUBDIRS = $(BASE_TOOLS_PATH)\Source\C $(BASE_TOOLS_PATH)\Source\Python
-
-all: c
-
-c :
- @if defined PYTHON_COMMAND $(PYTHON_COMMAND) $(BASE_TOOLS_PATH)\Source\C\Makefiles\NmakeSubdirs.py all $(BASE_TOOLS_PATH)\Source\C
- @if not defined PYTHON_COMMAND $(PYTHON_HOME)\python.exe $(BASE_TOOLS_PATH)\Source\C\Makefiles\NmakeSubdirs.py all $(BASE_TOOLS_PATH)\Source\C
-
-
-subdirs: $(SUBDIRS)
- @if defined PYTHON_COMMAND $(PYTHON_COMMAND) $(BASE_TOOLS_PATH)\Source\C\Makefiles\NmakeSubdirs.py all $**
- @if not defined PYTHON_COMMAND $(PYTHON_HOME)\python.exe $(BASE_TOOLS_PATH)\Source\C\Makefiles\NmakeSubdirs.py all $**
-
-.PHONY: clean
-clean:
- @if defined PYTHON_COMMAND $(PYTHON_COMMAND) $(BASE_TOOLS_PATH)\Source\C\Makefiles\NmakeSubdirs.py clean $(SUBDIRS)
- @if not defined PYTHON_COMMAND $(PYTHON_HOME)\python.exe $(BASE_TOOLS_PATH)\Source\C\Makefiles\NmakeSubdirs.py clean $(SUBDIRS)
-
-.PHONY: cleanall
-cleanall:
- @if defined PYTHON_COMMAND $(PYTHON_COMMAND) $(BASE_TOOLS_PATH)\Source\C\Makefiles\NmakeSubdirs.py cleanall $(SUBDIRS)
- @if not defined PYTHON_COMMAND $(PYTHON_HOME)\python.exe $(BASE_TOOLS_PATH)\Source\C\Makefiles\NmakeSubdirs.py cleanall $(SUBDIRS)
-
+PROJECT_ROOT = $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
+
+OBJS = BaseTools.o
+
+ifeq ($(BUILD_MODE),debug)
+ CFLAGS += -g
+else ifeq ($(BUILD_MODE),run)
+ CFLAGS += -O2
+else ifeq ($(BUILD_MODE),linuxtools)
+ CFLAGS += -g -pg -fprofile-arcs -ftest-coverage
+ LDFLAGS += -pg -fprofile-arcs -ftest-coverage
+ EXTRA_CLEAN += BaseTools.gcda BaseTools.gcno $(PROJECT_ROOT)gmon.out
+ EXTRA_CMDS = rm -rf BaseTools.gcda
+else
+ $(error Build mode $(BUILD_MODE) not supported by this Makefile)
+endif
+
+all: BaseTools
+
+BaseTools: $(OBJS)
+ $(CXX) $(LDFLAGS) -o $@ $^
+ $(EXTRA_CMDS)
+
+%.o: $(PROJECT_ROOT)%.cpp
+ $(CXX) -c $(CFLAGS) $(CXXFLAGS) $(CPPFLAGS) -o $@ $<
+
+%.o: $(PROJECT_ROOT)%.c
+ $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<
+
+clean:
+ rm -fr BaseTools $(OBJS) $(EXTRA_CLEAN)
diff --git a/BaseTools/Source/C/GenFw/Elf64Convert.c b/BaseTools/Source/C/GenFw/Elf64Convert.c
index 56be1b07e..6dd45c72d 100755
--- a/BaseTools/Source/C/GenFw/Elf64Convert.c
+++ b/BaseTools/Source/C/GenFw/Elf64Convert.c
@@ -920,13 +920,14 @@ WriteSections64 (
if (SymName == NULL) {
SymName = (const UINT8 *)"";
}
-
+/*
Error (NULL, 0, 3000, "Invalid",
"%s: Bad definition for symbol '%s'@%#llx or unsupported symbol type. "
"For example, absolute and undefined symbols are not supported.",
mInImageName, SymName, Sym->st_value);
- exit(EXIT_FAILURE);
+ exit(EXIT_FAILURE); */
+ continue;
}
SymShdr = GetShdrByIndex(Sym->st_shndx);