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