Skip to content

Commit f3549a4

Browse files
Objective-C Availability support (#527)
1 parent 991f6df commit f3549a4

File tree

9 files changed

+159
-337
lines changed

9 files changed

+159
-337
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ KernelAbstractions = "0.9.1"
4141
LLVM = "7.2, 8, 9"
4242
LLVMDowngrader_jll = "0.6"
4343
LinearAlgebra = "1"
44-
ObjectiveC = "3.3"
44+
ObjectiveC = "3.4"
4545
PrecompileTools = "1"
4646
Preferences = "1"
4747
Printf = "1"

lib/mps/libmps.jl

Lines changed: 21 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -384,9 +384,7 @@ end
384384
@objcproperties MPSNDArrayDescriptor begin
385385
@autoproperty dataType::MPSDataType setter = setDataType
386386
@autoproperty numberOfDimensions::UInt64 setter = setNumberOfDimensions
387-
@static if Metal.is_macos(v"15.0.0")
388-
@autoproperty preferPackedRows::Bool setter = setPreferPackedRows
389-
end
387+
@autoproperty preferPackedRows::Bool setter = setPreferPackedRows availability = macos(v"15.0.0")
390388
end
391389

392390
@objcwrapper immutable = true MPSNDArrayAllocator <: NSObject
@@ -2541,56 +2539,43 @@ end
25412539

25422540
@objcwrapper immutable = true MPSNDArrayGatherGradient <: MPSNDArrayBinaryPrimaryGradientKernel
25432541

2544-
@static if Metal.is_macos(v"15.0.0")
2545-
@objcwrapper immutable = true MPSNDArrayIdentity <: MPSNDArrayUnaryKernel
2546-
end
2542+
@objcwrapper immutable = true availability = macos(v"15.0.0") MPSNDArrayIdentity <: MPSNDArrayUnaryKernel
25472543

25482544
@cenum MPSNDArrayQuantizationScheme::UInt64 begin
25492545
MPSNDArrayQuantizationTypeNone = 0x0000000000000000
25502546
MPSNDArrayQuantizationTypeAffine = 0x0000000000000001
25512547
MPSNDArrayQuantizationTypeLUT = 0x0000000000000002
25522548
end
25532549

2554-
@static if Metal.is_macos(v"15.0.0")
2555-
@objcwrapper immutable = true MPSNDArrayQuantizationDescriptor <: NSObject
2556-
@objcproperties MPSNDArrayQuantizationDescriptor begin
2557-
@autoproperty quantizationDataType::MPSDataType
2558-
@autoproperty quantizationScheme::MPSNDArrayQuantizationScheme
2559-
end
2560-
end
2550+
@objcwrapper immutable = true availability = macos(v"15.0.0") MPSNDArrayQuantizationDescriptor <: NSObject
25612551

2562-
@static if Metal.is_macos(v"15.0.0")
2563-
@objcwrapper immutable = true MPSNDArrayAffineQuantizationDescriptor <: MPSNDArrayQuantizationDescriptor
2564-
@objcproperties MPSNDArrayAffineQuantizationDescriptor begin
2565-
@autoproperty hasZeroPoint::Bool setter = setHasZeroPoint
2566-
@autoproperty hasMinValue::Bool setter = setHasMinValue
2567-
@autoproperty implicitZeroPoint::Bool setter = setImplicitZeroPoint
2568-
end
2552+
@objcproperties MPSNDArrayQuantizationDescriptor begin
2553+
@autoproperty quantizationDataType::MPSDataType
2554+
@autoproperty quantizationScheme::MPSNDArrayQuantizationScheme
25692555
end
25702556

2571-
@static if Metal.is_macos(v"15.0.0")
2572-
@objcwrapper immutable = true MPSNDArrayLUTQuantizationDescriptor <: MPSNDArrayQuantizationDescriptor
2573-
end
2557+
@objcwrapper immutable = true availability = macos(v"15.0.0") MPSNDArrayAffineQuantizationDescriptor <: MPSNDArrayQuantizationDescriptor
25742558

2575-
@static if Metal.is_macos(v"15.0.0")
2576-
@objcwrapper immutable = true MPSNDArrayQuantizedMatrixMultiplication <: MPSNDArrayMatrixMultiplication
2559+
@objcproperties MPSNDArrayAffineQuantizationDescriptor begin
2560+
@autoproperty hasZeroPoint::Bool setter = setHasZeroPoint
2561+
@autoproperty hasMinValue::Bool setter = setHasMinValue
2562+
@autoproperty implicitZeroPoint::Bool setter = setImplicitZeroPoint
25772563
end
25782564

2579-
@static if Metal.is_macos(v"15.0.0")
2580-
@objcwrapper immutable = true MPSNDArrayLUTDequantize <: MPSNDArrayMultiaryKernel
2581-
end
2565+
@objcwrapper immutable = true availability = macos(v"15.0.0") MPSNDArrayLUTQuantizationDescriptor <: MPSNDArrayQuantizationDescriptor
25822566

2583-
@static if Metal.is_macos(v"15.0.0")
2584-
@objcwrapper immutable = true MPSNDArrayVectorLUTDequantize <: MPSNDArrayMultiaryKernel
2585-
@objcproperties MPSNDArrayVectorLUTDequantize begin
2586-
@autoproperty vectorAxis::UInt64 setter = setVectorAxis
2587-
end
2588-
end
2567+
@objcwrapper immutable = true availability = macos(v"15.0.0") MPSNDArrayQuantizedMatrixMultiplication <: MPSNDArrayMatrixMultiplication
2568+
2569+
@objcwrapper immutable = true availability = macos(v"15.0.0") MPSNDArrayLUTDequantize <: MPSNDArrayMultiaryKernel
25892570

2590-
@static if Metal.is_macos(v"15.0.0")
2591-
@objcwrapper immutable = true MPSNDArrayAffineInt4Dequantize <: MPSNDArrayMultiaryKernel
2571+
@objcwrapper immutable = true availability = macos(v"15.0.0") MPSNDArrayVectorLUTDequantize <: MPSNDArrayMultiaryKernel
2572+
2573+
@objcproperties MPSNDArrayVectorLUTDequantize begin
2574+
@autoproperty vectorAxis::UInt64 setter = setVectorAxis
25922575
end
25932576

2577+
@objcwrapper immutable = true availability = macos(v"15.0.0") MPSNDArrayAffineInt4Dequantize <: MPSNDArrayMultiaryKernel
2578+
25942579
struct _MPSPackedFloat3
25952580
data::NTuple{12, UInt8}
25962581
end

lib/mtl/libmtl.jl

Lines changed: 125 additions & 215 deletions
Large diffs are not rendered by default.

res/wrap/libmps.toml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,6 @@ use_ccall_macro = true
3535
always_NUL_terminated_string = true
3636
opaque_as_mutable_struct = true
3737

38-
version_function = "Metal.is_macos"
39-
4038
[codegen.macro]
4139
# it's highly recommended to set this entry to "basic".
4240
# if you'd like to skip all of the macros, please set this entry to "disable".

res/wrap/libmtl.toml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
[general]
22
library_name = "Symbol(\"/System/Library/Frameworks/Metal.framework/Resources/BridgeSupport/Metal.dylib\")"
33
output_file_path = "../../lib/mtl/libmtl.jl"
4-
prologue_file_path = "libmtl_prologue.jl"
54

65
minimum_macos_supported = "13"
76

@@ -23,8 +22,6 @@ use_ccall_macro = true
2322
always_NUL_terminated_string = true
2423
opaque_as_mutable_struct = true
2524

26-
version_function = "Metal.is_macos"
27-
2825
[codegen.macro]
2926
# it's highly recommended to set this entry to "basic".
3027
# if you'd like to skip all of the macros, please set this entry to "disable".

res/wrap/libmtl_prologue.jl

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/Metal.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import LLVMDowngrader_jll
99
using Preferences: @load_preference, load_preference
1010
using ExprTools: splitdef, combinedef
1111
using ObjectiveC, .CoreFoundation, .Foundation, .Dispatch, .OS
12+
import ObjectiveC: is_macos, darwin_version, macos_version
1213
import KernelAbstractions
1314

1415
include("version.jl")

src/version.jl

Lines changed: 0 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,78 +1,3 @@
1-
# version and support queries
2-
3-
@noinline function _syscall_version(name)
4-
size = Ref{Csize_t}()
5-
err = @ccall sysctlbyname(name::Cstring, C_NULL::Ptr{Cvoid}, size::Ptr{Csize_t},
6-
C_NULL::Ptr{Cvoid}, 0::Csize_t)::Cint
7-
Base.systemerror("sysctlbyname", err != 0)
8-
9-
osrelease = Vector{UInt8}(undef, size[])
10-
err = @ccall sysctlbyname(name::Cstring, osrelease::Ptr{Cvoid}, size::Ptr{Csize_t},
11-
C_NULL::Ptr{Cvoid}, 0::Csize_t)::Cint
12-
Base.systemerror("sysctlbyname", err != 0)
13-
14-
verstr = view(String(osrelease), 1:size[]-1)
15-
parse(VersionNumber, verstr)
16-
end
17-
18-
@static if isdefined(Base, :OncePerProcess) # VERSION >= v"1.12.0-DEV.1421"
19-
const darwin_version = OncePerProcess{VersionNumber}() do
20-
_syscall_version("kern.osrelease")
21-
end
22-
const macos_version = OncePerProcess{VersionNumber}() do
23-
_syscall_version("kern.osproductversion")
24-
end
25-
else
26-
const _darwin_version = Ref{VersionNumber}()
27-
function darwin_version()
28-
if !isassigned(_darwin_version)
29-
_darwin_version[] = _syscall_version("kern.osrelease")
30-
end
31-
_darwin_version[]
32-
end
33-
34-
const _macos_version = Ref{VersionNumber}()
35-
function macos_version()
36-
if !isassigned(_macos_version)
37-
_macos_version[] = _syscall_version("kern.osproductversion")
38-
end
39-
_macos_version[]
40-
end
41-
end
42-
43-
@doc """
44-
Metal.darwin_version() -> VersionNumber
45-
46-
Returns the host Darwin kernel version.
47-
48-
See also [`Metal.macos_version`](@ref).
49-
""" darwin_version
50-
51-
@doc """
52-
Metal.macos_version() -> VersionNumber
53-
54-
Returns the host macOS version.
55-
56-
See also [`Metal.darwin_version`](@ref).
57-
""" macos_version
58-
59-
"""
60-
Metal.is_macos([ver::VersionNumber]) -> Bool
61-
62-
Returns whether the OS is macOS with version `ver` or newer.
63-
64-
See also [`Metal.macos_version`](@ref).
65-
"""
66-
function is_macos(ver=nothing)
67-
if !Sys.isapple()
68-
false
69-
elseif ver === nothing
70-
true
71-
else
72-
macos_version() >= ver
73-
end
74-
end
75-
761

772
## support queries
783

test/version.jl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
@testset "Version" begin
2+
3+
@test Metal.darwin_version() isa VersionNumber
4+
@test Metal.macos_version() isa VersionNumber
5+
@test Metal.is_macos(Metal.macos_version())
6+
7+
@test Metal.metallib_support() isa VersionNumber
8+
@test Metal.air_support() isa VersionNumber
9+
@test Metal.metal_support() isa VersionNumber
10+
11+
end # testset "Version"

0 commit comments

Comments
 (0)