def __init__(self, suite, name, deps, workingSets, **kwargs): subDir = 'src' srcDirs = ['patches'] d = mx.join(suite.dir, subDir, name) super(LibffiBuilderProject, self).__init__(suite, name, subDir, srcDirs, deps, workingSets, d, **kwargs) self.out_dir = self.get_output_root() if mx.get_os() == 'windows': self.delegate = mx_native.DefaultNativeProject(suite, name, subDir, [], [], None, mx.join(self.out_dir, 'libffi-3.2.1'), theLicense=None, kind='static_lib', cflags=['-MD', '-O2']) self.delegate._source = dict(tree=['include', 'src', mx.join('src', 'x86')], files={'.h': [mx.join('include', 'ffi.h'), mx.join('include', 'ffitarget.h'), mx.join('src', 'fficonfig.h'), mx.join('src', 'ffi_common.h')], '.c': [mx.join('src', 'closures.c'), mx.join('src', 'java_raw_api.c'), mx.join('src', 'prep_cif.c'), mx.join('src', 'raw_api.c'), mx.join('src', 'types.c'), mx.join('src', 'x86', 'ffi.c')], '.S': [mx.join('src', 'x86', 'win64.S')]}) else: class LibtoolNativeProject(mx.NativeProject): def getArchivableResults(self, use_relpath=True, single=False): for file_path, archive_path in super(LibtoolNativeProject, self).getArchivableResults(use_relpath): path_in_lt_objdir = mx.basename(mx.dirname(file_path)) == '.libs' yield file_path, mx.basename(archive_path) if path_in_lt_objdir else archive_path if single: assert path_in_lt_objdir, 'the first build result must be from LT_OBJDIR' break self.delegate = LibtoolNativeProject(suite, name, subDir, [], [], None, ['.libs/libffi.a', 'include/ffi.h', 'include/ffitarget.h'], mx.join(self.out_dir, 'libffi-build'), mx.join(self.out_dir, 'libffi-3.2.1')) self.delegate.buildEnv = dict( SOURCES=mx.basename(self.delegate.dir), OUTPUT=mx.basename(self.delegate.getOutput()), CONFIGURE_ARGS=' '.join([ '--disable-dependency-tracking', '--disable-shared', '--with-pic', 'CFLAGS="{}"'.format(' '.join( ['-g', '-O3'] + (['-m64'] if mx.get_os() == 'solaris' else []) )), ]) ) # pylint: disable=access-member-before-definition assert len(self.buildDependencies) == 1, '{} must depend only on its sources'.format(self.name) self.buildDependencies += getattr(self.delegate, 'buildDependencies', [])
def __init__(self, suite, name, deps, workingSets, **kwargs): subDir = 'src' srcDirs = ['patches'] d = mx.join(suite.dir, subDir, name) super(LibffiBuilderProject, self).__init__(suite, name, subDir, srcDirs, deps, workingSets, d, **kwargs) self.out_dir = self.get_output_root() if mx.get_os() == 'windows': self.delegate = mx_native.DefaultNativeProject( suite, name, subDir, [], [], None, mx.join(self.out_dir, 'libffi-3.3'), 'static_lib', deliverable='ffi', cflags=['-MD', '-O2', '-DFFI_BUILDING_DLL']) self.delegate._source = dict( tree=['include', 'src', mx.join('src', 'x86')], files={ '.h': [ mx.join('include', 'ffi.h'), mx.join('include', 'ffitarget.h'), mx.join('src', 'fficonfig.h'), mx.join('src', 'ffi_common.h') ], '.c': [ mx.join('src', 'closures.c'), mx.join('src', 'prep_cif.c'), mx.join('src', 'raw_api.c'), mx.join('src', 'types.c'), mx.join('src', 'x86', 'ffiw64.c') ], '.S': [mx.join('src', 'x86', 'win64_intel.S')] }) else: class LibtoolNativeProject( mx.NativeProject, # pylint: disable=too-many-ancestors mx_native.NativeDependency): include_dirs = property( lambda self: [mx.join(self.getOutput(), 'include')]) libs = property( lambda self: [next(self.getArchivableResults(single=True))[0]]) def getArchivableResults(self, use_relpath=True, single=False): for file_path, archive_path in super( LibtoolNativeProject, self).getArchivableResults(use_relpath): path_in_lt_objdir = mx.basename( mx.dirname(file_path)) == '.libs' yield file_path, mx.basename( archive_path ) if path_in_lt_objdir else archive_path if single: assert path_in_lt_objdir, 'the first build result must be from LT_OBJDIR' break self.delegate = LibtoolNativeProject( suite, name, subDir, [], [], None, ['.libs/libffi.a', 'include/ffi.h', 'include/ffitarget.h'], mx.join(self.out_dir, 'libffi-build'), mx.join(self.out_dir, 'libffi-3.3')) self.delegate.buildEnv = dict( SOURCES=mx.basename(self.delegate.dir), OUTPUT=mx.basename(self.delegate.getOutput()), CONFIGURE_ARGS=' '.join([ '--disable-dependency-tracking', '--disable-shared', '--with-pic', 'CFLAGS="{}"'.format(' '.join(['-g', '-O3'] + ( ['-m64'] if mx.get_os() == 'solaris' else []))), 'CPPFLAGS="-DNO_JAVA_RAW_API"', ])) self.include_dirs = self.delegate.include_dirs self.libs = self.delegate.libs