edk2/BaseTools/Source/C/Makefiles/ms.common
Kun Qin ef23e3c9e7 BaseTools: Enable control flow guard for Windows builds
Certain environments require Control Flow Guard (CFG) to be enabled at
build time as part of their security hardening requirements.

This change adds the necessary compiler and linker flags to enable CFG
support.

Signed-off-by: Kun Qin <kun.qin@microsoft.com>
2026-03-26 02:28:23 +00:00

91 lines
2.8 KiB
Text

## @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
!IFNDEF MAKEROOT
MAKEROOT = $(SOURCE_PATH)
!ENDIF
!IFNDEF EDK2_PATH
EDK2_PATH = $(MAKEROOT)\..\..\..
!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 = $(EDK2_PATH)\MdePkg\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
# Note: Disable flexible array member warnings
CFLAGS = $(CFLAGS) /wd4200
# Note: Suppress function implementation and prototype inconsistency warnings
CFLAGS = $(CFLAGS) /wd4028
!ELSEIF "$(HOST_ARCH)"=="X64"
ARCH_INCLUDE = $(EDK2_PATH)\MdePkg\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
CFLAGS = $(CFLAGS) /wd4267 /wd4244 /wd4334
# Note: Disable flexible array member warnings
CFLAGS = $(CFLAGS) /wd4200
# Note: Suppress function implementation and prototype inconsistency warnings
CFLAGS = $(CFLAGS) /wd4028
!ELSEIF "$(HOST_ARCH)"=="AARCH64"
ARCH_INCLUDE = $(EDK2_PATH)\MdePkg\Include\AArch64
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
# Note: These are bit-width conversion related warning suppressions.
CFLAGS = $(CFLAGS) /wd4267 /wd4244 /wd4334
# Note: Disable flexible array member warnings
CFLAGS = $(CFLAGS) /wd4200
# Note: Suppress function implementation and prototype inconsistency warnings
CFLAGS = $(CFLAGS) /wd4028
!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
INC = $(INC) -I $(EDK2_PATH)\MdePkg\Include
CFLAGS = $(CFLAGS) /nologo /Z7 /c /O2 /MT /W4 /WX /guard:cf /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE
CPPFLAGS = $(CPPFLAGS) /EHsc /nologo /Z7 /c /O2 /MT /guard:cf /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE