diff options
Diffstat (limited to '')
10 files changed, 544 insertions, 0 deletions
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/NmakeSubdirs.bat b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/NmakeSubdirs.bat new file mode 100644 index 00000000..2ea3cf8a --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/NmakeSubdirs.bat @@ -0,0 +1,40 @@ +@REM ## @file
+@REM # Makefile
+@REM #
+@REM # Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
+@REM # SPDX-License-Identifier: BSD-2-Clause-Patent
+@REM #
+
+@echo off
+setlocal
+set TOOL_ERROR=0
+SET NMAKE_COMMAND=%1
+SHIFT
+
+:loop
+if "%1"=="" goto success
+
+ECHO Building %1
+pushd %1
+nmake %NMAKE_COMMAND%
+if ERRORLEVEL 1 (
+ set /A TOOL_ERROR= %TOOL_ERROR% + %ERRORLEVEL%
+ goto error
+)
+ECHO %1 built successfully (%NMAKE_COMMAND%)
+ECHO.
+shift
+popd
+goto loop
+
+:success
+goto exit
+
+:error
+popd
+set /A TOOL_ERROR=%TOOL_ERROR%+%ERRORLEVEL%
+ECHO Error while making %1!
+VERIFY OTHER 2>NUL
+
+:exit
+exit /B %TOOL_ERROR%
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/NmakeSubdirs.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/NmakeSubdirs.py new file mode 100755 index 00000000..155eb223 --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/NmakeSubdirs.py @@ -0,0 +1,166 @@ +# @file NmakeSubdirs.py +# This script support parallel build for nmake in windows environment. +# It supports Python2.x and Python3.x both. +# +# Copyright (c) 2018, Intel Corporation. All rights reserved.<BR> +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# + +# +# Import Modules +# + +from __future__ import print_function +import argparse +import threading +import time +import os +import subprocess +import multiprocessing +import copy +import sys +__prog__ = 'NmakeSubdirs' +__version__ = '%s Version %s' % (__prog__, '0.10 ') +__copyright__ = 'Copyright (c) 2018, Intel Corporation. All rights reserved.' +__description__ = 'Replace for NmakeSubdirs.bat in windows ,support parallel build for nmake.\n' + +cpu_count = multiprocessing.cpu_count() +output_lock = threading.Lock() +def RunCommand(WorkDir=None, *Args, **kwargs): + if WorkDir is None: + WorkDir = os.curdir + if "stderr" not in kwargs: + kwargs["stderr"] = subprocess.STDOUT + if "stdout" not in kwargs: + kwargs["stdout"] = subprocess.PIPE + p = subprocess.Popen(Args, cwd=WorkDir, stderr=kwargs["stderr"], stdout=kwargs["stdout"]) + stdout, stderr = p.communicate() + message = "" + if stdout is not None: + message = stdout.decode(errors='ignore') #for compatibility in python 2 and 3 + + if p.returncode != 0: + raise RuntimeError("Error while execute command \'{0}\' in direcotry {1}\n{2}".format(" ".join(Args), WorkDir, message)) + + output_lock.acquire(True) + print("execute command \"{0}\" in directory {1}".format(" ".join(Args), WorkDir)) + try: + print(message) + except: + pass + output_lock.release() + + return p.returncode, stdout + +class TaskUnit(object): + def __init__(self, func, args, kwargs): + self.func = func + self.args = args + self.kwargs = kwargs + + def __eq__(self, other): + return id(self).__eq__(id(other)) + + def run(self): + return self.func(*self.args, **self.kwargs) + + def __str__(self): + para = list(self.args) + para.extend("{0}={1}".format(k, v)for k, v in self.kwargs.items()) + + return "{0}({1})".format(self.func.__name__, ",".join(para)) + +class ThreadControl(object): + + def __init__(self, maxthread): + self._processNum = maxthread + self.pending = [] + self.running = [] + self.pendingLock = threading.Lock() + self.runningLock = threading.Lock() + self.error = False + self.errorLock = threading.Lock() + self.errorMsg = "errorMsg" + + def addTask(self, func, *args, **kwargs): + self.pending.append(TaskUnit(func, args, kwargs)) + + def waitComplete(self): + self._schedule.join() + + def startSchedule(self): + self._schedule = threading.Thread(target=self.Schedule) + self._schedule.start() + + def Schedule(self): + for i in range(self._processNum): + task = threading.Thread(target=self.startTask) + task.daemon = False + self.running.append(task) + + self.runningLock.acquire(True) + for thread in self.running: + thread.start() + self.runningLock.release() + + while len(self.running) > 0: + time.sleep(0.1) + if self.error: + print("subprocess not exit successfully") + print(self.errorMsg) + + def startTask(self): + while True: + if self.error: + break + self.pendingLock.acquire(True) + if len(self.pending) == 0: + self.pendingLock.release() + break + task = self.pending.pop(0) + self.pendingLock.release() + try: + task.run() + except RuntimeError as e: + if self.error: break + self.errorLock.acquire(True) + self.error = True + self.errorMsg = str(e) + time.sleep(0.1) + self.errorLock.release() + break + + self.runningLock.acquire(True) + self.running.remove(threading.currentThread()) + self.runningLock.release() + +def Run(): + curdir = os.path.abspath(os.curdir) + if len(args.subdirs) == 1: + args.jobs = 1 + if args.jobs == 1: + try: + for dir in args.subdirs: + RunCommand(os.path.join(curdir, dir), "nmake", args.target, stdout=sys.stdout, stderr=subprocess.STDOUT) + except RuntimeError: + exit(1) + else: + controller = ThreadControl(args.jobs) + for dir in args.subdirs: + controller.addTask(RunCommand, os.path.join(curdir, dir), "nmake", args.target) + controller.startSchedule() + controller.waitComplete() + if controller.error: + exit(1) + +if __name__ == "__main__": + parser = argparse.ArgumentParser(prog=__prog__, description=__description__ + __copyright__, conflict_handler='resolve') + + parser.add_argument("target", help="the target for nmake") + parser.add_argument("subdirs", nargs="+", help="the relative dir path of makefile") + parser.add_argument("--jobs", type=int, dest="jobs", default=cpu_count, help="thread number") + parser.add_argument('--version', action='version', version=__version__) + args = parser.parse_args() + Run() + diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/app.makefile b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/app.makefile new file mode 100644 index 00000000..37ed3c2f --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/app.makefile @@ -0,0 +1,22 @@ +## @file +# Makefiles +# +# Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR> +# SPDX-License-Identifier: BSD-2-Clause-Patent +# + +MAKEROOT ?= ../.. + +include $(MAKEROOT)/Makefiles/header.makefile + +APPLICATION = $(MAKEROOT)/bin/$(APPNAME) + +.PHONY:all +all: $(MAKEROOT)/bin $(APPLICATION) + +$(APPLICATION): $(OBJECTS) + $(LINKER) -o $(APPLICATION) $(BUILD_LFLAGS) $(OBJECTS) -L$(MAKEROOT)/libs $(LIBS) + +$(OBJECTS): $(MAKEROOT)/Include/Common/BuildVersion.h + +include $(MAKEROOT)/Makefiles/footer.makefile diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/footer.makefile b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/footer.makefile new file mode 100644 index 00000000..4eeb1a06 --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/footer.makefile @@ -0,0 +1,30 @@ +## @file +# Makefile +# +# Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR> +# SPDX-License-Identifier: BSD-2-Clause-Patent +# + +DEPFILES = $(OBJECTS:%.o=%.d) + +$(MAKEROOT)/libs-$(HOST_ARCH): + mkdir -p $(MAKEROOT)/libs-$(HOST_ARCH) + +.PHONY: install +install: $(MAKEROOT)/libs-$(HOST_ARCH) $(LIBRARY) + cp $(LIBRARY) $(MAKEROOT)/libs-$(HOST_ARCH) + +$(LIBRARY): $(OBJECTS) + $(BUILD_AR) crs $@ $^ + +%.o : %.c + $(BUILD_CC) -c $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) $< -o $@ + +%.o : %.cpp + $(BUILD_CXX) -c $(BUILD_CPPFLAGS) $(BUILD_CXXFLAGS) $< -o $@ + +.PHONY: clean +clean: + @rm -f $(OBJECTS) $(LIBRARY) $(DEPFILES) + +-include $(DEPFILES) diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/header.makefile b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/header.makefile new file mode 100644 index 00000000..45c93595 --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/header.makefile @@ -0,0 +1,137 @@ +## @file +# +# The makefile can be invoked with +# HOST_ARCH = x86_64 or x64 for EM64T build +# HOST_ARCH = ia32 or IA32 for IA32 build +# HOST_ARCH = Arm or ARM for ARM build +# +# Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR> +# SPDX-License-Identifier: BSD-2-Clause-Patent + +ifndef HOST_ARCH + # + # If HOST_ARCH is not defined, then we use 'uname -m' to attempt + # try to figure out the appropriate HOST_ARCH. + # + uname_m = $(shell uname -m) + $(info Attempting to detect HOST_ARCH from 'uname -m': $(uname_m)) + ifneq (,$(strip $(filter $(uname_m), x86_64 amd64))) + HOST_ARCH=X64 + endif + ifeq ($(patsubst i%86,IA32,$(uname_m)),IA32) + HOST_ARCH=IA32 + endif + ifneq (,$(findstring aarch64,$(uname_m))) + HOST_ARCH=AARCH64 + else ifneq (,$(findstring arm64,$(uname_m))) + HOST_ARCH=AARCH64 + else ifneq (,$(findstring arm,$(uname_m))) + HOST_ARCH=ARM + endif + ifneq (,$(findstring riscv64,$(uname_m))) + HOST_ARCH=RISCV64 + endif + ifndef HOST_ARCH + $(info Could not detected HOST_ARCH from uname results) + $(error HOST_ARCH is not defined!) + endif + $(info Detected HOST_ARCH of $(HOST_ARCH) using uname.) +endif + +CYGWIN:=$(findstring CYGWIN, $(shell uname -s)) +LINUX:=$(findstring Linux, $(shell uname -s)) +DARWIN:=$(findstring Darwin, $(shell uname -s)) +ifeq ($(CXX), llvm) +BUILD_CC ?= $(CLANG_BIN)clang +BUILD_CXX ?= $(CLANG_BIN)clang++ +BUILD_AS ?= $(CLANG_BIN)clang +BUILD_AR ?= $(CLANG_BIN)llvm-ar +BUILD_LD ?= $(CLANG_BIN)llvm-ld +else +BUILD_CC ?= gcc +BUILD_CXX ?= g++ +BUILD_AS ?= gcc +BUILD_AR ?= ar +BUILD_LD ?= ld +endif +LINKER ?= $(BUILD_CC) +ifeq ($(HOST_ARCH), IA32) +ARCH_INCLUDE = -I $(MAKEROOT)/Include/Ia32/ + +else ifeq ($(HOST_ARCH), X64) +ARCH_INCLUDE = -I $(MAKEROOT)/Include/X64/ + +else ifeq ($(HOST_ARCH), ARM) +ARCH_INCLUDE = -I $(MAKEROOT)/Include/Arm/ + +else ifeq ($(HOST_ARCH), AARCH64) +ARCH_INCLUDE = -I $(MAKEROOT)/Include/AArch64/ + +else ifeq ($(HOST_ARCH), RISCV64) +ARCH_INCLUDE = -I $(MAKEROOT)/Include/RiscV64/ + +else +$(error Bad HOST_ARCH) +endif + +INCLUDE = $(TOOL_INCLUDE) -I $(MAKEROOT) -I $(MAKEROOT)/Include/Common -I $(MAKEROOT)/Include/ -I $(MAKEROOT)/Include/IndustryStandard -I $(MAKEROOT)/Common/ -I .. -I . $(ARCH_INCLUDE) +BUILD_CPPFLAGS = $(INCLUDE) + +# keep EXTRA_OPTFLAGS last +BUILD_OPTFLAGS = -O2 $(EXTRA_OPTFLAGS) + +ifeq ($(DARWIN),Darwin) +# assume clang or clang compatible flags on OS X +BUILD_CFLAGS = -MD -fshort-wchar -fno-strict-aliasing -Wall -Werror \ +-Wno-deprecated-declarations -Wno-self-assign -Wno-unused-result -nostdlib -g +else +ifeq ($(CXX), llvm) +BUILD_CFLAGS = -MD -fshort-wchar -fno-strict-aliasing -fwrapv \ +-fno-delete-null-pointer-checks -Wall -Werror \ +-Wno-deprecated-declarations -Wno-self-assign \ +-Wno-unused-result -nostdlib -g +else +BUILD_CFLAGS = -MD -fshort-wchar -fno-strict-aliasing -fwrapv \ +-fno-delete-null-pointer-checks -Wall -Werror \ +-Wno-deprecated-declarations -Wno-stringop-truncation -Wno-restrict \ +-Wno-unused-result -nostdlib -g +endif +endif +ifeq ($(CXX), llvm) +BUILD_LFLAGS = +BUILD_CXXFLAGS = -Wno-deprecated-register -Wno-unused-result +else +BUILD_LFLAGS = +BUILD_CXXFLAGS = -Wno-unused-result +endif +ifeq ($(HOST_ARCH), IA32) +# +# Snow Leopard is a 32-bit and 64-bit environment. uname -m returns i386, but gcc defaults +# to x86_64. So make sure tools match uname -m. You can manual have a 64-bit kernal on Snow Leopard +# so only do this is uname -m returns i386. +# +ifeq ($(DARWIN),Darwin) + BUILD_CFLAGS += -arch i386 + BUILD_CPPFLAGS += -arch i386 + BUILD_LFLAGS += -arch i386 +endif +endif + +# keep BUILD_OPTFLAGS last +BUILD_CFLAGS += $(BUILD_OPTFLAGS) +BUILD_CXXFLAGS += $(BUILD_OPTFLAGS) + +# keep EXTRA_LDFLAGS last +BUILD_LFLAGS += $(EXTRA_LDFLAGS) + +.PHONY: all +.PHONY: install +.PHONY: clean + +all: + +$(MAKEROOT)/libs: + mkdir $(MAKEROOT)/libs + +$(MAKEROOT)/bin: + mkdir $(MAKEROOT)/bin diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/lib.makefile b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/lib.makefile new file mode 100644 index 00000000..ea6bf247 --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/lib.makefile @@ -0,0 +1,14 @@ +## @file +# Makefiles +# +# Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR> +# SPDX-License-Identifier: BSD-2-Clause-Patent +# + +include $(MAKEROOT)/Makefiles/header.makefile + +LIBRARY = $(MAKEROOT)/libs/lib$(LIBNAME).a + +all: $(MAKEROOT)/libs $(LIBRARY) + +include $(MAKEROOT)/Makefiles/footer.makefile diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/ms.app b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/ms.app new file mode 100644 index 00000000..3aeb5974 --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/ms.app @@ -0,0 +1,28 @@ +## @file +# Makefile +# +# Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR> +# SPDX-License-Identifier: BSD-2-Clause-Patent +# + +APPLICATION = $(BIN_PATH)\$(APPNAME).exe + +all: $(APPLICATION) + +$(APPLICATION) : $(OBJECTS) + -@if not exist $(BIN_PATH) mkdir $(BIN_PATH) + $(LD) /nologo /debug /OPT:REF /OPT:ICF=10 /incremental:no /nodefaultlib:libc.lib /out:$@ $(LIBS) $** + +$(OBJECTS) : $(SOURCE_PATH)\Include\Common\BuildVersion.h + +.PHONY:clean +.PHONY:cleanall + +clean: + del /f /q $(OBJECTS) *.pdb > nul + +cleanall: + del /f /q $(OBJECTS) $(APPLICATION) *.pdb $(BIN_PATH)\$(APPNAME).pdb > nul + +!INCLUDE $(SOURCE_PATH)\Makefiles\ms.rule + diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/ms.common b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/ms.common new file mode 100644 index 00000000..695da7a3 --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/ms.common @@ -0,0 +1,62 @@ +## @file +# Makefile +# +# Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR> +# SPDX-License-Identifier: BSD-2-Clause-Patent +# + +!IFNDEF EDK_TOOLS_PATH +!ERROR "Please set your EDK_TOOLS_PATH!" +!ENDIF + +!IFNDEF BASE_TOOLS_PATH +!ERROR "BASE_TOOLS_PATH is not set! Please run build_tools.bat at first!" +!ENDIF + +!IFNDEF HOST_ARCH +HOST_ARCH = IA32 +!ENDIF + +MAKE = nmake -nologo + +# DOS del command doesn't support ":\\" in the file path, such as j:\\BaseTools. Convert ":\\" to ":\" +BASE_TOOLS_PATH = $(BASE_TOOLS_PATH::\\=:\) +EDK_TOOLS_PATH = $(EDK_TOOLS_PATH::\\=:\) + +SOURCE_PATH = $(BASE_TOOLS_PATH)\Source\C +BIN_PATH = $(BASE_TOOLS_PATH)\Bin +LIB_PATH = $(BASE_TOOLS_PATH)\Lib + +SYS_BIN_PATH=$(EDK_TOOLS_PATH)\Bin +SYS_LIB_PATH=$(EDK_TOOLS_PATH)\Lib + +!IF "$(HOST_ARCH)"=="IA32" +ARCH_INCLUDE = $(SOURCE_PATH)\Include\Ia32 +BIN_PATH = $(BASE_TOOLS_PATH)\Bin\Win32 +LIB_PATH = $(BASE_TOOLS_PATH)\Lib\Win32 +SYS_BIN_PATH = $(EDK_TOOLS_PATH)\Bin\Win32 +SYS_LIB_PATH = $(EDK_TOOLS_PATH)\Lib\Win32 + +!ELSEIF "$(HOST_ARCH)"=="X64" +ARCH_INCLUDE = $(SOURCE_PATH)\Include\X64 +BIN_PATH = $(BASE_TOOLS_PATH)\Bin\Win64 +LIB_PATH = $(BASE_TOOLS_PATH)\Lib\Win64 +SYS_BIN_PATH = $(EDK_TOOLS_PATH)\Bin\Win64 +SYS_LIB_PATH = $(EDK_TOOLS_PATH)\Lib\Win64 + +!ELSE +!ERROR "Bad HOST_ARCH" +!ENDIF + +CC = cl.exe +CXX = cl.exe +AS = ml.exe +AR = lib.exe +LD = link.exe +LINKER = $(LD) + +INC = $(INC) -I . -I $(SOURCE_PATH)\Include -I $(ARCH_INCLUDE) -I $(SOURCE_PATH)\Common + +CFLAGS = $(CFLAGS) /nologo /Zi /c /O2 /MT /W4 /WX /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE +CPPFLAGS = $(CPPFLAGS) /EHsc /nologo /Zi /c /O2 /MT /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE + diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/ms.lib b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/ms.lib new file mode 100644 index 00000000..6b61fa47 --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/ms.lib @@ -0,0 +1,25 @@ +## @file +# +# Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR> +# SPDX-License-Identifier: BSD-2-Clause-Patent + +!INCLUDE ..\Makefiles\ms.common + +LIBRARY = $(LIB_PATH)\$(LIBNAME).lib + +all: $(LIBRARY) + +$(LIBRARY) : $(OBJECTS) + -@if not exist $(LIB_PATH) mkdir $(LIB_PATH) + $(AR) /nologo /out:$@ $** + +.PHONY:clean +clean: + del /f /q $(OBJECTS) *.pdb > nul + +.PHONY:cleanall +cleanall: + del /f /q $(OBJECTS) $(LIBRARY) *.pdb > nul + +!INCLUDE ..\Makefiles\ms.rule + diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/ms.rule b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/ms.rule new file mode 100644 index 00000000..ba34eabd --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Makefiles/ms.rule @@ -0,0 +1,20 @@ +## @file +# Makefile +# +# Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR> +# SPDX-License-Identifier: BSD-2-Clause-Patent +# + +#DEPFILES = $(OBJECTS:%.o=%.d) + +.c.obj : + $(CC) -c $(CFLAGS) $(INC) $< -Fo$@ + +.S.obj : + $(AS) -c $(ASFLAGS) $< -Fo$@ + +.cpp.obj : + $(CXX) -c $(CPPFLAGS) $(INC) $< -Fo$@ + +#-include $(DEPFILES) + |