@@ -14,7 +14,6 @@ fn main() {
1414 build. flag_if_supported ( "/Ob2" ) ;
1515 build. flag_if_supported ( "/DNDEBUG" ) ;
1616 build. flag_if_supported ( "/EHsc" ) ;
17- build. flag_if_supported ( "/std:c++17" ) ;
1817 build. flag_if_supported ( "/Gd" ) ;
1918 build. flag_if_supported ( "/TP" ) ;
2019 build. flag_if_supported ( "/Gm-" ) ;
@@ -24,9 +23,6 @@ fn main() {
2423 build. flag_if_supported ( "/Zc:forScope" ) ;
2524 build. flag_if_supported ( "/Zc:inline" ) ;
2625 build. flag_if_supported ( "-O3" ) ;
27- build. flag_if_supported ( "-Wc++17-extensions" ) ;
28- build. flag_if_supported ( "-std=c++1z" ) ;
29- build. flag_if_supported ( "-std=gnu++1z" ) ;
3026 build. flag_if_supported ( "-mcx16" ) ;
3127 build. flag_if_supported ( "-fno-exceptions" ) ;
3228 build. flag_if_supported ( "-fno-rtti" ) ;
@@ -36,6 +32,21 @@ fn main() {
3632 build. static_crt ( true ) ;
3733 build. cpp ( true ) ;
3834 build. debug ( false ) ;
35+ if cfg ! ( feature = "usecxx20" ) {
36+ build. flag_if_supported ( "-std=c++17" ) ; //original required if cxx20 not supported
37+ build. flag_if_supported ( "/std:c++17" ) ;
38+ build. flag_if_supported ( "-Wc++17-extensions" ) ;
39+ build. flag_if_supported ( "/Wc++17-extensions" ) ;
40+ build. flag_if_supported ( "-std=c++20" ) ;
41+ build. flag_if_supported ( "/std:c++20" ) ;
42+ build. flag_if_supported ( "-Wc++20-extensions" ) ;
43+ build. flag_if_supported ( "/Wc++20-extensions" ) ;
44+ } else {
45+ build. flag_if_supported ( "-std=c++17" ) ;
46+ build. flag_if_supported ( "/std:c++17" ) ;
47+ build. flag_if_supported ( "-Wc++17-extensions" ) ;
48+ build. flag_if_supported ( "/Wc++17-extensions" ) ;
49+ }
3950
4051 let triple = std:: env:: var ( "TARGET" ) . unwrap ( ) ;
4152 let target_os = std:: env:: var ( "CARGO_CFG_TARGET_OS" ) . expect ( "target_os not defined!" ) ;
@@ -57,7 +68,7 @@ fn main() {
5768 } else if triple. contains ( "x86_64" ) {
5869 build. define ( "ANDROID_ABI" , "x86_64" ) ;
5970 } else if triple. contains ( "i686" ) {
60- build. define ( "ANDROID_ABI" , "x86_64 " ) ;
71+ build. define ( "ANDROID_ABI" , "x86 " ) ;
6172 } else if triple. contains ( "neon" ) {
6273 build. define ( "ANDROID_ABI" , "armeabi-v7a with NEON" ) ;
6374 } else if triple. contains ( "arm" ) {
@@ -73,6 +84,10 @@ fn main() {
7384 }
7485 }
7586
87+ if cfg ! ( feature = "win8compat" ) {
88+ build. flag_if_supported ( "-DWINVER=0x0603" ) ;
89+ }
90+
7691 let target = if cfg ! ( feature = "1mib" ) {
7792 "snmallocshim-1mib-rust"
7893 } else if cfg ! ( feature = "16mib" ) {
@@ -105,7 +120,9 @@ fn main() {
105120 }
106121
107122 if target_env == "msvc" {
108- println ! ( "cargo:rustc-link-lib=dylib=mincore" ) ;
123+ if cfg ! ( not( feature = "win8compat" ) ) {
124+ println ! ( "cargo:rustc-link-lib=dylib=mincore" ) ;
125+ }
109126 }
110127
111128 if target_os == "windows" && target_env == "gnu" {
@@ -179,7 +196,7 @@ fn main() {
179196 } else if triple. contains ( "x86_64" ) {
180197 cfg = cfg. define ( "ANDROID_ABI" , "x86_64" ) ;
181198 } else if triple. contains ( "i686" ) {
182- cfg = cfg. define ( "ANDROID_ABI" , "x86_64 " ) ;
199+ cfg = cfg. define ( "ANDROID_ABI" , "x86 " ) ;
183200 } else if triple. contains ( "neon" ) {
184201 cfg = cfg. define ( "ANDROID_ABI" , "armeabi-v7a with NEON" )
185202 } else if triple. contains ( "arm" ) {
@@ -190,6 +207,9 @@ fn main() {
190207 if cfg ! ( all( windows, target_env = "msvc" ) ) {
191208 cfg = cfg. define ( "CMAKE_CXX_FLAGS_RELEASE" , "/O2 /Ob2 /DNDEBUG /EHsc" ) ;
192209 cfg = cfg. define ( "CMAKE_C_FLAGS_RELEASE" , "/O2 /Ob2 /DNDEBUG /EHsc" ) ;
210+ if cfg ! ( feature = "win8compat" ) {
211+ cfg = cfg. define ( "WIN8COMPAT" , "ON" )
212+ }
193213 }
194214
195215 if cfg ! ( all( windows, target_env = "gnu" ) ) {
@@ -208,6 +228,10 @@ fn main() {
208228 cfg = cfg. define ( "SNMALLOC_OPTIMISE_FOR_CURRENT_MACHINE" , "ON" )
209229 }
210230
231+ if cfg ! ( feature = "usecxx20" ) {
232+ cfg = cfg. define ( "SNMALLOC_USE_CXX20" , "ON" )
233+ }
234+
211235 if cfg ! ( feature = "stats" ) {
212236 cfg = cfg. define ( "USE_SNMALLOC_STATS" , "ON" )
213237 }
@@ -229,7 +253,9 @@ fn main() {
229253 println ! ( "cargo:rustc-link-lib={}" , target) ;
230254
231255 if cfg ! ( all( windows, target_env = "msvc" ) ) {
232- println ! ( "cargo:rustc-link-lib=dylib=mincore" ) ;
256+ if cfg ! ( not( feature = "win8compat" ) ) {
257+ println ! ( "cargo:rustc-link-lib=dylib=mincore" ) ;
258+ }
233259 println ! (
234260 "cargo:rustc-link-search=native={}/{}" ,
235261 dst. display( ) ,
@@ -258,7 +284,7 @@ fn main() {
258284 . lines ( )
259285 . filter ( |line| line. starts_with ( "libraries: =" ) )
260286 . map ( |line| line. split_at ( "libraries: =" . len ( ) ) . 1 )
261- . flat_map ( |line| line. split ( ";" ) )
287+ . flat_map ( |line| line. split ( ';' ) )
262288 . for_each ( |path| {
263289 println ! ( "cargo:rustc-link-search=native={}" , path) ;
264290 } ) ;
0 commit comments