1 | ## @file
|
---|
2 | #
|
---|
3 | # The makefile can be invoked with
|
---|
4 | # HOST_ARCH = x86_64 or x64 for EM64T build
|
---|
5 | # HOST_ARCH = ia32 or IA32 for IA32 build
|
---|
6 | # HOST_ARCH = Arm or ARM for ARM build
|
---|
7 | #
|
---|
8 | # Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
|
---|
9 | # SPDX-License-Identifier: BSD-2-Clause-Patent
|
---|
10 |
|
---|
11 | EDK2_PATH ?= $(MAKEROOT)/../../..
|
---|
12 |
|
---|
13 | ifndef HOST_ARCH
|
---|
14 | #
|
---|
15 | # If HOST_ARCH is not defined, then we use 'uname -m' to attempt
|
---|
16 | # try to figure out the appropriate HOST_ARCH.
|
---|
17 | #
|
---|
18 | uname_m = $(shell uname -m)
|
---|
19 | $(info Attempting to detect HOST_ARCH from 'uname -m': $(uname_m))
|
---|
20 | ifneq (,$(strip $(filter $(uname_m), x86_64 amd64)))
|
---|
21 | HOST_ARCH=X64
|
---|
22 | endif
|
---|
23 | ifeq ($(patsubst i%86,IA32,$(uname_m)),IA32)
|
---|
24 | HOST_ARCH=IA32
|
---|
25 | endif
|
---|
26 | ifneq (,$(findstring aarch64,$(uname_m)))
|
---|
27 | HOST_ARCH=AARCH64
|
---|
28 | else ifneq (,$(findstring arm64,$(uname_m)))
|
---|
29 | HOST_ARCH=AARCH64
|
---|
30 | else ifneq (,$(findstring arm,$(uname_m)))
|
---|
31 | HOST_ARCH=ARM
|
---|
32 | endif
|
---|
33 | ifneq (,$(findstring riscv64,$(uname_m)))
|
---|
34 | HOST_ARCH=RISCV64
|
---|
35 | endif
|
---|
36 | ifneq (,$(findstring loongarch64,$(uname_m)))
|
---|
37 | HOST_ARCH=LOONGARCH64
|
---|
38 | endif
|
---|
39 | ifndef HOST_ARCH
|
---|
40 | $(info Could not detected HOST_ARCH from uname results)
|
---|
41 | $(error HOST_ARCH is not defined!)
|
---|
42 | endif
|
---|
43 | $(info Detected HOST_ARCH of $(HOST_ARCH) using uname.)
|
---|
44 | endif
|
---|
45 |
|
---|
46 | CYGWIN:=$(findstring CYGWIN, $(shell uname -s))
|
---|
47 | LINUX:=$(findstring Linux, $(shell uname -s))
|
---|
48 | DARWIN:=$(findstring Darwin, $(shell uname -s))
|
---|
49 | CLANG:=$(shell $(CC) --version | grep clang)
|
---|
50 | ifneq ($(CLANG),)
|
---|
51 | CC ?= $(CLANG_BIN)clang
|
---|
52 | CXX ?= $(CLANG_BIN)clang++
|
---|
53 | AS ?= $(CLANG_BIN)clang
|
---|
54 | AR ?= $(CLANG_BIN)llvm-ar
|
---|
55 | LD ?= $(CLANG_BIN)llvm-ld
|
---|
56 | else ifeq ($(origin CC),default)
|
---|
57 | CC = $(GCC_PREFIX)gcc
|
---|
58 | CXX = $(GCC_PREFIX)g++
|
---|
59 | AS = $(GCC_PREFIX)gcc
|
---|
60 | AR = $(GCC_PREFIX)ar
|
---|
61 | LD = $(GCC_PREFIX)ld
|
---|
62 | endif
|
---|
63 | LINKER ?= $(CC)
|
---|
64 | ifeq ($(HOST_ARCH), IA32)
|
---|
65 | ARCH_INCLUDE = -I $(EDK2_PATH)/MdePkg/Include/Ia32/
|
---|
66 |
|
---|
67 | else ifeq ($(HOST_ARCH), X64)
|
---|
68 | ARCH_INCLUDE = -I $(EDK2_PATH)/MdePkg/Include/X64/
|
---|
69 |
|
---|
70 | else ifeq ($(HOST_ARCH), ARM)
|
---|
71 | ARCH_INCLUDE = -I $(EDK2_PATH)/MdePkg/Include/Arm/
|
---|
72 |
|
---|
73 | else ifeq ($(HOST_ARCH), AARCH64)
|
---|
74 | ARCH_INCLUDE = -I $(EDK2_PATH)/MdePkg/Include/AArch64/
|
---|
75 |
|
---|
76 | else ifeq ($(HOST_ARCH), RISCV64)
|
---|
77 | ARCH_INCLUDE = -I $(EDK2_PATH)/MdePkg/Include/RiscV64/
|
---|
78 |
|
---|
79 | else ifeq ($(HOST_ARCH), LOONGARCH64)
|
---|
80 | ARCH_INCLUDE = -I $(EDK2_PATH)/MdePkg/Include/LoongArch64/
|
---|
81 |
|
---|
82 | else
|
---|
83 | $(error Bad HOST_ARCH)
|
---|
84 | endif
|
---|
85 |
|
---|
86 | INCLUDE = $(TOOL_INCLUDE) -I $(MAKEROOT) -I $(MAKEROOT)/Include/Common -I $(MAKEROOT)/Include/ -I $(MAKEROOT)/Include/IndustryStandard -I $(MAKEROOT)/Common/ -I .. -I . $(ARCH_INCLUDE)
|
---|
87 | INCLUDE += -I $(EDK2_PATH)/MdePkg/Include
|
---|
88 | CPPFLAGS = $(INCLUDE)
|
---|
89 |
|
---|
90 | # keep EXTRA_OPTFLAGS last
|
---|
91 | BUILD_OPTFLAGS = -O2 $(EXTRA_OPTFLAGS)
|
---|
92 |
|
---|
93 | ifeq ($(DARWIN),Darwin)
|
---|
94 | # assume clang or clang compatible flags on OS X
|
---|
95 | CFLAGS = -MD -fshort-wchar -fno-strict-aliasing -Wall -Werror \
|
---|
96 | -Wno-deprecated-declarations -Wno-self-assign -Wno-unused-result -nostdlib -g
|
---|
97 | else
|
---|
98 | ifneq ($(CLANG),)
|
---|
99 | CFLAGS = -MD -fshort-wchar -fno-strict-aliasing -fwrapv \
|
---|
100 | -fno-delete-null-pointer-checks -Wall -Werror \
|
---|
101 | -Wno-deprecated-declarations -Wno-self-assign \
|
---|
102 | -Wno-unused-result -nostdlib -g
|
---|
103 | else
|
---|
104 | CFLAGS = -MD -fshort-wchar -fno-strict-aliasing -fwrapv \
|
---|
105 | -fno-delete-null-pointer-checks -Wall -Werror \
|
---|
106 | -Wno-deprecated-declarations -Wno-stringop-truncation -Wno-restrict \
|
---|
107 | -Wno-unused-result -nostdlib -g
|
---|
108 | endif
|
---|
109 | endif
|
---|
110 | ifneq ($(CLANG),)
|
---|
111 | LDFLAGS =
|
---|
112 | CXXFLAGS = -Wno-deprecated-register -Wno-unused-result -std=c++14
|
---|
113 | else
|
---|
114 | LDFLAGS =
|
---|
115 | CXXFLAGS = -Wno-unused-result
|
---|
116 | endif
|
---|
117 | ifeq ($(HOST_ARCH), IA32)
|
---|
118 | #
|
---|
119 | # Snow Leopard is a 32-bit and 64-bit environment. uname -m returns i386, but gcc defaults
|
---|
120 | # to x86_64. So make sure tools match uname -m. You can manual have a 64-bit kernal on Snow Leopard
|
---|
121 | # so only do this is uname -m returns i386.
|
---|
122 | #
|
---|
123 | ifeq ($(DARWIN),Darwin)
|
---|
124 | CFLAGS += -arch i386
|
---|
125 | CPPFLAGS += -arch i386
|
---|
126 | LDFLAGS += -arch i386
|
---|
127 | endif
|
---|
128 | endif
|
---|
129 |
|
---|
130 | # keep BUILD_OPTFLAGS last
|
---|
131 | CFLAGS += $(BUILD_OPTFLAGS)
|
---|
132 | CXXFLAGS += $(BUILD_OPTFLAGS)
|
---|
133 |
|
---|
134 | # keep EXTRA_LDFLAGS last
|
---|
135 | LDFLAGS += $(EXTRA_LDFLAGS)
|
---|
136 |
|
---|
137 | .PHONY: all
|
---|
138 | .PHONY: install
|
---|
139 | .PHONY: clean
|
---|
140 |
|
---|
141 | all:
|
---|
142 |
|
---|
143 | $(MAKEROOT)/libs:
|
---|
144 | mkdir $(MAKEROOT)/libs
|
---|
145 |
|
---|
146 | $(MAKEROOT)/bin:
|
---|
147 | mkdir $(MAKEROOT)/bin
|
---|