|
package library |
|
|
|
import ( |
|
"errors" |
|
"fmt" |
|
"os" |
|
"path/filepath" |
|
"runtime" |
|
|
|
"github.com/rs/zerolog/log" |
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
var skipLibraryPath = os.Getenv("LOCALAI_SKIP_LIBRARY_PATH") != "" |
|
|
|
|
|
func LoadExtractedLibs(dir string) error { |
|
|
|
if skipLibraryPath { |
|
return nil |
|
} |
|
|
|
var err error = nil |
|
for _, libDir := range []string{filepath.Join(dir, "backend-assets", "lib"), filepath.Join(dir, "lib")} { |
|
err = errors.Join(err, LoadExternal(libDir)) |
|
} |
|
return err |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func LoadLDSO(assetDir string, args []string, grpcProcess string) ([]string, string) { |
|
if skipLibraryPath { |
|
return args, grpcProcess |
|
} |
|
|
|
if runtime.GOOS != "linux" { |
|
return args, grpcProcess |
|
} |
|
|
|
|
|
ldPath := filepath.Join(assetDir, "backend-assets", "lib", "ld.so") |
|
if _, err := os.Stat(ldPath); err == nil { |
|
log.Debug().Msgf("ld.so found") |
|
|
|
args = append([]string{grpcProcess}, args...) |
|
grpcProcess = ldPath |
|
} |
|
|
|
return args, grpcProcess |
|
} |
|
|
|
|
|
func LoadExternal(dir string) error { |
|
|
|
if skipLibraryPath { |
|
return nil |
|
} |
|
|
|
lpathVar := "LD_LIBRARY_PATH" |
|
if runtime.GOOS == "darwin" { |
|
lpathVar = "DYLD_FALLBACK_LIBRARY_PATH" |
|
} |
|
|
|
var setErr error = nil |
|
if _, err := os.Stat(dir); err == nil { |
|
ldLibraryPath := os.Getenv(lpathVar) |
|
if ldLibraryPath == "" { |
|
ldLibraryPath = dir |
|
} else { |
|
ldLibraryPath = fmt.Sprintf("%s:%s", ldLibraryPath, dir) |
|
} |
|
setErr = errors.Join(setErr, os.Setenv(lpathVar, ldLibraryPath)) |
|
} |
|
return setErr |
|
} |
|
|