macos.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import os
  2. import sys
  3. import macos_osxcross
  4. def options(opts):
  5. opts.Add("macos_deployment_target", "macOS deployment target", "default")
  6. opts.Add("macos_sdk_path", "macOS SDK path", "")
  7. macos_osxcross.options(opts)
  8. def exists(env):
  9. return sys.platform == "darwin" or macos_osxcross.exists(env)
  10. def generate(env):
  11. if env["arch"] not in ("universal", "arm64", "x86_64"):
  12. print("Only universal, arm64, and x86_64 are supported on macOS. Exiting.")
  13. Exit()
  14. if sys.platform == "darwin":
  15. # Use clang on macOS by default
  16. env["CXX"] = "clang++"
  17. env["CC"] = "clang"
  18. else:
  19. # Use osxcross
  20. macos_osxcross.generate(env)
  21. if env["arch"] == "universal":
  22. env.Append(LINKFLAGS=["-arch", "x86_64", "-arch", "arm64"])
  23. env.Append(CCFLAGS=["-arch", "x86_64", "-arch", "arm64"])
  24. else:
  25. env.Append(LINKFLAGS=["-arch", env["arch"]])
  26. env.Append(CCFLAGS=["-arch", env["arch"]])
  27. if env["macos_deployment_target"] != "default":
  28. env.Append(CCFLAGS=["-mmacosx-version-min=" + env["macos_deployment_target"]])
  29. env.Append(LINKFLAGS=["-mmacosx-version-min=" + env["macos_deployment_target"]])
  30. if env["macos_sdk_path"]:
  31. env.Append(CCFLAGS=["-isysroot", env["macos_sdk_path"]])
  32. env.Append(LINKFLAGS=["-isysroot", env["macos_sdk_path"]])
  33. env.Append(
  34. LINKFLAGS=[
  35. "-framework",
  36. "Cocoa",
  37. "-Wl,-undefined,dynamic_lookup",
  38. ]
  39. )