summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libhb/module.defs29
-rw-r--r--libhb/module.rules17
-rw-r--r--make/configure.py92
-rw-r--r--make/include/main.rules2
4 files changed, 117 insertions, 23 deletions
diff --git a/libhb/module.defs b/libhb/module.defs
index 9853a1027..77a13a02f 100644
--- a/libhb/module.defs
+++ b/libhb/module.defs
@@ -29,8 +29,6 @@ LIBHB.out += $(LIBHB.c.o)
LIBHB.out += $(LIBHB.h.out)
LIBHB.out += $(LIBHB.a)
-BUILD.out += $(LIBHB.out)
-
###############################################################################
LIBHB.GCC.D += __LIBHB__ USE_PTHREAD
@@ -50,3 +48,30 @@ endif
ifneq (,$(filter $(BUILD.arch),ppc ppc64))
LIBHB.GCC.D += WORDS_BIGENDIAN
endif
+
+###############################################################################
+
+## when defined this gives us the subdir name, or flavor of asm implementation
+ifneq (disabled,$(FEATURE.asm))
+
+LIBHB.yasm.src/ = $(LIBHB.src/)$(FEATURE.asm)/
+LIBHB.yasm.build/ = $(LIBHB.build/)$(FEATURE.asm)/
+LIBHB.yasm.asm = $(LIBHB.yasm.src/)deinterlace-a.asm
+LIBHB.yasm.o = $(LIBHB.yasm.asm:$(LIBHB.yasm.src/)%.asm=$(LIBHB.yasm.build/)%.o)
+LIBHB.yasm.d = $(wildcard $(LIBHB.yasmsrc/)*.h)
+
+LIBHB.YASM.I = $(LIBHB.yasm.src/)
+LIBHB.YASM.ASM_O = $(strip $(YASM.exe) \
+ -f $(LIBHB.YASM.f) \
+ -m $(LIBHB.YASM.m) \
+ $(LIBHB.YASM.D:%=-D%) \
+ $(LIBHB.YASM.I:%=-I%) \
+ -o $(1) $(2))
+
+LIBHB.out += $(LIBHB.yasm.o)
+
+endif
+
+###############################################################################
+
+BUILD.out += $(LIBHB.out)
diff --git a/libhb/module.rules b/libhb/module.rules
index 7ac6e3f5a..6408700e4 100644
--- a/libhb/module.rules
+++ b/libhb/module.rules
@@ -3,7 +3,7 @@ $(eval $(call import.MODULE.rules,LIBHB))
libhb.build: $(LIBHB.a)
$(LIBHB.a): | $(dir $(LIBHB.a))
-$(LIBHB.a): $(LIBHB.c.o)
+$(LIBHB.a): $(LIBHB.c.o) $(LIBHB.yasm.o)
$(AR.exe) rsu $@ $^
$(LIBHB.c.o): $(LIBHB.d)
@@ -25,5 +25,20 @@ libhb.clean:
###############################################################################
+ifneq (disabled,$(FEATURE.asm))
+
+$(LIBHB.yasm.o): $(LIBHB.yasm.d)
+$(LIBHB.yasm.o): | $(dir $(LIBHB.yasm.o))
+$(LIBHB.yasm.o): $(LIBHB.yasm.build/)%.o: $(LIBHB.yasm.src/)%.asm
+ $(call LIBHB.YASM.ASM_O,$@,$<)
+
+endif
+
+###############################################################################
+
clean: libhb.clean
build: libhb.build
+
+xmike:
+ @echo $(LIBHB.yasm.asm)
+ @echo $(LIBHB.yasm.o)
diff --git a/make/configure.py b/make/configure.py
index 7a91fdc23..17451254e 100644
--- a/make/configure.py
+++ b/make/configure.py
@@ -352,8 +352,11 @@ class HostTupleProbe( ShellProbe, list ):
self.systemf = self[2][0].upper() + self[2][1:]
## glob-match against spec
- def match( self, spec ):
- return fnmatch.fnmatch( self.spec, spec )
+ def match( self, *specs ):
+ for spec in specs:
+ if fnmatch.fnmatch( self.spec, spec ):
+ return True
+ return False
###############################################################################
@@ -385,27 +388,35 @@ class BuildAction( Action, list ):
self.fail = False
+ ## glob-match against spec
+ def match( self, *specs ):
+ for spec in specs:
+ if fnmatch.fnmatch( self.spec, spec ):
+ return True
+ return False
+
###############################################################################
##
-## platform conditional string; if specs do not match host:
+## value wrapper; value is accepted only if one of host specs matcheds
+## otherwise it is None (or a keyword-supplied val)
##
-## - str value is blank
-## - evaluates to False
+## result is attribute 'value'
##
class IfHost( object ):
- def __init__( self, value, *specs ):
- self.value = ''
+ def __init__( self, value, *specs, **kwargs ):
+ self.value = kwargs.get('none',None)
for spec in specs:
if host.match( spec ):
self.value = value
break
def __nonzero__( self ):
- return len(self.value) != 0
+ return self.value != None
def __str__( self ):
return self.value
+
###############################################################################
##
## platform conditional value; loops through list of tuples comparing
@@ -770,16 +781,19 @@ class ConfigDocument:
def __init__( self ):
self._elements = []
- def _outputMake( self, file, namelen, name, value ):
- file.write( '%-*s = %s\n' % (namelen, name, value ))
+ def _outputMake( self, file, namelen, name, value, append ):
+ if append:
+ file.write( '%-*s += %s\n' % (namelen, name, value ))
+ else:
+ file.write( '%-*s = %s\n' % (namelen, name, value ))
def _outputM4( self, file, namelen, name, value ):
namelen += 7
name = '<<__%s>>,' % name.replace( '.', '_' )
file.write( 'define(%-*s <<%s>>)dnl\n' % (namelen, name, value ))
- def add( self, name, value ):
- self._elements.append( (name,value) )
+ def add( self, name, value, append=False ):
+ self._elements.append( [name,value,append] )
def addBlank( self ):
self._elements.append( None )
@@ -816,7 +830,16 @@ class ConfigDocument:
if type == 'm4':
self._outputM4( file, namelen, item[0], item[1] )
else:
- self._outputMake( file, namelen, item[0], item[1] )
+ self._outputMake( file, namelen, item[0], item[1], item[2] )
+
+ def update( self, name, value ):
+ for item in self._elements:
+ if item == None:
+ continue
+ if item[0] == name:
+ item[1] = value
+ return
+ raise ValueError( 'element not found: %s' % (name) )
def write( self, type ):
if type == 'make':
@@ -875,10 +898,16 @@ def createCLI():
## add feature options
grp = OptionGroup( cli, 'Feature Options' )
- h = ForHost( optparse.SUPPRESS_HELP, ['disable Xcode (Darwin only)','*-*-darwin*'] ).value
- grp.add_option( '', '--disable-xcode', default=False, action='store_true', help=h )
- h = ForHost( optparse.SUPPRESS_HELP, ['disable GTK GUI (Linux only)','*-*-linux*'] ).value
+
+ h = IfHost( 'enable assembly code in non-contrib modules', 'NOMATCH*-*-darwin*', 'NOMATCH*-*-linux*', none=optparse.SUPPRESS_HELP ).value
+ grp.add_option( '', '--enable-asm', default=False, action='store_true', help=h )
+
+ h = IfHost( 'disable GTK GUI', '*-*-linux*', none=optparse.SUPPRESS_HELP ).value
grp.add_option( '', '--disable-gtk', default=False, action='store_true', help=h )
+
+ h = IfHost( 'disable Xcode', '*-*-darwin*', none=optparse.SUPPRESS_HELP ).value
+ grp.add_option( '', '--disable-xcode', default=False, action='store_true', help=h )
+
cli.add_option_group( grp )
## add launch options
@@ -890,7 +919,7 @@ def createCLI():
grp.add_option( '', '--launch-args', default=None, action='store', metavar='ARGS',
help='specify additional ARGS for launch command' )
grp.add_option( '', '--launch-quiet', default=False, action='store_true',
- help='do not echo build output' )
+ help='do not echo build output while waiting' )
cli.add_option_group( grp )
## add compile options
@@ -1038,7 +1067,7 @@ try:
ar = ToolProbe( 'AR.exe', 'ar' )
cp = ToolProbe( 'CP.exe', 'cp' )
curl = ToolProbe( 'CURL.exe', 'curl', abort=False )
- gcc = ToolProbe( 'GCC.gcc', 'gcc', IfHost('gcc-4','*-*-cygwin*') )
+ gcc = ToolProbe( 'GCC.gcc', 'gcc', IfHost( 'gcc-4', '*-*-cygwin*' ))
if host.match( '*-*-darwin*' ):
gmake = ToolProbe( 'GMAKE.exe', 'make', 'gmake' )
@@ -1051,6 +1080,7 @@ try:
rm = ToolProbe( 'RM.exe', 'rm' )
tar = ToolProbe( 'TAR.exe', 'gtar', 'tar' )
wget = ToolProbe( 'WGET.exe', 'wget', abort=False )
+ yasm = ToolProbe( 'YASM.exe', 'yasm', abort=False )
xcodebuild = ToolProbe( 'XCODEBUILD.exe', 'xcodebuild', abort=False )
lipo = ToolProbe( 'LIPO.exe', 'lipo', abort=False )
@@ -1174,8 +1204,9 @@ try:
doc.add( 'PREFIX/', cfg.prefix_final + os.sep )
doc.addBlank()
- doc.add( 'FEATURE.xcode', int( not (Tools.xcodebuild.fail or options.disable_xcode) ))
+ doc.add( 'FEATURE.asm', 'disabled' )
doc.add( 'FEATURE.gtk', int( not options.disable_gtk ))
+ doc.add( 'FEATURE.xcode', int( not (Tools.xcodebuild.fail or options.disable_xcode) ))
if not Tools.xcodebuild.fail and not options.disable_xcode:
doc.addBlank()
@@ -1203,6 +1234,29 @@ try:
doc.add( 'GCC.g', debugMode.mode )
doc.add( 'GCC.O', optimizeMode.mode )
+ if options.enable_asm and not Tools.yasm.fail:
+ asm = ''
+ if build.match( 'i?86-*' ):
+ asm = 'x86'
+ doc.add( 'LIBHB.GCC.D', 'HAVE_MMX', append=True )
+ doc.add( 'LIBHB.YASM.D', 'ARCH_X86', append=True )
+ if build.match( '*-*-darwin*' ):
+ doc.add( 'LIBHB.YASM.f', 'macho32' )
+ else:
+ doc.add( 'LIBHB.YASM.f', 'elf32' )
+ doc.add( 'LIBHB.YASM.m', 'x86' )
+ elif build.match( 'x86_64-*' ):
+ asm = 'x86'
+ doc.add( 'LIBHB.GCC.D', 'HAVE_MMX ARCH_X86_64', append=True )
+ if build.match( '*-*-darwin*' ):
+ doc.add( 'LIBHB.YASM.D', 'ARCH_X86_64 PIC', append=True )
+ doc.add( 'LIBHB.YASM.f', 'macho64' )
+ else:
+ doc.add( 'LIBHB.YASM.D', 'ARCH_X86_64', append=True )
+ doc.add( 'LIBHB.YASM.f', 'elf64' )
+ doc.add( 'LIBHB.YASM.m', 'amd64' )
+ doc.update( 'FEATURE.asm', asm )
+
## add exports to make
if len(exports):
doc.addBlank()
diff --git a/make/include/main.rules b/make/include/main.rules
index 51460a35d..818e09c2f 100644
--- a/make/include/main.rules
+++ b/make/include/main.rules
@@ -45,7 +45,7 @@ $(BUILD/)GNUmakefile: $(wildcard $(SRC/).svn/entries)
## target useful to force reconfigure; only helpful for build-system development
.PHONY: reconfigure
reconfigure:
- $(SRC/)configure $(CONF.args)
+ $(SRC/)configure --force $(CONF.args)
###############################################################################