@@ -38,108 +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
43
+ else ifeq ($(findstring Haiku,$(BUILD_SYSTEM)),Haiku)
44
+ PLATFORM := Haiku
41
45
endif
42
46
endif
43
47
44
48
# Detect system processor architecture
45
- ifndef ARCHITECTURE
46
- ifeq ($(PLATFORM),Windows)
47
- BUILD_ARCH := $(PROCESSOR_ARCHITECTURE )
48
- else
49
- BUILD_ARCH := $(shell uname -m)
50
- endif
49
+ ifeq ($(PLATFORM ) ,Windows)
50
+ HOST_BUILD_ARCH := $(PROCESSOR_ARCHITECTURE )
51
51
else
52
- BUILD_ARCH := $(ARCHITECTURE )
52
+ HOST_BUILD_ARCH := $(shell uname -m )
53
53
endif
54
+ BUILD_ARCH := $(if $(ARCHITECTURE ) ,$(ARCHITECTURE ) ,$(HOST_BUILD_ARCH ) )
54
55
55
- # Set actual architecture
56
+ # Set actual architecture for HOST and TARGET builds
56
57
# The current architecture can be obtained by: gcc -Q --help=target
57
- ifeq ($(BUILD_ARCH ) ,armel)
58
- override ARCHITECTURE = $(BUILD_ARCH )
59
- ARCHITECTURE_FAMILY = generic
60
- ARCHITECTURE_CFLAGS :=
61
- else ifeq ($(BUILD_ARCH),armhf)
62
- override ARCHITECTURE = arm32
63
- ARCHITECTURE_FAMILY = arm32
64
- ARCHITECTURE_CFLAGS := -march=armv7-a+fp -marm
65
- else ifeq ($(patsubst armv6%,armv6,$(BUILD_ARCH)),armv6)
66
- override ARCHITECTURE = arm32
67
- ARCHITECTURE_FAMILY = arm32
68
- ARCHITECTURE_CFLAGS := -march=armv6 -marm
69
- else ifeq ($(patsubst armv7ve%,armv7ve,$(BUILD_ARCH)),armv7ve)
70
- override ARCHITECTURE = arm32
71
- ARCHITECTURE_FAMILY = arm32
72
- ARCHITECTURE_CFLAGS := -march=armv7ve -marm
73
- else ifeq ($(patsubst armv7%,armv7,$(BUILD_ARCH)),armv7)
74
- override ARCHITECTURE = arm32
75
- ARCHITECTURE_FAMILY = arm32
76
- ARCHITECTURE_CFLAGS := -march=armv7-a -marm
77
- else ifeq ($(patsubst armv8%,armv8,$(BUILD_ARCH)),armv8)
78
- override ARCHITECTURE = arm32
79
- ARCHITECTURE_FAMILY = arm32
80
- ARCHITECTURE_CFLAGS := -march=armv7-a -marm
81
- else ifeq ($(patsubst aarch64%,aarch64,$(BUILD_ARCH)),aarch64)
82
- override ARCHITECTURE = aarch64
83
- ARCHITECTURE_FAMILY = aarch64
84
- ARCHITECTURE_CFLAGS := -march=armv8-a
85
- else ifeq ($(BUILD_ARCH),arm64)
86
- override ARCHITECTURE = aarch64
87
- ARCHITECTURE_FAMILY = aarch64
88
- ARCHITECTURE_CFLAGS := -march=armv8-a
89
- else ifeq ($(BUILD_ARCH),arm32)
90
- override ARCHITECTURE = arm32
91
- ARCHITECTURE_FAMILY = arm32
92
- ARCHITECTURE_CFLAGS := -march=armv6 -marm
93
- else ifeq ($(BUILD_ARCH),arm)
94
- override ARCHITECTURE = arm32
95
- ARCHITECTURE_FAMILY = arm32
96
- ARCHITECTURE_CFLAGS := -march=armv6 -marm
97
- else ifeq ($(patsubst %x86_64%,x86_64,$(BUILD_ARCH)),x86_64)
98
- override ARCHITECTURE = x86_64
99
- ARCHITECTURE_FAMILY = x86_64
100
- ARCHITECTURE_CFLAGS := -march=x86-64 -m64
101
- else ifeq ($(patsubst %amd64%,amd64,$(BUILD_ARCH)),amd64)
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 ($(BUILD_ARCH),i86pc)
110
- override ARCHITECTURE = x86_64
111
- ARCHITECTURE_FAMILY = x86_64
112
- ARCHITECTURE_CFLAGS := -march=x86-64 -m64
113
- else ifeq ($(patsubst %i686%,i686,$(BUILD_ARCH)),i686)
114
- override ARCHITECTURE = i686
115
- ARCHITECTURE_FAMILY = ia32
116
- ARCHITECTURE_CFLAGS := -march=i686 -m32
117
- else ifeq ($(patsubst i%86,i586,$(BUILD_ARCH)),i586)
118
- override ARCHITECTURE = i586
119
- ARCHITECTURE_FAMILY = ia32
120
- ARCHITECTURE_CFLAGS := -march=i586 -m32
121
- else ifeq ($(BUILD_ARCH),x86)
122
- override ARCHITECTURE = i686
123
- ARCHITECTURE_FAMILY = ia32
124
- ARCHITECTURE_CFLAGS := -march=i686 -m32
125
- else ifeq ($(BUILD_ARCH),riscv32)
126
- override ARCHITECTURE = riscv32
127
- ARCHITECTURE_FAMILY = riscv32
128
- ARCHITECTURE_CFLAGS := -march=rv32imafdc -mabi=lp32d
129
- else ifeq ($(BUILD_ARCH),riscv64)
130
- override ARCHITECTURE = riscv64
131
- ARCHITECTURE_FAMILY = riscv64
132
- ARCHITECTURE_CFLAGS := -march=rv64imafdc -mabi=lp64d
133
- else
134
- override ARCHITECTURE = $(BUILD_ARCH )
135
- ARCHITECTURE_FAMILY = generic
136
- ARCHITECTURE_CFLAGS :=
137
- 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 )
138
147
139
148
# Extension of libraries
140
149
ifndef LIBRARY_EXT
141
150
ifeq ($(PLATFORM),Windows)
142
151
LIBRARY_EXT := .dll
152
+ else ifeq ($(PLATFORM),MacOS)
153
+ LIBRARY_EXT := .dylib
143
154
else
144
155
LIBRARY_EXT := .so
145
156
endif
@@ -180,10 +191,14 @@ COMMON_VARS = \
180
191
ARCHITECTURE \
181
192
ARCHITECTURE_FAMILY \
182
193
ARCHITECTURE_CFLAGS \
194
+ CROSS_COMPILE \
183
195
DEBUG \
184
196
EXECUTABLE_EXT \
185
197
EXPORT_SYMBOLS \
186
198
FEATURES \
199
+ HOST_ARCHITECTURE \
200
+ HOST_ARCHITECTURE_FAMILY \
201
+ HOST_ARCHITECTURE_CFLAGS \
187
202
INSTALL_HEADERS \
188
203
LIBRARY_EXT \
189
204
LIBRARY_PREFIX \
@@ -205,6 +220,7 @@ sysvars:
205
220
echo " ARCHITECTURE_CFLAGS compiler flags to specify architecture"
206
221
echo " ARCHITECTURE_FAMILY compiler flags to specify architecture family"
207
222
echo " ARCHITECTURE_LDFLAGS linker flags to specify architecture"
223
+ echo " CROSS_COMPILE enable/disable cross-compilation"
208
224
echo " DEBUG build with debug options"
209
225
echo " DEVEL build with modules checked out for read/write URL"
210
226
echo " EXECUTABLE_EXT file extension for executable files"
0 commit comments