github.com/metux/go-metabuild@v0.0.0-20240118143255-d9ed5ab697f9/engine/builder/c/base.go (about) 1 package c 2 3 import ( 4 "github.com/metux/go-metabuild/engine/builder/base" 5 "github.com/metux/go-metabuild/spec" 6 "github.com/metux/go-metabuild/spec/target" 7 "github.com/metux/go-metabuild/util" 8 "github.com/metux/go-metabuild/util/compiler" 9 "github.com/metux/go-metabuild/util/jobs" 10 ) 11 12 type BaseCBuilder struct { 13 base.BaseBuilder 14 } 15 16 func (b BaseCBuilder) JobDepends() []jobs.JobId { 17 return append( 18 append( 19 append(b.BaseBuilder.JobDepends(), 20 b.EntryStrList(target.KeyLinkStatic)...), 21 b.EntryStrList(target.KeyLinkShared)...), 22 b.EntryStrList(target.KeyLinkBoth)...) 23 } 24 25 func (b BaseCBuilder) ImportInternalLib(id string, wantShared bool, wantStatic bool) compiler.PkgConfigInfo { 26 pi := b.BuildConf.PkgConfig(b.ForBuild(), id) 27 pi.WantShared = wantShared 28 pi.WantStatic = wantStatic 29 return pi 30 } 31 32 func (b BaseCBuilder) ImportSrcdir() compiler.PkgConfigInfo { 33 cflags := append(b.FeaturedStrList(target.KeyCCflags), util.StrPrefix("-I", b.EntryStrList(target.KeyIncludeDir))...) 34 ldflags := append(b.FeaturedStrList(target.KeyCLdflags), util.StrPrefix("-L", b.EntryStrList(target.KeyLibDirs))...) 35 36 return compiler.PkgConfigInfo{ 37 Private: true, 38 SharedCflags: cflags, 39 SharedLdflags: ldflags, 40 StaticCflags: cflags, 41 StaticLdflags: ldflags, 42 } 43 } 44 45 func (b BaseCBuilder) AllImports() []compiler.PkgConfigInfo { 46 imports := []compiler.PkgConfigInfo{} 47 48 for _, x := range b.EntryStrList(target.KeyLinkStatic) { 49 imports = append(imports, b.ImportInternalLib(x, false, true)) 50 } 51 for _, x := range b.EntryStrList(target.KeyLinkShared) { 52 imports = append(imports, b.ImportInternalLib(x, true, false)) 53 } 54 for _, x := range b.EntryStrList(target.KeyLinkBoth) { 55 imports = append(imports, b.ImportInternalLib(x, false, false)) 56 } 57 58 imports = append(imports, b.ImportSrcdir()) 59 60 pkgs := b.PkgImports() 61 // sanity check for pkg-config imports 62 for _, p := range pkgs { 63 if !p.Valid() { 64 util.Panicf("config error: missing pkg-config check for: %s", p.Id) 65 } 66 } 67 68 imports = append(imports, pkgs...) 69 return imports 70 } 71 72 func MakeBaseCBuilder(o spec.TargetObject, id string) BaseCBuilder { 73 return BaseCBuilder{base.MakeBaseBuilder(o, id)} 74 }