#!/bin/bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" BUILD_DIR="${SCRIPT_DIR}/build/Release" KEXT_BUNDLE="${BUILD_DIR}/QualcommWifi.kext" KEXT_MACOS="${KEXT_BUNDLE}/Contents/MacOS" SDK_PATH="$(xcrun --show-sdk-path)" echo "=== Compilation de QualcommWifi.kext (macOS Tahoe 26.x / Darwin 25) ===" mkdir -p "${KEXT_MACOS}" # 1. Assemblage du firmware embarqué (AMSS, Board-2, M3) echo "[1/5] Assemblage du firmware radio WCN7850..." clang -target x86_64-apple-macos26.5 \ -c "${SCRIPT_DIR}/QualcommWifi/Firmware_WCN7850_Wifi.s" \ -o "${BUILD_DIR}/Firmware_WCN7850_Wifi.o" # 2. Compilation C++ du pilote QualcommWifi echo "[2/5] Compilation C++ de QualcommWifi.cpp..." clang++ -target x86_64-apple-macos26.5 \ -nostdinc -isystem "${SDK_PATH}/System/Library/Frameworks/Kernel.framework/Headers" \ -I"${SCRIPT_DIR}/QualcommWireless/include" \ -I"${SCRIPT_DIR}/QualcommWifi" \ -std=c++17 -fno-builtin -fno-common -mkernel -fno-rtti -fno-exceptions \ -fno-stack-protector -fno-strict-aliasing -Wno-invalid-offsetof -Os \ -DKERNEL -D__IO80211_TARGET=260000 -DAPPLE_KEXT_OVERRIDE=override \ -c "${SCRIPT_DIR}/QualcommWifi/QualcommWifi.cpp" \ -o "${BUILD_DIR}/QualcommWifi.o" # 3. Compilation C du module kmod (kmod_info, start/stop pour OpenCore / PrelinkedKernel) echo "[3/5] Compilation C de QualcommWifi_info.c..." clang -target x86_64-apple-macos26.5 \ -nostdinc -isystem "${SDK_PATH}/System/Library/Frameworks/Kernel.framework/Headers" \ -std=c99 -fno-builtin -mkernel \ -c "${SCRIPT_DIR}/QualcommWifi/QualcommWifi_info.c" \ -o "${BUILD_DIR}/QualcommWifi_info.o" # 4. Édition de liens (Mach-O Kext avec libkmod) echo "[4/5] Édition de liens du binaire Kext..." clang++ -target x86_64-apple-macos26.5 \ -nostdlib -mkernel -Xlinker -kext \ -Xlinker -dead_strip \ "${BUILD_DIR}/QualcommWifi.o" \ "${BUILD_DIR}/Firmware_WCN7850_Wifi.o" \ "${BUILD_DIR}/QualcommWifi_info.o" \ "${SDK_PATH}/usr/lib/libkmod.a" \ -o "${KEXT_MACOS}/QualcommWifi" # 5. Copie de Info.plist et signature ad-hoc echo "[5/5] Copie de Info.plist et signature..." cp "${SCRIPT_DIR}/QualcommWifi/Info.plist" "${KEXT_BUNDLE}/Contents/Info.plist" codesign -s - -f "${KEXT_BUNDLE}" echo "=== Validation des bibliothèques et symboles avec kmutil ===" kmutil libraries -p "${KEXT_BUNDLE}" > /dev/null echo "✓ Validation kmutil réussie à 100% contre BootKernelExtensions.kc !" echo "Kext produit : ${KEXT_BUNDLE}"