MCPcopy Create free account
hub / github.com/celer-pkg/celer / appendLibDir

Method appendLibDir

buildsystems/buildconfig_envs.go:444–506  ·  view source on GitHub ↗
(libDir string)

Source from the content-addressed store, hash-verified

442}
443
444func (b *BuildConfig) appendLibDir(libDir string) {
445 // Windows: MSVC/Clang-cl ----------- Linux: GCC/Clang
446 // LIB=xxx\lib;%LIB% ---------------- -L "xxx/lib"
447 // LINK=mylib.lib %LINK% ------------ -l "mylib"
448
449 // Toolchain may throw error if lib dir not exists.
450 if !fileio.PathExists(libDir) {
451 return
452 }
453
454 toolchain := b.Ctx.Platform().GetToolchain()
455 switch toolchain.GetName() {
456 case "gcc", "clang", "qcc":
457 ldflags := os.Getenv("LDFLAGS")
458 parts := strings.Fields(ldflags)
459
460 // -L flag: used to specify the directory that libraries looking for directly.
461 linkFlag := "-L" + libDir
462
463 // -Wl,-rpath-link, used to specify the directory that libraries looking for indirectly.
464 rpathlinkFlag := "-Wl,-rpath-link," + libDir
465
466 // Check if this is a dependency lib dir (tmpDeps/lib) - if so, prepend it.
467 tmpDepsPrefix := filepath.Join(dirs.TmpDepsDir, b.PortConfig.LibraryDir)
468 isDepsLibDir := strings.Contains(libDir, tmpDepsPrefix)
469
470 // Prepend dependency lib dir flags to prioritize them.
471 var newAppended = false
472 if !slices.Contains(parts, linkFlag) {
473 if isDepsLibDir {
474 parts = append([]string{linkFlag}, parts...)
475 } else {
476 parts = append(parts, linkFlag)
477 }
478 newAppended = true
479 }
480 if !slices.Contains(parts, rpathlinkFlag) {
481 if isDepsLibDir {
482 parts = append([]string{rpathlinkFlag}, parts...)
483 } else {
484 parts = append(parts, rpathlinkFlag)
485 }
486 newAppended = true
487 }
488
489 // Update environment variable with modified flags.
490 if newAppended {
491 b.envBackup.setenv("LDFLAGS", strings.Join(parts, " "))
492 }
493
494 case "msvc", "clang-cl":
495 libs := os.Getenv("LIB")
496 parts := strings.Fields(libs)
497
498 if !slices.Contains(parts, libDir) {
499 parts = append(parts, libDir)
500 b.envBackup.setenv("LIB", strings.Join(parts, ";"))
501 }

Callers 1

setEnvFlagsMethod · 0.95

Calls 5

PathExistsFunction · 0.92
setenvMethod · 0.80
GetToolchainMethod · 0.65
PlatformMethod · 0.65
GetNameMethod · 0.65

Tested by

no test coverage detected