blob: 550a2e2d385f7b0bcc46c9f950d4544fb6e45e01 [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 ios
import (
"unsafe"
"v.io/x/lib/vlog"
// TODO Make this pluggable somehow
_ "v.io/x/ref/runtime/factories/roaming"
igoogle "v.io/x/ios/impl/google"
iutil "v.io/x/ios/util"
iv23 "v.io/x/ios/v23"
)
//#import "types.h"
import "C"
//export ios_io_v_v23_V_nativeInitGlobal
func ios_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 := iv23.Init(); err != nil {
iutil.ThrowSwiftError(nil, err, unsafe.Pointer(errOut))
return
}
if err := igoogle.Init(); err != nil {
iutil.ThrowSwiftError(nil, err, unsafe.Pointer(errOut))
return
}
}
//export ios_io_v_v23_V_nativeInitLogging
func ios_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 {
iutil.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
}