blob: a2fc2e7bed80a2cefeea90d5fc145ec2f88a53cb [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build darwin,ios
package swift
import (
"unsafe"
"v.io/x/lib/vlog"
// TODO Make this pluggable somehow
_ "v.io/x/ref/runtime/factories/roaming"
sgoogle "v.io/x/swift/impl/google"
sutil "v.io/x/swift/util"
sv23 "v.io/x/swift/v23"
)
//#import "types.h"
import "C"
//export swift_io_v_v23_V_nativeInitGlobal
func swift_io_v_v23_V_nativeInitGlobal(errOut *C.SwiftVError) {
// Send all vlog logs to stderr during the init so that we don't crash on android trying
// to create a log file. These settings will be overwritten in nativeInitLogging below.
vlog.Log.Configure(vlog.OverridePriorConfiguration(true), vlog.LogToStderr(true))
if err := sv23.Init(); err != nil {
sutil.ThrowSwiftError(nil, err, unsafe.Pointer(errOut))
return
}
if err := sgoogle.Init(); err != nil {
sutil.ThrowSwiftError(nil, err, unsafe.Pointer(errOut))
return
}
}
//export swift_io_v_v23_V_nativeInitLogging
func swift_io_v_v23_V_nativeInitLogging(logDir *C.char, logToStderr bool, logLevel int, moduleSpec *C.char, errOut *C.SwiftVError) {
dir, toStderr, level, vmodule, err := loggingOpts(C.GoString(logDir), logToStderr, logLevel, C.GoString(moduleSpec))
if err != nil {
sutil.ThrowSwiftError(nil, err, unsafe.Pointer(errOut))
return
}
vlog.Log.Configure(vlog.OverridePriorConfiguration(true), dir, toStderr, level, vmodule)
}
func loggingOpts(logDir string, logToStderr bool, logLevel int, moduleSpec string) (dir vlog.LogDir, toStderr vlog.LogToStderr, level vlog.Level, vmodule vlog.ModuleSpec, err error) {
dir = vlog.LogDir(logDir)
toStderr = vlog.LogToStderr(logToStderr)
level = vlog.Level(logLevel)
err = vmodule.Set(moduleSpec)
return
}