mirror of
https://github.com/Relintai/godot-mono-builds.git
synced 2024-11-12 10:25:10 +01:00
b4e08a3d35
Fixed missing make install data (etc dirs). Add option to build desktop runtime with llvm. Made some progress to support osxcross. Still not working.
163 lines
6.8 KiB
Python
163 lines
6.8 KiB
Python
|
|
import os
|
|
from os.path import join as path_join
|
|
|
|
from options import RuntimeOpts
|
|
from os_utils import *
|
|
|
|
|
|
def setup_runtime_template(env: dict, opts: RuntimeOpts, product: str, target: str, host_triple: str, llvm: str=''):
|
|
BITNESS = ''
|
|
if any(s in host_triple for s in ['i686', 'i386']):
|
|
BITNESS = '-m32'
|
|
elif 'x86_64' in host_triple:
|
|
BITNESS = '-m64'
|
|
|
|
CFLAGS = []
|
|
CFLAGS += ['-O2', '-g'] if opts.release else ['-O0', '-ggdb3', '-fno-omit-frame-pointer']
|
|
CFLAGS += env.get('_%s-%s_CFLAGS' % (product, target), [])
|
|
CFLAGS += env.get('%s-%s_CFLAGS' % (product, target), [])
|
|
CFLAGS += [BITNESS] if BITNESS else []
|
|
|
|
CXXFLAGS = []
|
|
CXXFLAGS += ['-O2', '-g'] if opts.release else ['-O0', '-ggdb3', '-fno-omit-frame-pointer']
|
|
CXXFLAGS += env.get('_%s-%s_CXXFLAGS' % (product, target), [])
|
|
CXXFLAGS += env.get('%s-%s_CXXFLAGS' % (product, target), [])
|
|
CXXFLAGS += [BITNESS] if BITNESS else []
|
|
|
|
CPPFLAGS = []
|
|
CPPFLAGS += ['-O2', '-g'] if opts.release else ['-O0', '-ggdb3', '-fno-omit-frame-pointer']
|
|
CPPFLAGS += env.get('_%s-%s_CPPFLAGS' % (product, target), [])
|
|
CPPFLAGS += env.get('%s-%s_CPPFLAGS' % (product, target), [])
|
|
CPPFLAGS += [BITNESS] if BITNESS else []
|
|
|
|
CXXCPPFLAGS = []
|
|
CXXCPPFLAGS += ['-O2', '-g'] if opts.release else ['-O0', '-ggdb3', '-fno-omit-frame-pointer']
|
|
CXXCPPFLAGS += env.get('_%s-%s_CXXCPPFLAGS' % (product, target), [])
|
|
CXXCPPFLAGS += env.get('%s-%s_CXXCPPFLAGS' % (product, target), [])
|
|
CXXCPPFLAGS += [BITNESS] if BITNESS else []
|
|
|
|
LDFLAGS = []
|
|
LDFLAGS += env.get('_%s-%s_LDFLAGS' % (product, target), [])
|
|
LDFLAGS += env.get('%s-%s_LDFLAGS' % (product, target), [])
|
|
|
|
AC_VARS = []
|
|
AC_VARS += env.get('_%s-%s_AC_VARS' % (product, target), [])
|
|
AC_VARS += env.get('%s-%s_AC_VARS' % (product, target), [])
|
|
|
|
CONFIGURE_ENVIRONMENT = {}
|
|
|
|
def set_product_env_var(var_name):
|
|
val = env.get('_%s-%s_%s' % (product, target, var_name), '')
|
|
if val:
|
|
CONFIGURE_ENVIRONMENT[var_name] = val
|
|
|
|
set_product_env_var('AR')
|
|
set_product_env_var('AS')
|
|
set_product_env_var('CC')
|
|
set_product_env_var('CPP')
|
|
set_product_env_var('CXX')
|
|
set_product_env_var('CXXCPP')
|
|
set_product_env_var('DLLTOOL')
|
|
set_product_env_var('LD')
|
|
set_product_env_var('OBJDUMP')
|
|
set_product_env_var('RANLIB')
|
|
set_product_env_var('CMAKE')
|
|
set_product_env_var('STRIP')
|
|
|
|
CONFIGURE_ENVIRONMENT['CFLAGS'] = CFLAGS
|
|
CONFIGURE_ENVIRONMENT['CXXFLAGS'] = CXXFLAGS
|
|
CONFIGURE_ENVIRONMENT['CPPFLAGS'] = CPPFLAGS
|
|
CONFIGURE_ENVIRONMENT['CXXCPPFLAGS'] = CXXCPPFLAGS
|
|
CONFIGURE_ENVIRONMENT['LDFLAGS'] = LDFLAGS
|
|
|
|
CONFIGURE_ENVIRONMENT.update(env.get('_%s-%s_CONFIGURE_ENVIRONMENT' % (product, target), {}))
|
|
CONFIGURE_ENVIRONMENT.update(env.get('%s-%s_CONFIGURE_ENVIRONMENT' % (product, target), {}))
|
|
|
|
CONFIGURE_FLAGS = []
|
|
CONFIGURE_FLAGS += ['--host=%s' % host_triple] if host_triple else []
|
|
CONFIGURE_FLAGS += ['--cache-file=%s/%s-%s-%s.config.cache' % (opts.configure_dir, product, target, opts.configuration)]
|
|
CONFIGURE_FLAGS += ['--prefix=%s/%s-%s-%s' % (opts.install_dir, product, target, opts.configuration)]
|
|
CONFIGURE_FLAGS += ['--enable-cxx'] if opts.enable_cxx else []
|
|
CONFIGURE_FLAGS += env.get('_cross-runtime_%s-%s_CONFIGURE_FLAGS' % (product, target), [])
|
|
CONFIGURE_FLAGS += env.get('_%s-%s_CONFIGURE_FLAGS' % (product, target), [])
|
|
CONFIGURE_FLAGS += env.get('%s-%s_CONFIGURE_FLAGS' % (product, target), [])
|
|
|
|
if llvm:
|
|
CONFIGURE_FLAGS += ['--with-llvm=%s/llvm-%s' % (opts.install_dir, llvm)]
|
|
|
|
env['_runtime_%s-%s_AC_VARS' % (product, target)] = AC_VARS
|
|
env['_runtime_%s-%s_CONFIGURE_ENVIRONMENT' % (product, target)] = CONFIGURE_ENVIRONMENT
|
|
env['_runtime_%s-%s_CONFIGURE_FLAGS' % (product, target)] = CONFIGURE_FLAGS
|
|
|
|
|
|
def setup_runtime_cross_template(env: dict, opts: RuntimeOpts, product: str, target: str, host_triple: str,
|
|
target_triple: str, device_target: str, llvm: str, offsets_dumper_abi: str):
|
|
CONFIGURE_FLAGS = [
|
|
'--target=%s' % target_triple,
|
|
'--with-cross-offsets=%s.h' % target_triple,
|
|
'--with-llvm=%s/llvm-%s' % (opts.install_dir, llvm)
|
|
]
|
|
|
|
env['_cross-runtime_%s-%s_CONFIGURE_FLAGS' % (product, target)] = CONFIGURE_FLAGS
|
|
|
|
# Setup offsets-tool-py
|
|
run_command('make', ['-C', '%s/tools/offsets-tool-py' % opts.mono_source_root, 'setup'], name='make offsets-tool-py')
|
|
|
|
# Run offsets-tool in its virtual env
|
|
|
|
virtualenv_vars = source('%s/tools/offsets-tool-py/offtool/bin/activate' % opts.mono_source_root)
|
|
|
|
offsets_tool_env = os.environ.copy()
|
|
offsets_tool_env.update(virtualenv_vars)
|
|
|
|
build_dir = '%s/%s-%s-%s' % (opts.configure_dir, product, target, opts.configuration)
|
|
mkdir_p(build_dir)
|
|
|
|
run_command('python3', [
|
|
'%s/tools/offsets-tool-py/offsets-tool.py' % opts.mono_source_root,
|
|
'--targetdir=%s/%s-%s-%s' % (opts.configure_dir, product, device_target, opts.configuration),
|
|
'--abi=%s' % offsets_dumper_abi,
|
|
'--monodir=%s' % opts.mono_source_root,
|
|
'--outfile=%s/%s.h' % (build_dir, target_triple)
|
|
] + env['_%s-%s_OFFSETS_DUMPER_ARGS' % (product, target)],
|
|
env=offsets_tool_env, name='offsets-tool')
|
|
|
|
# Runtime template
|
|
setup_runtime_template(env, opts, product, target, host_triple)
|
|
|
|
|
|
def run_autogen(opts: RuntimeOpts):
|
|
autogen_env = os.environ.copy()
|
|
autogen_env['NOCONFIGURE'] = '1'
|
|
|
|
if not find_executable('glibtoolize') and 'CUSTOM_GLIBTOOLIZE_PATH' in os.environ:
|
|
autogen_env['PATH'] = os.environ['CUSTOM_GLIBTOOLIZE_PATH'] + ':' + autogen_env['PATH']
|
|
|
|
run_command(os.path.join(opts.mono_source_root, 'autogen.sh'), cwd=opts.mono_source_root, env=autogen_env, name='autogen')
|
|
|
|
|
|
def run_configure(env: dict, opts: RuntimeOpts, product: str, target: str):
|
|
build_dir = path_join(opts.configure_dir, '%s-%s-%s' % (product, target, opts.configuration))
|
|
mkdir_p(build_dir)
|
|
|
|
def str_dict_val(val):
|
|
if isinstance(val, list):
|
|
return ' '.join(val) # Don't need to surround with quotes
|
|
return val
|
|
|
|
ac_vars = env['_runtime_%s-%s_AC_VARS' % (product, target)]
|
|
configure_env_args = env['_runtime_%s-%s_CONFIGURE_ENVIRONMENT' % (product, target)]
|
|
configure_env_args = [('%s=%s' % (key, str_dict_val(value))) for (key, value) in configure_env_args.items()]
|
|
configure_flags = env['_runtime_%s-%s_CONFIGURE_FLAGS' % (product, target)]
|
|
|
|
configure = path_join(opts.mono_source_root, 'configure')
|
|
configure_args = ac_vars + configure_env_args + configure_flags
|
|
|
|
configure_env = os.environ.copy()
|
|
target_extra_path = env.get('_%s-%s_PATH' % (product, target), '')
|
|
if target_extra_path:
|
|
configure_env['PATH'] += ':' + target_extra_path
|
|
|
|
run_command(configure, args=configure_args, cwd=build_dir, env=configure_env, name='configure')
|