8380c3be02
Fixes various static library linker failures ("bad extended name entry at header"), because the wrong "ranlib" was used.
106 lines
3.2 KiB
Python
Executable File
106 lines
3.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import os, os.path
|
|
import sys, subprocess
|
|
|
|
configure_args = sys.argv[1:]
|
|
|
|
host_arch = 'i686-w64-mingw32'
|
|
|
|
if len(configure_args) > 0 and configure_args[0] == '--64':
|
|
configure_args = configure_args[1:]
|
|
host_arch = 'x86_64-w64-mingw32'
|
|
|
|
# the path to the MPD sources
|
|
mpd_path = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]) or '.', '..'))
|
|
sys.path[0] = os.path.join(mpd_path, 'python')
|
|
|
|
# output directories
|
|
from build.dirs import lib_path, tarball_path, src_path
|
|
|
|
arch_path = os.path.join(lib_path, host_arch)
|
|
build_path = os.path.join(arch_path, 'build')
|
|
root_path = os.path.join(arch_path, 'root')
|
|
|
|
class CrossGccToolchain:
|
|
def __init__(self, toolchain_path, arch,
|
|
tarball_path, src_path, build_path, install_prefix):
|
|
self.arch = arch
|
|
self.tarball_path = tarball_path
|
|
self.src_path = src_path
|
|
self.build_path = build_path
|
|
self.install_prefix = install_prefix
|
|
|
|
toolchain_bin = os.path.join(toolchain_path, 'bin')
|
|
self.cc = os.path.join(toolchain_bin, arch + '-gcc')
|
|
self.cxx = os.path.join(toolchain_bin, arch + '-g++')
|
|
self.ar = os.path.join(toolchain_bin, arch + '-ar')
|
|
self.ranlib = os.path.join(toolchain_bin, arch + '-ranlib')
|
|
self.nm = os.path.join(toolchain_bin, arch + '-nm')
|
|
self.strip = os.path.join(toolchain_bin, arch + '-strip')
|
|
|
|
common_flags = ''
|
|
self.cflags = '-O2 -g ' + common_flags
|
|
self.cxxflags = '-O2 -g ' + common_flags
|
|
self.cppflags = '-isystem ' + os.path.join(install_prefix, 'include')
|
|
self.ldflags = '-L' + os.path.join(install_prefix, 'lib')
|
|
self.libs = ''
|
|
|
|
self.is_arm = arch.startswith('arm')
|
|
self.is_armv7 = self.is_arm and 'armv7' in self.cflags
|
|
self.is_windows = 'mingw32' in arch
|
|
|
|
self.env = dict(os.environ)
|
|
|
|
# redirect pkg-config to use our root directory instead of the
|
|
# default one on the build host
|
|
self.env['PKG_CONFIG_LIBDIR'] = os.path.join(install_prefix, 'lib/pkgconfig')
|
|
|
|
# a list of third-party libraries to be used by MPD on Android
|
|
from build.libs import *
|
|
thirdparty_libs = [
|
|
libogg,
|
|
libvorbis,
|
|
opus,
|
|
flac,
|
|
zlib,
|
|
libid3tag,
|
|
ffmpeg,
|
|
curl,
|
|
boost,
|
|
]
|
|
|
|
# build the third-party libraries
|
|
toolchain = CrossGccToolchain('/usr', host_arch,
|
|
tarball_path, src_path, build_path, root_path)
|
|
|
|
for x in thirdparty_libs:
|
|
if not x.is_installed(toolchain):
|
|
x.build(toolchain)
|
|
|
|
# configure and build MPD
|
|
|
|
configure = [
|
|
os.path.join(mpd_path, 'configure'),
|
|
'CC=' + toolchain.cc,
|
|
'CXX=' + toolchain.cxx,
|
|
'CFLAGS=' + toolchain.cflags,
|
|
'CXXFLAGS=' + toolchain.cxxflags,
|
|
'CPPFLAGS=' + toolchain.cppflags,
|
|
'LDFLAGS=' + toolchain.ldflags + ' -static',
|
|
'LIBS=' + toolchain.libs,
|
|
'AR=' + toolchain.ar,
|
|
'RANLIB=' + toolchain.ranlib,
|
|
'STRIP=' + toolchain.strip,
|
|
'--host=' + toolchain.arch,
|
|
'--prefix=' + toolchain.install_prefix,
|
|
|
|
'--enable-silent-rules',
|
|
|
|
'--disable-icu',
|
|
|
|
] + configure_args
|
|
|
|
subprocess.check_call(configure, env=toolchain.env)
|
|
subprocess.check_call(['/usr/bin/make', '--quiet', '-j12'], env=toolchain.env)
|