macos.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import os
  2. import sys
  3. import common_compiler_flags
  4. def has_osxcross():
  5. return "OSXCROSS_ROOT" in os.environ
  6. def options(opts):
  7. opts.Add("macos_deployment_target", "macOS deployment target", "default")
  8. opts.Add("macos_sdk_path", "macOS SDK path", "")
  9. if has_osxcross():
  10. opts.Add("osxcross_sdk", "OSXCross SDK version", "darwin16")
  11. def exists(env):
  12. return sys.platform == "darwin" or has_osxcross()
  13. def generate(env):
  14. if env["arch"] not in ("universal", "arm64", "x86_64"):
  15. print("Only universal, arm64, and x86_64 are supported on macOS. Exiting.")
  16. env.Exit(1)
  17. if sys.platform == "darwin":
  18. # Use clang on macOS by default
  19. env["CXX"] = "clang++"
  20. env["CC"] = "clang"
  21. else:
  22. # OSXCross
  23. root = os.environ.get("OSXCROSS_ROOT", "")
  24. if env["arch"] == "arm64":
  25. basecmd = root + "/target/bin/arm64-apple-" + env["osxcross_sdk"] + "-"
  26. else:
  27. basecmd = root + "/target/bin/x86_64-apple-" + env["osxcross_sdk"] + "-"
  28. env["CC"] = basecmd + "clang"
  29. env["CXX"] = basecmd + "clang++"
  30. env["AR"] = basecmd + "ar"
  31. env["RANLIB"] = basecmd + "ranlib"
  32. env["AS"] = basecmd + "as"
  33. binpath = os.path.join(root, "target", "bin")
  34. if binpath not in env["ENV"]["PATH"]:
  35. # Add OSXCROSS bin folder to PATH (required for linking).
  36. env.PrependENVPath("PATH", binpath)
  37. # Common flags
  38. if env["arch"] == "universal":
  39. env.Append(LINKFLAGS=["-arch", "x86_64", "-arch", "arm64"])
  40. env.Append(CCFLAGS=["-arch", "x86_64", "-arch", "arm64"])
  41. else:
  42. env.Append(LINKFLAGS=["-arch", env["arch"]])
  43. env.Append(CCFLAGS=["-arch", env["arch"]])
  44. if env["macos_deployment_target"] != "default":
  45. env.Append(CCFLAGS=["-mmacosx-version-min=" + env["macos_deployment_target"]])
  46. env.Append(LINKFLAGS=["-mmacosx-version-min=" + env["macos_deployment_target"]])
  47. if env["macos_sdk_path"]:
  48. env.Append(CCFLAGS=["-isysroot", env["macos_sdk_path"]])
  49. env.Append(LINKFLAGS=["-isysroot", env["macos_sdk_path"]])
  50. env.Append(
  51. LINKFLAGS=[
  52. "-framework",
  53. "Cocoa",
  54. "-Wl,-undefined,dynamic_lookup",
  55. ]
  56. )
  57. env.Append(CPPDEFINES=["MACOS_ENABLED", "UNIX_ENABLED"])
  58. common_compiler_flags.generate(env)