@@ -40,20 +40,21 @@ is10_4 := $(shell bc <<< "$${OSTYPE\#darwin} == 8")
4040macos_version := 0$(shell sw_vers -productVersion 2>/dev/null | cut -d. -f1-2 || sw_vers 2>/dev/null | perl -ne 'if (/ProductVersion:\s* (\d+(\.\d+) ?)/) { print $$1 }' | cut -d. -f1-2)
4141
4242# Version comparisons using proper macOS version detection
43- is_sequoia_or_later := $(shell echo "$(macos_version ) >= 15.0" | bc -l 2>/dev/null || echo "0")
44- is_big_sur_or_later := $(shell echo "$(macos_version ) >= 11.0" | bc -l 2>/dev/null || echo "0")
45- is_catalina_or_later := $(shell echo "$(macos_version ) >= 10.15" | bc -l 2>/dev/null || echo "0")
46- is_mojave_or_later := $(shell echo "$(macos_version ) >= 10.14" | bc -l 2>/dev/null || echo "0")
47- is_high_sierra_or_later := $(shell echo "$(macos_version ) >= 10.13" | bc -l 2>/dev/null || echo "0")
48- is_sierra_or_later := $(shell echo "$(macos_version ) >= 10.12" | bc -l 2>/dev/null || echo "0")
49- is_el_capitan_or_later := $(shell echo "$(macos_version ) >= 10.11" | bc -l 2>/dev/null || echo "0")
50- is_yosemite_or_later := $(shell echo "$(macos_version ) >= 10.10" | bc -l 2>/dev/null || echo "0")
51- is_mavericks_or_later := $(shell echo "$(macos_version ) >= 10.9" | bc -l 2>/dev/null || echo "0")
52- is_mountain_lion_or_later := $(shell echo "$(macos_version ) >= 10.8" | bc -l 2>/dev/null || echo "0")
53- is_lion_or_later := $(shell echo "$(macos_version ) >= 10.7" | bc -l 2>/dev/null || echo "0")
54- is_snow_leopard_or_later := $(shell echo "$(macos_version ) >= 10.6" | bc -l 2>/dev/null || echo "0")
55- is_leopard_or_later := $(shell echo "$(macos_version ) >= 10.5" | bc -l 2>/dev/null || echo "0")
56- is_tiger_or_later := $(shell echo "$(macos_version ) >= 10.4" | bc -l 2>/dev/null || echo "0")
43+ # Convert to integer format (major*10000 + minor*100 + patch) for proper comparison
44+ is_sequoia_or_later := $(shell expr $(shell echo "$(macos_version ) " | sed 's/\./ /' | awk '{print $$1 * 10000 + $$2 * 100 + ($$3 ? $$3 : 0) }') \>= 150000)
45+ is_big_sur_or_later := $(shell expr $(shell echo "$(macos_version ) " | sed 's/\./ /' | awk '{print $$1 * 10000 + $$2 * 100 + ($$3 ? $$3 : 0) }') \>= 110000)
46+ is_catalina_or_later := $(shell expr $(shell echo "$(macos_version ) " | sed 's/\./ /' | awk '{print $$1 * 10000 + $$2 * 100 + ($$3 ? $$3 : 0) }') \>= 101500)
47+ is_mojave_or_later := $(shell expr $(shell echo "$(macos_version ) " | sed 's/\./ /' | awk '{print $$1 * 10000 + $$2 * 100 + ($$3 ? $$3 : 0) }') \>= 101400)
48+ is_high_sierra_or_later := $(shell expr $(shell echo "$(macos_version ) " | sed 's/\./ /' | awk '{print $$1 * 10000 + $$2 * 100 + ($$3 ? $$3 : 0) }') \>= 101300)
49+ is_sierra_or_later := $(shell expr $(shell echo "$(macos_version ) " | sed 's/\./ /' | awk '{print $$1 * 10000 + $$2 * 100 + ($$3 ? $$3 : 0) }') \>= 101200)
50+ is_el_capitan_or_later := $(shell expr $(shell echo "$(macos_version ) " | sed 's/\./ /' | awk '{print $$1 * 10000 + $$2 * 100 + ($$3 ? $$3 : 0) }') \>= 101100)
51+ is_yosemite_or_later := $(shell expr $(shell echo "$(macos_version ) " | sed 's/\./ /' | awk '{print $$1 * 10000 + $$2 * 100 + ($$3 ? $$3 : 0) }') \>= 101000)
52+ is_mavericks_or_later := $(shell expr $(shell echo "$(macos_version ) " | sed 's/\./ /' | awk '{print $$1 * 10000 + $$2 * 100 + ($$3 ? $$3 : 0) }') \>= 100900)
53+ is_mountain_lion_or_later := $(shell expr $(shell echo "$(macos_version ) " | sed 's/\./ /' | awk '{print $$1 * 10000 + $$2 * 100 + ($$3 ? $$3 : 0) }') \>= 100800)
54+ is_lion_or_later := $(shell expr $(shell echo "$(macos_version ) " | sed 's/\./ /' | awk '{print $$1 * 10000 + $$2 * 100 + ($$3 ? $$3 : 0) }') \>= 100700)
55+ is_snow_leopard_or_later := $(shell expr $(shell echo "$(macos_version ) " | sed 's/\./ /' | awk '{print $$1 * 10000 + $$2 * 100 + ($$3 ? $$3 : 0) }') \>= 100600)
56+ is_leopard_or_later := $(shell expr $(shell echo "$(macos_version ) " | sed 's/\./ /' | awk '{print $$1 * 10000 + $$2 * 100 + ($$3 ? $$3 : 0) }') \>= 100500)
57+ is_tiger_or_later := $(shell expr $(shell echo "$(macos_version ) " | sed 's/\./ /' | awk '{print $$1 * 10000 + $$2 * 100 + ($$3 ? $$3 : 0) }') \>= 100400)
5758
5859# latestsdk := $(shell xcodebuild -showsdks | sort -r | sed -nE '/.*(-sdk macosx.*)/ { s//\1/;p;q; }')
5960
@@ -62,18 +63,20 @@ build := build/buildlatest
6263extensions := /System/Library/Extensions
6364debugsym :=
6465sdk := -sdk macosx
65- deploy := MACOSX_DEPLOYMENT_TARGET=10.6
66+ deploy := MACOSX_DEPLOYMENT_TARGET=10.3
6667arch :=
6768# Use proper macOS version detection for build configuration
6869ifneq ($(is_sequoia_or_later ) , 0)
6970 proj := DirectHW.xcodeproj
7071 build := build/build15
7172 sdk := -sdk macosx
73+ deploy := MACOSX_DEPLOYMENT_TARGET=10.6
7274 arch := -arch x86_64 -arch arm64
7375else ifneq ($(is_big_sur_or_later), 0)
7476 proj := DirectHW.xcodeproj
7577 build := build/build11
7678 sdk := -sdk macosx
79+ deploy := MACOSX_DEPLOYMENT_TARGET=10.6
7780 arch := -arch x86_64 -arch arm64
7881else ifneq ($(is_catalina_or_later), 0)
7982 proj := DirectHW.xcodeproj
@@ -84,12 +87,12 @@ else ifneq ($(is_mojave_or_later), 0)
8487 proj := DirectHW.xcodeproj
8588 build := build/build10.14
8689 sdk := -sdk macosx10.14
87- arch := -arch x86_64
90+ arch := -arch i386 -arch x86_64
8891else ifneq ($(is_high_sierra_or_later), 0)
8992 proj := DirectHW.xcodeproj
9093 build := build/build10.13
9194 sdk := -sdk macosx10.13
92- arch := -arch x86_64
95+ arch := -arch i386 -arch x86_64
9396else ifneq ($(is_sierra_or_later), 0)
9497 proj := DirectHW10.6.xcodeproj
9598 build := build/build10.12
@@ -141,15 +144,25 @@ endif
141144
142145main :
143146 @echo " === Attempting Xcode build ===" && \
144- xcodebuild -alltargets -project $(proj ) $(sdk ) $(deploy ) $(arch ) SYMROOT=$(build ) 2> /dev/null && \
145- echo " ✅ Xcode build succeeded" || \
146- (echo " ❌ Xcode build failed, falling back to Command Line Tools" && \
147- $(MAKE ) libs-fallback)
147+ BUILD_LOG=" $( build) /xcode_build.log" && \
148+ mkdir -p $(build ) && \
149+ if xcodebuild -alltargets -project $( proj) $( sdk) $( deploy) $( arch) SYMROOT=$( build) 2> " $$ BUILD_LOG" ; then \
150+ echo " ✅ Xcode build succeeded" ; \
151+ else \
152+ echo " ❌ Xcode build failed, falling back to Command Line Tools" ; \
153+ if [ -f " $$ BUILD_LOG" ] && [ -s " $$ BUILD_LOG" ]; then \
154+ echo " Xcode build errors:" ; \
155+ cat " $$ BUILD_LOG" ; \
156+ fi ; \
157+ $(MAKE ) libs-fallback; \
158+ fi
148159
149160libs : DirectHW.c DirectHW.h
150161 mkdir -p $(build ) /Release
151- ifeq ($(is_big_sur_or_later ) ,1 )
162+ ifneq ($(is_big_sur_or_later ) ,0 )
152163 $(CC) -arch x86_64 -arch arm64 DirectHW.c -dynamiclib -framework IOKit -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -o $(build)/Release/libDirectHW.dylib $(debugsym)
164+ else ifneq ($(is_mojave_or_later)$(is_high_sierra_or_later),0)
165+ $(CC) -arch i386 -arch x86_64 DirectHW.c -dynamiclib -framework IOKit -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -o $(build)/Release/libDirectHW.dylib $(debugsym)
153166else
154167 $(CC) -arch x86_64 DirectHW.c -dynamiclib -framework IOKit -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -o $(build)/Release/libDirectHW.dylib $(debugsym)
155168endif
@@ -158,8 +171,10 @@ endif
158171libs-fallback : DirectHW.c DirectHW.h
159172 @echo " === Building with Command Line Tools (fallback) ==="
160173 mkdir -p $(build ) /Release
161- ifeq ($(is_big_sur_or_later ) ,1 )
174+ ifneq ($(is_big_sur_or_later ) ,0 )
162175 $(CC) -arch x86_64 -arch arm64 DirectHW.c -dynamiclib -framework IOKit -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -o $(build)/Release/libDirectHW.dylib $(debugsym)
176+ else ifneq ($(is_mojave_or_later)$(is_high_sierra_or_later),0)
177+ $(CC) -arch i386 -arch x86_64 DirectHW.c -dynamiclib -framework IOKit -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -o $(build)/Release/libDirectHW.dylib $(debugsym)
163178else
164179 $(CC) -arch x86_64 DirectHW.c -dynamiclib -framework IOKit -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -o $(build)/Release/libDirectHW.dylib $(debugsym)
165180endif
0 commit comments