@@ -46,99 +46,104 @@ ifndef PLATFORM
4646endif
4747
4848# 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 )
5551else
56- BUILD_ARCH := $(ARCHITECTURE )
52+ HOST_BUILD_ARCH := $(shell uname -m )
5753endif
54+ BUILD_ARCH := $(if $(ARCHITECTURE ) ,$(ARCHITECTURE ) ,$(HOST_BUILD_ARCH ) )
5855
59- # Set actual architecture
56+ # Set actual architecture for HOST and TARGET builds
6057# 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 )
142147
143148# Extension of libraries
144149ifndef LIBRARY_EXT
@@ -191,6 +196,9 @@ COMMON_VARS = \
191196 EXECUTABLE_EXT \
192197 EXPORT_SYMBOLS \
193198 FEATURES \
199+ HOST_ARCHITECTURE \
200+ HOST_ARCHITECTURE_FAMILY \
201+ HOST_ARCHITECTURE_CFLAGS \
194202 INSTALL_HEADERS \
195203 LIBRARY_EXT \
196204 LIBRARY_PREFIX \
0 commit comments