0 | {--
 1 | Copyright (C) 2024  Joel Berkeley
 2 |
 3 | This program is free software: you can redistribute it and/or modify
 4 | it under the terms of the GNU Affero General Public License as published
 5 | by the Free Software Foundation, either version 3 of the License, or
 6 | (at your option) any later version.
 7 |
 8 | This program is distributed in the hope that it will be useful,
 9 | but WITHOUT ANY WARRANTY; without even the implied warranty of
10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 | GNU Affero General Public License for more details.
12 |
13 | You should have received a copy of the GNU Affero General Public License
14 | along with this program.  If not, see <https://www.gnu.org/licenses/>.
15 | --}
16 | ||| For internal spidr use only.
17 | module Compiler.Xla.PJRT.PjrtExecutable
18 |
19 | import Compiler.Xla.Client.ExecutableBuildOptions
20 |
21 | import Compiler.FFI
22 | import Compiler.String
23 |
24 | ffi : String -> String
25 | ffi = libxla "c/xla/pjrt/pjrt_executable.h"
26 |
27 | export
28 | data CompileOptions = MkCompileOptions GCAnyPtr
29 |
30 | %foreign (ffi "CompileOptions_delete")
31 | prim__deleteCompileOptions : AnyPtr -> PrimIO ()
32 |
33 | %foreign (ffi "CompileOptions_new")
34 | prim__mkCompileOptions : AnyPtr -> PrimIO AnyPtr
35 |
36 | export
37 | mkCompileOptions : HasIO io => ExecutableBuildOptions -> io CompileOptions
38 | mkCompileOptions (MkExecutableBuildOptions executableBuildOptions) = do
39 |   options <- primIO $ prim__mkCompileOptions executableBuildOptions
40 |   options <- onCollectAny' options (primIO . prim__deleteCompileOptions)
41 |   pure (MkCompileOptions options)
42 |
43 | %foreign (ffi "CompileOptions_SerializeAsString")
44 | prim__compileOptionsSerializeAsString : GCAnyPtr -> PrimIO AnyPtr
45 |
46 | ||| It is up to the caller to `delete` the `CppString`.
47 | export
48 | serializeAsString : HasIO io => CompileOptions -> io CppString
49 | serializeAsString (MkCompileOptions options) = MkCppString <$> (
50 |     primIO $ prim__compileOptionsSerializeAsString options
51 |   )
52 |