@@ -46,99 +46,104 @@ ifndef PLATFORM
46
46
endif
47
47
48
48
# Detect system processor architecture
49
- ifndef ARCHITECTURE
50
- ifeq ($(PLATFORM),Windows)
51
- BUILD_ARCH := $(PROCESSOR_ARCHITECTURE )
52
- else
53
- BUILD_ARCH := $(shell uname -m)
54
- endif
49
+ ifeq ($(PLATFORM ) ,Windows)
50
+ HOST_BUILD_ARCH := $(PROCESSOR_ARCHITECTURE )
55
51
else
56
- BUILD_ARCH := $(ARCHITECTURE )
52
+ HOST_BUILD_ARCH := $(shell uname -m )
57
53
endif
54
+ BUILD_ARCH := $(if $(ARCHITECTURE ) ,$(ARCHITECTURE ) ,$(HOST_BUILD_ARCH ) )
58
55
59
- # Set actual architecture
56
+ # Set actual architecture for HOST and TARGET builds
60
57
# The current architecture can be obtained by: gcc -Q --help=target
61
- ifeq ($(BUILD_ARCH ) ,armel)
62
- override ARCHITECTURE = $(BUILD_ARCH )
63
- ARCHITECTURE_FAMILY = generic
64
- ARCHITECTURE_CFLAGS :=
65
- else ifeq ($(BUILD_ARCH),armhf)
66
- override ARCHITECTURE = arm32
67
- ARCHITECTURE_FAMILY = arm32
68
- ARCHITECTURE_CFLAGS := -march=armv7-a+fp -marm
69
- else ifeq ($(patsubst armv6%,armv6,$(BUILD_ARCH)),armv6)
70
- override ARCHITECTURE = arm32
71
- ARCHITECTURE_FAMILY = arm32
72
- ARCHITECTURE_CFLAGS := -march=armv6 -marm
73
- else ifeq ($(patsubst armv7ve%,armv7ve,$(BUILD_ARCH)),armv7ve)
74
- override ARCHITECTURE = arm32
75
- ARCHITECTURE_FAMILY = arm32
76
- ARCHITECTURE_CFLAGS := -march=armv7ve -marm
77
- else ifeq ($(patsubst armv7%,armv7,$(BUILD_ARCH)),armv7)
78
- override ARCHITECTURE = arm32
79
- ARCHITECTURE_FAMILY = arm32
80
- ARCHITECTURE_CFLAGS := -march=armv7-a -marm
81
- else ifeq ($(patsubst armv8%,armv8,$(BUILD_ARCH)),armv8)
82
- override ARCHITECTURE = arm32
83
- ARCHITECTURE_FAMILY = arm32
84
- ARCHITECTURE_CFLAGS := -march=armv7-a -marm
85
- else ifeq ($(patsubst aarch64%,aarch64,$(BUILD_ARCH)),aarch64)
86
- override ARCHITECTURE = aarch64
87
- ARCHITECTURE_FAMILY = aarch64
88
- ARCHITECTURE_CFLAGS := -march=armv8-a
89
- else ifeq ($(BUILD_ARCH),arm64)
90
- override ARCHITECTURE = aarch64
91
- ARCHITECTURE_FAMILY = aarch64
92
- ARCHITECTURE_CFLAGS := -march=armv8-a
93
- else ifeq ($(BUILD_ARCH),arm32)
94
- override ARCHITECTURE = arm32
95
- ARCHITECTURE_FAMILY = arm32
96
- ARCHITECTURE_CFLAGS := -march=armv6 -marm
97
- else ifeq ($(BUILD_ARCH),arm)
98
- override ARCHITECTURE = arm32
99
- ARCHITECTURE_FAMILY = arm32
100
- ARCHITECTURE_CFLAGS := -march=armv6 -marm
101
- else ifeq ($(patsubst %x86_64%,x86_64,$(BUILD_ARCH)),x86_64)
102
- override ARCHITECTURE = x86_64
103
- ARCHITECTURE_FAMILY = x86_64
104
- ARCHITECTURE_CFLAGS := -march=x86-64 -m64
105
- else ifeq ($(patsubst %amd64%,amd64,$(BUILD_ARCH)),amd64)
106
- override ARCHITECTURE = x86_64
107
- ARCHITECTURE_FAMILY = x86_64
108
- ARCHITECTURE_CFLAGS := -march=x86-64 -m64
109
- else ifeq ($(patsubst %AMD64%,AMD64,$(BUILD_ARCH)),AMD64)
110
- override ARCHITECTURE = x86_64
111
- ARCHITECTURE_FAMILY = x86_64
112
- ARCHITECTURE_CFLAGS := -march=x86-64 -m64
113
- else ifeq ($(BUILD_ARCH),i86pc)
114
- override ARCHITECTURE = x86_64
115
- ARCHITECTURE_FAMILY = x86_64
116
- ARCHITECTURE_CFLAGS := -march=x86-64 -m64
117
- else ifeq ($(patsubst %i686%,i686,$(BUILD_ARCH)),i686)
118
- override ARCHITECTURE = i686
119
- ARCHITECTURE_FAMILY = ia32
120
- ARCHITECTURE_CFLAGS := -march=i686 -m32
121
- else ifeq ($(patsubst i%86,i586,$(BUILD_ARCH)),i586)
122
- override ARCHITECTURE = i586
123
- ARCHITECTURE_FAMILY = ia32
124
- ARCHITECTURE_CFLAGS := -march=i586 -m32
125
- else ifeq ($(BUILD_ARCH),x86)
126
- override ARCHITECTURE = i686
127
- ARCHITECTURE_FAMILY = ia32
128
- ARCHITECTURE_CFLAGS := -march=i686 -m32
129
- else ifeq ($(BUILD_ARCH),riscv32)
130
- override ARCHITECTURE = riscv32
131
- ARCHITECTURE_FAMILY = riscv32
132
- ARCHITECTURE_CFLAGS := -march=rv32imafdc -mabi=lp32d
133
- else ifeq ($(BUILD_ARCH),riscv64)
134
- override ARCHITECTURE = riscv64
135
- ARCHITECTURE_FAMILY = riscv64
136
- ARCHITECTURE_CFLAGS := -march=rv64imafdc -mabi=lp64d
137
- else
138
- override ARCHITECTURE = $(BUILD_ARCH )
139
- ARCHITECTURE_FAMILY = generic
140
- ARCHITECTURE_CFLAGS :=
141
- endif
58
+ define detect_architecture =
59
+ ifeq ($(1 ) ,armel)
60
+ $(2 ) _NAME = $(1 )
61
+ $(2 ) _FAMILY = generic
62
+ $(2 ) _CFLAGS :=
63
+ else ifeq ($(1 ) ,armhf)
64
+ $(2 ) _NAME = arm32
65
+ $(2 ) _FAMILY = arm32
66
+ $(2 ) _CFLAGS := -march=armv7-a+fp -marm
67
+ else ifeq ($(patsubst armv6% ,armv6,$(1 ) ) ,armv6)
68
+ $(2 ) _NAME = arm32
69
+ $(2 ) _FAMILY = arm32
70
+ $(2 ) _CFLAGS := -march=armv6 -marm
71
+ else ifeq ($(patsubst armv7ve% ,armv7ve,$(1 ) ) ,armv7ve)
72
+ $(2 ) _NAME = arm32
73
+ $(2 ) _FAMILY = arm32
74
+ $(2 ) _CFLAGS := -march=armv7ve -marm
75
+ else ifeq ($(patsubst armv7% ,armv7,$(1 ) ) ,armv7)
76
+ $(2 ) _NAME = arm32
77
+ $(2 ) _FAMILY = arm32
78
+ $(2 ) _CFLAGS := -march=armv7-a -marm
79
+ else ifeq ($(patsubst armv8% ,armv8,$(1 ) ) ,armv8)
80
+ $(2 ) _NAME = arm32
81
+ $(2 ) _FAMILY = arm32
82
+ $(2 ) _CFLAGS := -march=armv7-a -marm
83
+ else ifeq ($(patsubst aarch64% ,aarch64,$(1 ) ) ,aarch64)
84
+ $(2 ) _NAME = aarch64
85
+ $(2 ) _FAMILY = aarch64
86
+ $(2 ) _CFLAGS := -march=armv8-a
87
+ else ifeq ($(1 ) ,arm64)
88
+ $(2 ) _NAME = aarch64
89
+ $(2 ) _FAMILY = aarch64
90
+ $(2 ) _CFLAGS := -march=armv8-a
91
+ else ifeq ($(1 ) ,arm32)
92
+ $(2 ) _NAME = arm32
93
+ $(2 ) _FAMILY = arm32
94
+ $(2 ) _CFLAGS := -march=armv6 -marm
95
+ else ifeq ($(1 ) ,arm)
96
+ $(2 ) _NAME = arm32
97
+ $(2 ) _FAMILY = arm32
98
+ $(2 ) _CFLAGS := -march=armv6 -marm
99
+ else ifeq ($(patsubst % x86_64% ,x86_64,$(1 ) ) ,x86_64)
100
+ $(2 ) _NAME = x86_64
101
+ $(2 ) _FAMILY = x86_64
102
+ $(2 ) _CFLAGS := -march=x86-64 -m64
103
+ else ifeq ($(patsubst % amd64% ,amd64,$(1 ) ) ,amd64)
104
+ $(2 ) _NAME = x86_64
105
+ $(2 ) _FAMILY = x86_64
106
+ $(2 ) _CFLAGS := -march=x86-64 -m64
107
+ else ifeq ($(patsubst % AMD64% ,AMD64,$(1 ) ) ,AMD64)
108
+ $(2 ) _NAME = x86_64
109
+ $(2 ) _FAMILY = x86_64
110
+ $(2 ) _CFLAGS := -march=x86-64 -m64
111
+ else ifeq ($(1 ) ,i86pc)
112
+ $(2 ) _NAME = x86_64
113
+ $(2 ) _FAMILY = x86_64
114
+ $(2 ) _CFLAGS := -march=x86-64 -m64
115
+ else ifeq ($(patsubst % i686% ,i686,$(1 ) ) ,i686)
116
+ $(2 ) _NAME = i686
117
+ $(2 ) _FAMILY = ia32
118
+ $(2 ) _CFLAGS := -march=i686 -m32
119
+ else ifeq ($(patsubst i% 86,i586,$(1 ) ) ,i586)
120
+ $(2 ) _NAME = i586
121
+ $(2 ) _FAMILY = ia32
122
+ $(2 ) _CFLAGS := -march=i586 -m32
123
+ else ifeq ($(1 ) ,x86)
124
+ $(2 ) _NAME = i686
125
+ $(2 ) _FAMILY = ia32
126
+ $(2 ) _CFLAGS := -march=i686 -m32
127
+ else ifeq ($(1 ) ,riscv32)
128
+ $(2 ) _NAME = riscv32
129
+ $(2 ) _FAMILY = riscv32
130
+ $(2 ) _CFLAGS := -march=rv32imafdc -mabi=lp32d
131
+ else ifeq ($(1 ) ,riscv64)
132
+ $(2 ) _NAME = riscv64
133
+ $(2 ) _FAMILY = riscv64
134
+ $(2 ) _CFLAGS := -march=rv64imafdc -mabi=lp64d
135
+ else
136
+ $(2 ) _NAME = $(1 )
137
+ $(2 ) _FAMILY = generic
138
+ $(2 ) _CFLAGS :=
139
+ endif
140
+ endef
141
+
142
+ $(eval $(call detect_architecture,$(BUILD_ARCH),ARCHITECTURE))
143
+ $(eval $(call detect_architecture,$(HOST_BUILD_ARCH),HOST_ARCHITECTURE))
144
+
145
+ override ARCHITECTURE = $(ARCHITECTURE_NAME )
146
+ override HOST_ARCHITECTURE = $(HOST_ARCHITECTURE_NAME )
142
147
143
148
# Extension of libraries
144
149
ifndef LIBRARY_EXT
@@ -191,6 +196,9 @@ COMMON_VARS = \
191
196
EXECUTABLE_EXT \
192
197
EXPORT_SYMBOLS \
193
198
FEATURES \
199
+ HOST_ARCHITECTURE \
200
+ HOST_ARCHITECTURE_FAMILY \
201
+ HOST_ARCHITECTURE_CFLAGS \
194
202
INSTALL_HEADERS \
195
203
LIBRARY_EXT \
196
204
LIBRARY_PREFIX \
0 commit comments