Skip to content

Commit 921097f

Browse files
committed
Enable building for 32-bit 10.6
1 parent 450dfe1 commit 921097f

File tree

6 files changed

+140
-13
lines changed

6 files changed

+140
-13
lines changed

.github/workflows/main.yml

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ on:
99

1010
env:
1111
PROJECT_TYPE: KEXT
12+
ACID32: 1
1213

1314
jobs:
1415
build:

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ build
66
xcshareddata
77
Lilu.kext
88
/MacKernelSDK
9+
/clang32

MacHyperVSupport.xcodeproj/project.pbxproj

+113-12
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
418F052326483C8300E1D14C /* HyperVICService.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 418F052126483C8300E1D14C /* HyperVICService.hpp */; };
2424
418F052C2648451200E1D14C /* HyperVShutdown.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 418F052A2648451200E1D14C /* HyperVShutdown.cpp */; };
2525
418F052D2648451200E1D14C /* HyperVShutdown.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 418F052B2648451200E1D14C /* HyperVShutdown.hpp */; };
26-
418F842C2648A3AD003F8520 /* libkmod.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 41BE4113263EDEA10018C52B /* libkmod.a */; };
2726
418F84342648B07F003F8520 /* HyperVMouse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 418F84322648B07E003F8520 /* HyperVMouse.cpp */; };
2827
418F84352648B07F003F8520 /* HyperVMouse.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 418F84332648B07E003F8520 /* HyperVMouse.hpp */; };
2928
418F843D2648BA38003F8520 /* HyperVStorage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 418F843B2648BA38003F8520 /* HyperVStorage.cpp */; };
@@ -169,7 +168,6 @@
169168
isa = PBXFrameworksBuildPhase;
170169
buildActionMask = 2147483647;
171170
files = (
172-
418F842C2648A3AD003F8520 /* libkmod.a in Frameworks */,
173171
);
174172
runOnlyForDeploymentPostprocessing = 0;
175173
};
@@ -528,7 +526,7 @@
528526
);
529527
runOnlyForDeploymentPostprocessing = 0;
530528
shellPath = /bin/sh;
531-
shellScript = "cd \"${TARGET_BUILD_DIR}\"\n\ndist=(\"$FULL_PRODUCT_NAME\")\n\narchive=\"${PRODUCT_NAME}-${MODULE_VERSION}-$(echo $CONFIGURATION | tr /a-z/ /A-Z/).zip\"\nrm -rf *.zip\nzip -qry -FS \"${archive}\" \"${dist[@]}\"\n";
529+
shellScript = "cd \"${TARGET_BUILD_DIR}\"\n\ndist=(\"$FULL_PRODUCT_NAME\")\n\narchive=\"${PRODUCT_NAME}-${MODULE_VERSION}-$(echo $CONFIGURATION | tr /a-z/ /A-Z/).zip\"\nrm -rf *.zip\n\nif [ -z \"${OVERRIDE_PYTHON3}\" ]; then\n # Use whatever is in PATH\n OVERRIDE_PYTHON3=python3\nfi\n\nif [[ \"$ARCHS\" == *\"ACID32\"* ]]; then\n \"${OVERRIDE_PYTHON3}\" ${SRCROOT}/clang32/fix-macho32 \"${EXECUTABLE_PATH}\" || exit 1\nfi\n\nzip -qry -FS \"${archive}\" \"${dist[@]}\"\n";
532530
};
533531
/* End PBXShellScriptBuildPhase section */
534532

@@ -570,6 +568,8 @@
570568
buildSettings = {
571569
ALWAYS_SEARCH_USER_PATHS = NO;
572570
ARCHS = x86_64;
571+
CC = "$(inherited)";
572+
"CC[arch=ACID32]" = "$(PROJECT_DIR)/clang32/clang-12";
573573
CLANG_ANALYZER_NONNULL = YES;
574574
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
575575
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
@@ -599,7 +599,9 @@
599599
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
600600
CLANG_WARN_UNREACHABLE_CODE = YES;
601601
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
602-
COPY_PHASE_STRIP = NO;
602+
"COMPILER_INDEX_STORE_ENABLE[arch=ACID32]" = NO;
603+
CXX = "$(inherited)";
604+
"CXX[arch=ACID32]" = "$(PROJECT_DIR)/clang32/clang-12";
603605
DEBUG_INFORMATION_FORMAT = dwarf;
604606
ENABLE_STRICT_OBJC_MSGSEND = YES;
605607
ENABLE_TESTABILITY = YES;
@@ -620,11 +622,11 @@
620622
HEADER_SEARCH_PATHS = "${PROJECT_DIR}/Lilu.kext/Contents/Resources";
621623
KERNEL_EXTENSION_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/MacKernelSDK/Headers";
622624
KERNEL_FRAMEWORK_HEADERS = "$(PROJECT_DIR)/MacKernelSDK/Headers";
625+
LDPLUSPLUS = "$(inherited)";
626+
"LDPLUSPLUS[arch=ACID32]" = "$(PROJECT_DIR)/clang32/clang-12";
623627
MACOSX_DEPLOYMENT_TARGET = 10.6;
624-
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
625-
MTL_FAST_MATH = YES;
626-
ONLY_ACTIVE_ARCH = YES;
627628
SDKROOT = macosx;
629+
VALID_ARCHS = "x86_64 ACID32";
628630
};
629631
name = Debug;
630632
};
@@ -633,6 +635,8 @@
633635
buildSettings = {
634636
ALWAYS_SEARCH_USER_PATHS = NO;
635637
ARCHS = x86_64;
638+
CC = "$(inherited)";
639+
"CC[arch=ACID32]" = "$(PROJECT_DIR)/clang32/clang-12";
636640
CLANG_ANALYZER_NONNULL = YES;
637641
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
638642
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
@@ -662,12 +666,16 @@
662666
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
663667
CLANG_WARN_UNREACHABLE_CODE = YES;
664668
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
665-
COPY_PHASE_STRIP = NO;
669+
COMPILER_INDEX_STORE_ENABLE = YES;
670+
"COMPILER_INDEX_STORE_ENABLE[arch=ACID32]" = NO;
671+
CXX = "$(inherited)";
672+
"CXX[arch=ACID32]" = "$(PROJECT_DIR)/clang32/clang-12";
666673
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
667674
ENABLE_NS_ASSERTIONS = NO;
668675
ENABLE_STRICT_OBJC_MSGSEND = YES;
669676
GCC_C_LANGUAGE_STANDARD = gnu11;
670677
GCC_NO_COMMON_BLOCKS = YES;
678+
GCC_OPTIMIZATION_LEVEL = 3;
671679
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
672680
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
673681
GCC_WARN_UNDECLARED_SELECTOR = YES;
@@ -677,10 +685,11 @@
677685
HEADER_SEARCH_PATHS = "${PROJECT_DIR}/Lilu.kext/Contents/Resources";
678686
KERNEL_EXTENSION_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/MacKernelSDK/Headers";
679687
KERNEL_FRAMEWORK_HEADERS = "$(PROJECT_DIR)/MacKernelSDK/Headers";
688+
LDPLUSPLUS = "$(inherited)";
689+
"LDPLUSPLUS[arch=ACID32]" = "$(PROJECT_DIR)/clang32/clang-12";
680690
MACOSX_DEPLOYMENT_TARGET = 10.6;
681-
MTL_ENABLE_DEBUG_INFO = NO;
682-
MTL_FAST_MATH = YES;
683691
SDKROOT = macosx;
692+
VALID_ARCHS = "x86_64 ACID32";
684693
};
685694
name = Release;
686695
};
@@ -693,6 +702,7 @@
693702
CODE_SIGN_INJECT_BASE_ENTITLEMENTS = NO;
694703
CODE_SIGN_STYLE = Manual;
695704
COMBINE_HIDPI_IMAGES = YES;
705+
COPY_PHASE_STRIP = NO;
696706
CURRENT_PROJECT_VERSION = "$(MODULE_VERSION)";
697707
GCC_PREPROCESSOR_DEFINITIONS = (
698708
"$(inherited)",
@@ -702,13 +712,57 @@
702712
INFOPLIST_FILE = MacHyperVSupport/Info.plist;
703713
LIBRARY_SEARCH_PATHS = (
704714
"$(inherited)",
705-
"$(PROJECT_DIR)/MacKernelSDK/Library/x86_64",
715+
"$(PROJECT_DIR)/MacKernelSDK/Library/universal",
706716
);
717+
MACOSX_DEPLOYMENT_TARGET = 10.6;
718+
"MACOSX_DEPLOYMENT_TARGET[arch=ACID32]" = 10.6;
707719
MARKETING_VERSION = "$(MODULE_VERSION)";
708720
MODULE_NAME = fish.goldfish64.MacHyperVSupport;
709721
MODULE_START = "$(PRODUCT_NAME)_kern_start";
710722
MODULE_STOP = "$(PRODUCT_NAME)_kern_stop";
711723
MODULE_VERSION = 0.6;
724+
OTHER_CFLAGS = (
725+
"-mmmx",
726+
"-msse",
727+
"-msse2",
728+
"-msse3",
729+
"-mfpmath=sse",
730+
"-mssse3",
731+
"-ftree-vectorize",
732+
"-fno-non-call-exceptions",
733+
"-fno-builtin",
734+
"-fno-asynchronous-unwind-tables",
735+
"-Wno-unknown-warning-option",
736+
"-Wno-ossharedptr-misuse",
737+
"-Wno-vla",
738+
"-Wno-stdlibcxx-not-found",
739+
);
740+
"OTHER_CFLAGS[arch=ACID32]" = (
741+
"-mmmx",
742+
"-msse",
743+
"-msse2",
744+
"-mfpmath=sse",
745+
"-ftree-vectorize",
746+
"-fno-non-call-exceptions",
747+
"-fno-builtin",
748+
"-fno-asynchronous-unwind-tables",
749+
"-Wno-unknown-warning-option",
750+
"-Wno-ossharedptr-misuse",
751+
"-Wno-vla",
752+
"-Wno-stdlibcxx-not-found",
753+
"-static",
754+
"-fallow-unsupported",
755+
"-fno-jump-tables",
756+
"-fno-stack-protector",
757+
"-target",
758+
"i386-apple-macos10.6",
759+
);
760+
OTHER_LDFLAGS = "-static";
761+
"OTHER_LDFLAGS[arch=ACID32]" = (
762+
"-static",
763+
"-target",
764+
"i386-apple-macos10.6",
765+
);
712766
PRODUCT_BUNDLE_IDENTIFIER = fish.goldfish64.MacHyperVSupport;
713767
PRODUCT_NAME = "$(TARGET_NAME)";
714768
RUN_CLANG_STATIC_ANALYZER = YES;
@@ -726,6 +780,8 @@
726780
CODE_SIGN_STYLE = Manual;
727781
COMBINE_HIDPI_IMAGES = YES;
728782
CURRENT_PROJECT_VERSION = "$(MODULE_VERSION)";
783+
DEAD_CODE_STRIPPING = YES;
784+
"DEAD_CODE_STRIPPING[arch=ACID32]" = NO;
729785
GCC_PREPROCESSOR_DEFINITIONS = (
730786
"$(inherited)",
731787
"MODULE_VERSION=$(MODULE_VERSION)",
@@ -734,16 +790,61 @@
734790
INFOPLIST_FILE = MacHyperVSupport/Info.plist;
735791
LIBRARY_SEARCH_PATHS = (
736792
"$(inherited)",
737-
"$(PROJECT_DIR)/MacKernelSDK/Library/x86_64",
793+
"$(PROJECT_DIR)/MacKernelSDK/Library/universal",
738794
);
795+
MACOSX_DEPLOYMENT_TARGET = 10.6;
796+
"MACOSX_DEPLOYMENT_TARGET[arch=ACID32]" = 10.6;
739797
MARKETING_VERSION = "$(MODULE_VERSION)";
740798
MODULE_NAME = fish.goldfish64.MacHyperVSupport;
741799
MODULE_START = "$(PRODUCT_NAME)_kern_start";
742800
MODULE_STOP = "$(PRODUCT_NAME)_kern_stop";
743801
MODULE_VERSION = 0.6;
802+
OTHER_CFLAGS = (
803+
"-mmmx",
804+
"-msse",
805+
"-msse2",
806+
"-msse3",
807+
"-mfpmath=sse",
808+
"-mssse3",
809+
"-ftree-vectorize",
810+
"-fno-non-call-exceptions",
811+
"-fno-builtin",
812+
"-fno-asynchronous-unwind-tables",
813+
"-Wno-unknown-warning-option",
814+
"-Wno-ossharedptr-misuse",
815+
"-Wno-vla",
816+
"-Wno-stdlibcxx-not-found",
817+
);
818+
"OTHER_CFLAGS[arch=ACID32]" = (
819+
"-mmmx",
820+
"-msse",
821+
"-msse2",
822+
"-mfpmath=sse",
823+
"-ftree-vectorize",
824+
"-fno-non-call-exceptions",
825+
"-fno-builtin",
826+
"-fno-asynchronous-unwind-tables",
827+
"-Wno-unknown-warning-option",
828+
"-Wno-ossharedptr-misuse",
829+
"-Wno-vla",
830+
"-Wno-stdlibcxx-not-found",
831+
"-static",
832+
"-fallow-unsupported",
833+
"-fno-jump-tables",
834+
"-fno-stack-protector",
835+
"-target",
836+
"i386-apple-macos10.6",
837+
);
838+
OTHER_LDFLAGS = "-static";
839+
"OTHER_LDFLAGS[arch=ACID32]" = (
840+
"-static",
841+
"-target",
842+
"i386-apple-macos10.6",
843+
);
744844
PRODUCT_BUNDLE_IDENTIFIER = fish.goldfish64.MacHyperVSupport;
745845
PRODUCT_NAME = "$(TARGET_NAME)";
746846
RUN_CLANG_STATIC_ANALYZER = YES;
847+
STRIP_STYLE = "non-global";
747848
WRAPPER_EXTENSION = kext;
748849
};
749850
name = Release;

MacHyperVSupport/PlatformProvider/HyperVPlatformProvider.cpp

+12
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,13 @@ void HyperVPlatformProvider::init() {
4545
lilu_os_memcpy(setConsoleInfoOrg, (void *)setConsoleInfoAddr, sizeof(setConsoleInfoOrg));
4646

4747
// Patch to call wrapper.
48+
#if defined(__i386__)
49+
uint64_t patched[2] {0x25FF | ((setConsoleInfoAddr + 8) << 16), (uint32_t)wrapSetConsoleInfo};
50+
#elif defined(__x86_64__)
4851
uint64_t patched[2] {0x0225FF, (uintptr_t)wrapSetConsoleInfo};
52+
#else
53+
#error Unsupported arch
54+
#endif
4955
if (MachInfo::setKernelWriting(true, KernelPatcher::kernelWriteLock) == KERN_SUCCESS) {
5056
lilu_os_memcpy((void *)setConsoleInfoAddr, patched, sizeof(patched));
5157
MachInfo::setKernelWriting(false, KernelPatcher::kernelWriteLock);
@@ -78,7 +84,13 @@ IOReturn HyperVPlatformProvider::wrapSetConsoleInfo(IOPlatformExpert *that, PE_V
7884

7985
// Patch again if kPEBaseAddressChange was not the operation.
8086
if (op != kPEBaseAddressChange) {
87+
#if defined(__i386__)
88+
uint64_t patched[2] {0x25FF | ((instance->setConsoleInfoAddr + 8) << 16), (uint32_t)wrapSetConsoleInfo};
89+
#elif defined(__x86_64__)
8190
uint64_t patched[2] {0x0225FF, (uintptr_t)wrapSetConsoleInfo};
91+
#else
92+
#error Unsupported arch
93+
#endif
8294
if (MachInfo::setKernelWriting(true, KernelPatcher::kernelWriteLock) == KERN_SUCCESS) {
8395
lilu_os_memcpy((void *)instance->setConsoleInfoAddr, patched, sizeof(patched));
8496
MachInfo::setKernelWriting(false, KernelPatcher::kernelWriteLock);

MacHyperVSupport/VMBusController/HyperVVMBusController.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ struct IOMapperDisabler : public IOMapper {
3131

3232
bool HyperVVMBusController::identifyHyperV() {
3333
bool isHyperV = false;
34-
UInt32 regs[4];
34+
uint32_t regs[4];
3535

3636
//
3737
// Verify we are in fact on Hyper-V.

MacHyperVSupport/VMBusController/Hypercalls.cpp

+12
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,13 @@ UInt32 HyperVVMBusController::hypercallPostMessage(UInt32 connectionId, HyperVMe
109109
// During hypercall, the calling processor will be suspended until the hypercall returns.
110110
// Linux disables preemption during this time, but unsure if that is needed due to the above.
111111
//
112+
#if defined (__i386__)
113+
asm volatile ("call *%5" : "=A" (status) : "d" (0), "a" (kHypercallTypePostMessage), "b" (0), "c" ((uint32_t) postPageBuffer->physAddr), "m" (hypercallPage));
114+
#elif defined(__x86_64__)
112115
asm volatile ("call *%3" : "=a" (status) : "c" (kHypercallTypePostMessage), "d" (postPageBuffer->physAddr), "m" (hypercallPage));
116+
#else
117+
#error Unsupported arch
118+
#endif
113119
return status & kHypercallStatusMask;
114120
}
115121

@@ -119,6 +125,12 @@ bool HyperVVMBusController::hypercallSignalEvent(UInt32 connectionId) {
119125
//
120126
// Perform a fast version of HvSignalEvent hypercall.
121127
//
128+
#if defined (__i386__)
129+
asm volatile ("call *%5" : "=A" (status) : "d" (0), "a" (kHypercallTypeSignalEvent), "b" (0), "c" (connectionId), "m" (hypercallPage));
130+
#elif defined(__x86_64__)
122131
asm volatile ("call *%3" : "=a" (status) : "c" (kHypercallTypeSignalEvent), "d" (connectionId), "m" (hypercallPage));
132+
#else
133+
#error Unsupported arch
134+
#endif
123135
return status == kHypercallStatusSuccess;
124136
}

0 commit comments

Comments
 (0)