mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
112 lines
3.4 KiB
Python
112 lines
3.4 KiB
Python
#!/usr/bin/env python
|
|
# encoding: utf-8
|
|
# go.py - Waf tool for the Go programming language
|
|
# By: Tom Wambold <tom5760@gmail.com>
|
|
|
|
import platform, os
|
|
|
|
import Task
|
|
import Utils
|
|
from TaskGen import feature, extension, after
|
|
|
|
Task.simple_task_type('gocompile', '${GOC} ${GOCFLAGS} -o ${TGT} ${SRC}', shell=False)
|
|
Task.simple_task_type('gopack', '${GOP} grc ${TGT} ${SRC}', shell=False)
|
|
Task.simple_task_type('golink', '${GOL} ${GOLFLAGS} -o ${TGT} ${SRC}', shell=False)
|
|
|
|
def detect(conf):
|
|
|
|
def set_def(var, val):
|
|
if not conf.env[var]:
|
|
conf.env[var] = val
|
|
|
|
goarch = os.getenv("GOARCH")
|
|
|
|
if goarch == '386':
|
|
set_def('GO_PLATFORM', 'i386')
|
|
elif goarch == 'amd64':
|
|
set_def('GO_PLATFORM', 'x86_64')
|
|
elif goarch == 'arm':
|
|
set_def('GO_PLATFORM', 'arm')
|
|
else:
|
|
set_def('GO_PLATFORM', platform.machine())
|
|
|
|
if conf.env.GO_PLATFORM == 'x86_64':
|
|
set_def('GO_COMPILER', '6g')
|
|
set_def('GO_LINKER', '6l')
|
|
set_def('GO_EXTENSION', '.6')
|
|
elif conf.env.GO_PLATFORM in ['i386', 'i486', 'i586', 'i686']:
|
|
set_def('GO_COMPILER', '8g')
|
|
set_def('GO_LINKER', '8l')
|
|
set_def('GO_EXTENSION', '.8')
|
|
elif conf.env.GO_PLATFORM == 'arm':
|
|
set_def('GO_COMPILER', '5g')
|
|
set_def('GO_LINKER', '5l')
|
|
set_def('GO_EXTENSION', '.5')
|
|
|
|
if not (conf.env.GO_COMPILER or conf.env.GO_LINKER or conf.env.GO_EXTENSION):
|
|
raise conf.fatal('Unsupported platform ' + platform.machine())
|
|
|
|
set_def('GO_PACK', 'gopack')
|
|
set_def('GO_PACK_EXTENSION', '.a')
|
|
|
|
conf.find_program(conf.env.GO_COMPILER, var='GOC', mandatory=True)
|
|
conf.find_program(conf.env.GO_LINKER, var='GOL', mandatory=True)
|
|
conf.find_program(conf.env.GO_PACK, var='GOP', mandatory=True)
|
|
conf.find_program('cgo', var='CGO', mandatory=True)
|
|
|
|
@extension('.go')
|
|
def compile_go(self, node):
|
|
try:
|
|
self.go_nodes.append(node)
|
|
except AttributeError:
|
|
self.go_nodes = [node]
|
|
|
|
@feature('go')
|
|
@after('apply_core')
|
|
def apply_compile_go(self):
|
|
try:
|
|
nodes = self.go_nodes
|
|
except AttributeError:
|
|
self.go_compile_task = None
|
|
else:
|
|
self.go_compile_task = self.create_task('gocompile',
|
|
nodes,
|
|
[self.path.find_or_declare(self.target + self.env.GO_EXTENSION)])
|
|
|
|
@feature('gopackage', 'goprogram')
|
|
@after('apply_compile_go')
|
|
def apply_goinc(self):
|
|
if not getattr(self, 'go_compile_task', None):
|
|
return
|
|
|
|
names = self.to_list(getattr(self, 'uselib_local', []))
|
|
for name in names:
|
|
obj = self.name_to_obj(name)
|
|
if not obj:
|
|
raise Utils.WafError('object %r was not found in uselib_local '
|
|
'(required by %r)' % (lib_name, self.name))
|
|
obj.post()
|
|
self.go_compile_task.set_run_after(obj.go_package_task)
|
|
self.go_compile_task.dep_nodes.extend(obj.go_package_task.outputs)
|
|
self.env.append_unique('GOCFLAGS', '-I' + obj.path.abspath(obj.env))
|
|
self.env.append_unique('GOLFLAGS', '-L' + obj.path.abspath(obj.env))
|
|
|
|
@feature('gopackage')
|
|
@after('apply_goinc')
|
|
def apply_gopackage(self):
|
|
self.go_package_task = self.create_task('gopack',
|
|
self.go_compile_task.outputs[0],
|
|
self.path.find_or_declare(self.target + self.env.GO_PACK_EXTENSION))
|
|
self.go_package_task.set_run_after(self.go_compile_task)
|
|
self.go_package_task.dep_nodes.extend(self.go_compile_task.outputs)
|
|
|
|
@feature('goprogram')
|
|
@after('apply_goinc')
|
|
def apply_golink(self):
|
|
self.go_link_task = self.create_task('golink',
|
|
self.go_compile_task.outputs[0],
|
|
self.path.find_or_declare(self.target))
|
|
self.go_link_task.set_run_after(self.go_compile_task)
|
|
self.go_link_task.dep_nodes.extend(self.go_compile_task.outputs)
|
|
|