summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrav90 <travawine@palemoon.org>2018-10-19 05:27:28 -0500
committertrav90 <travawine@palemoon.org>2018-10-19 05:27:28 -0500
commit5c0c6c73aa3d51ae1c22ec38c0c6c68d8c840507 (patch)
tree2dfc770a4d5bc8b65384fb169b06418835cf8f1b
parent39e842a8312fb2d1b203ae9e421b97c6bbde336a (diff)
downloaduxp-5c0c6c73aa3d51ae1c22ec38c0c6c68d8c840507.tar.gz
Add generate_sources_mozbuild.py
This uses the cmakeparser to generate sources.mozbuild and the config files for each platform.
-rw-r--r--media/libaom/generate_sources_mozbuild.py172
1 files changed, 172 insertions, 0 deletions
diff --git a/media/libaom/generate_sources_mozbuild.py b/media/libaom/generate_sources_mozbuild.py
new file mode 100644
index 0000000000..d3b3891839
--- /dev/null
+++ b/media/libaom/generate_sources_mozbuild.py
@@ -0,0 +1,172 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import cmakeparser as cp
+
+import copy
+import datetime
+import os
+import re
+import subprocess
+
+AOM_DIR = '../../third_party/aom'
+
+def write_aom_config(system, arch, variables, cache_variables):
+ # read template cmake file
+ variables['year'] = datetime.datetime.now().year
+ cp.parse(variables, [], os.path.join(AOM_DIR, 'build', 'cmake',
+ 'generate_aom_config_templates.cmake'))
+
+ # filter variables
+ cache_variables = [x for x in sorted(cache_variables)
+ if x and not x.startswith((' ', 'CMAKE', 'AOM'))]
+
+ # inherit this from the mozilla build config
+ cache_variables.remove('HAVE_PTHREAD_H')
+
+ outdir = os.path.join('config', system, arch, 'config')
+ try:
+ os.makedirs(outdir)
+ except OSError:
+ pass
+
+ with open(os.path.join(outdir, 'aom_config.h'), 'w') as f:
+ header = variables['h_file_header_block']
+ f.write(header)
+ f.write('\n')
+ for var in cache_variables:
+ f.write('#define %s %s\n' % (var, variables[var]))
+ f.write('#endif /* AOM_CONFIG_H_ */\n')
+
+ with open(os.path.join(outdir, 'aom_config.asm'), 'w') as f:
+ header = variables['asm_file_header_block']
+ f.write(header)
+ f.write('\n')
+ for var in cache_variables:
+ if var in ['INCLUDE_INSTALL_DIR', 'INLINE',
+ 'LIB_INSTALL_DIR', 'RESTRICT']:
+ continue
+ if arch == 'arm':
+ f.write('.equ %s, %s\n' % (var, variables[var]))
+ else:
+ f.write('%s equ %s\n' % (var, variables[var]))
+
+ if arch == 'arm':
+ f.write('.section .note.GNU-stack,"",%progbits')
+
+
+if __name__ == '__main__':
+ import sys
+
+ shared_variables = {
+ 'CMAKE_CURRENT_SOURCE_DIR': AOM_DIR,
+ 'CONFIG_AV1_DECODER': 1,
+ 'CONFIG_AV1_ENCODER': 0,
+ 'CONFIG_BGSPRITE': 0,
+ 'CONFIG_CDEF_SINGLEPASS': 0,
+ 'CONFIG_CFL': 0,
+ 'CONFIG_HASH_ME': 0,
+ 'CONFIG_HIGH_BITDEPTH': 0,
+ 'CONFIG_INSPECTION': 0,
+ 'CONFIG_INTERNAL_STATS': 0,
+ 'CONFIG_LIBYUV': 0,
+ 'CONFIG_LOWBITDEPTH': 0,
+ 'CONFIG_LV_MAP': 0,
+ 'CONFIG_MOTION_VAR': 0,
+ 'CONFIG_MULTITHREAD': 1,
+ 'CONFIG_NCOBMC_ADAPT_WEIGHT': 0,
+ 'CONFIG_PIC': 0,
+ 'CONFIG_PVQ': 0,
+ 'CONFIG_UNIT_TESTS': 0,
+ 'CONFIG_WEBM_IO': 0,
+ 'CONFIG_XIPHRC': 0,
+ 'CMAKE_CURRENT_BINARY_DIR': 'OBJDIR',
+ 'CMAKE_INSTALL_PREFIX': 'INSTALLDIR',
+ 'CMAKE_SYSTEM_NAME': 'Linux',
+ 'CMAKE_SYSTEM_PROCESSOR': 'x86_64',
+ 'ENABLE_EXAMPLES': 0,
+ 'ENABLE_TESTS': 0,
+ 'ENABLE_TOOLS': 0,
+ 'AOM_TEST_TEST_CMAKE_': 1, #prevent building tests
+ }
+
+ f = open('sources.mozbuild', 'wb')
+ f.write('# This file is generated. Do not edit.\n\n')
+ f.write('files = {\n')
+
+ platforms = [
+ ('armv7', 'linux', 'arm', True),
+ ('generic', '', 'generic', True),
+ ('x86', 'linux', 'ia32', True),
+ ('x86', 'win', 'mingw32', False),
+ ('x86', 'win', 'ia32', False),
+ ('x86_64', 'linux', 'x64', True),
+ ('x86_64', 'mac', 'x64', False),
+ ('x86_64', 'win', 'x64', False),
+ ('x86_64', 'win', 'mingw64', False),
+ ]
+ for cpu, system, arch, generate_sources in platforms:
+ print('Running CMake for %s (%s)' % (cpu, system))
+ variables = shared_variables.copy()
+ variables['AOM_TARGET_CPU'] = cpu
+
+ # We skip compiling test programs that detect these
+ variables['HAVE_FEXCEPT'] = 1
+ variables['INLINE'] = 'inline'
+ if cpu == 'x86' and system == 'linux':
+ variables['CONFIG_PIC'] = 1
+ if system == 'win' and not arch.startswith('mingw'):
+ variables['MSVC'] = 1
+
+ cache_variables = []
+ sources = cp.parse(variables, cache_variables,
+ os.path.join(AOM_DIR, 'CMakeLists.txt'))
+
+ # Disable HAVE_UNISTD_H.
+ cache_variables.remove('HAVE_UNISTD_H')
+
+ write_aom_config(system, arch, variables, cache_variables)
+
+ # Currently, the sources are the same for each supported cpu
+ # regardless of operating system / compiler. If that changes, we'll
+ # have to generate sources for each combination.
+ if generate_sources:
+ # Remove spurious sources and perl files
+ sources = filter(lambda x: x.startswith(AOM_DIR), sources)
+ sources = filter(lambda x: not x.endswith('.pl'), sources)
+
+ # Filter out exports
+ exports = filter(lambda x: re.match(os.path.join(AOM_DIR, '(aom|aom_mem|aom_ports|aom_scale)/.*h$'), x), sources)
+ exports = filter(lambda x: not re.search('(internal|src)', x), exports)
+ exports = filter(lambda x: not re.search('(emmintrin_compat.h|mem_.*|msvc.h|aom_once.h)$', x), exports)
+
+ for export in exports:
+ sources.remove(export)
+
+ # Remove header files
+ sources = sorted(filter(lambda x: not x.endswith('.h'), sources))
+
+ # The build system is unhappy if two files have the same prefix
+ # In libaom, sometimes .asm and .c files share the same prefix
+ for i in xrange(len(sources) - 1):
+ if sources[i].endswith('.asm'):
+ if os.path.splitext(sources[i])[0] == os.path.splitext(sources[i + 1])[0]:
+ old = sources[i]
+ sources[i] = sources[i].replace('.asm', '_asm.asm')
+ if not os.path.exists(sources[i]):
+ os.rename(old, sources[i])
+
+ f.write(' \'%s_EXPORTS\': [\n' % arch.upper())
+ for export in sorted(exports):
+ f.write(' \'%s\',\n' % export)
+ f.write(" ],\n")
+
+ f.write(' \'%s_SOURCES\': [\n' % arch.upper())
+ for source in sorted(sources):
+ f.write(' \'%s\',\n' % source)
+ f.write(' ],\n')
+
+ print('\n')
+
+ f.write('}\n')
+ f.close()