Mono: Buildsystem improvements
- Bundle with mscorlib.dll to avoid compatibilities issues - Add build option 'mono_assemblies_output_dir' to specify the output directory where the assemblies will be copied to. '#bin' by default.
This commit is contained in:
parent
d486cae701
commit
a45697d8df
|
@ -202,10 +202,16 @@ def mono_build_solution(source, target, env):
|
||||||
|
|
||||||
copyfile(os.path.join(src_dir, asm_file), os.path.join(dst_dir, asm_file))
|
copyfile(os.path.join(src_dir, asm_file), os.path.join(dst_dir, asm_file))
|
||||||
|
|
||||||
|
output_dir = Dir('#bin').abspath
|
||||||
|
assemblies_output_dir = Dir(env['mono_assemblies_output_dir']).abspath
|
||||||
|
|
||||||
mono_sln_builder = Builder(action = mono_build_solution)
|
mono_sln_builder = Builder(action=mono_build_solution)
|
||||||
env_mono.Append(BUILDERS={'MonoBuildSolution': mono_sln_builder})
|
env_mono.Append(BUILDERS={'MonoBuildSolution': mono_sln_builder})
|
||||||
env_mono.MonoBuildSolution(
|
env_mono.MonoBuildSolution(
|
||||||
os.path.join(Dir('#bin').abspath, 'GodotSharpTools.dll'),
|
os.path.join(assemblies_output_dir, 'GodotSharpTools.dll'),
|
||||||
'editor/GodotSharpTools/GodotSharpTools.sln'
|
'editor/GodotSharpTools/GodotSharpTools.sln'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if os.path.normpath(output_dir) != os.path.normpath(assemblies_output_dir):
|
||||||
|
rel_assemblies_output_dir = os.path.relpath(assemblies_output_dir, output_dir)
|
||||||
|
env_mono.Append(CPPDEFINES={'GD_MONO_EDITOR_ASSEMBLIES_DIR': rel_assemblies_output_dir})
|
||||||
|
|
|
@ -3,7 +3,7 @@ import imp
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from SCons.Script import BoolVariable, Environment, Variables
|
from SCons.Script import BoolVariable, Dir, Environment, PathVariable, Variables
|
||||||
|
|
||||||
|
|
||||||
monoreg = imp.load_source('mono_reg_utils', 'modules/mono/mono_reg_utils.py')
|
monoreg = imp.load_source('mono_reg_utils', 'modules/mono/mono_reg_utils.py')
|
||||||
|
@ -29,20 +29,16 @@ def is_enabled():
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def copy_file_no_replace(src_dir, dst_dir, name):
|
def copy_file(src_dir, dst_dir, name):
|
||||||
from shutil import copyfile
|
from shutil import copyfile
|
||||||
|
|
||||||
src_path = os.path.join(src_dir, name)
|
src_path = os.path.join(src_dir, name)
|
||||||
dst_path = os.path.join(dst_dir, name)
|
dst_path = os.path.join(dst_dir, name)
|
||||||
need_copy = True
|
|
||||||
|
|
||||||
if not os.path.isdir(dst_dir):
|
if not os.path.isdir(dst_dir):
|
||||||
os.mkdir(dst_dir)
|
os.mkdir(dst_dir)
|
||||||
elif os.path.exists(dst_path):
|
|
||||||
need_copy = False
|
|
||||||
|
|
||||||
if need_copy:
|
copyfile(src_path, dst_path)
|
||||||
copyfile(src_path, dst_path)
|
|
||||||
|
|
||||||
|
|
||||||
def configure(env):
|
def configure(env):
|
||||||
|
@ -51,11 +47,13 @@ def configure(env):
|
||||||
|
|
||||||
envvars = Variables()
|
envvars = Variables()
|
||||||
envvars.Add(BoolVariable('mono_static', 'Statically link mono', False))
|
envvars.Add(BoolVariable('mono_static', 'Statically link mono', False))
|
||||||
|
envvars.Add(PathVariable('mono_assemblies_output_dir', 'Path to the assemblies output directory', '#bin', PathVariable.PathIsDirCreate))
|
||||||
envvars.Update(env)
|
envvars.Update(env)
|
||||||
|
|
||||||
bits = env['bits']
|
bits = env['bits']
|
||||||
|
|
||||||
mono_static = env['mono_static']
|
mono_static = env['mono_static']
|
||||||
|
assemblies_output_dir = Dir(env['mono_assemblies_output_dir']).abspath
|
||||||
|
|
||||||
mono_lib_names = ['mono-2.0-sgen', 'monosgen-2.0']
|
mono_lib_names = ['mono-2.0-sgen', 'monosgen-2.0']
|
||||||
|
|
||||||
|
@ -99,11 +97,14 @@ def configure(env):
|
||||||
if not mono_dll_name:
|
if not mono_dll_name:
|
||||||
raise RuntimeError('Could not find mono shared library in: ' + mono_bin_path)
|
raise RuntimeError('Could not find mono shared library in: ' + mono_bin_path)
|
||||||
|
|
||||||
copy_file_no_replace(mono_bin_path, 'bin', mono_dll_name + '.dll')
|
copy_file(mono_bin_path, 'bin', mono_dll_name + '.dll')
|
||||||
|
|
||||||
|
copy_file(os.path.join(mono_lib_path, 'mono', '4.5'), assemblies_output_dir, 'mscorlib.dll')
|
||||||
else:
|
else:
|
||||||
sharedlib_ext = '.dylib' if sys.platform == 'darwin' else '.so'
|
sharedlib_ext = '.dylib' if sys.platform == 'darwin' else '.so'
|
||||||
|
|
||||||
mono_root = ''
|
mono_root = ''
|
||||||
|
mono_lib_path = ''
|
||||||
|
|
||||||
if bits == '32':
|
if bits == '32':
|
||||||
if os.getenv('MONO32_PREFIX'):
|
if os.getenv('MONO32_PREFIX'):
|
||||||
|
@ -148,7 +149,7 @@ def configure(env):
|
||||||
if not mono_so_name:
|
if not mono_so_name:
|
||||||
raise RuntimeError('Could not find mono shared library in: ' + mono_lib_path)
|
raise RuntimeError('Could not find mono shared library in: ' + mono_lib_path)
|
||||||
|
|
||||||
copy_file_no_replace(mono_lib_path, 'bin', 'lib' + mono_so_name + sharedlib_ext)
|
copy_file(mono_lib_path, 'bin', 'lib' + mono_so_name + sharedlib_ext)
|
||||||
else:
|
else:
|
||||||
if mono_static:
|
if mono_static:
|
||||||
raise RuntimeError('mono-static: Not supported with pkg-config. Specify a mono prefix manually')
|
raise RuntimeError('mono-static: Not supported with pkg-config. Specify a mono prefix manually')
|
||||||
|
@ -171,7 +172,9 @@ def configure(env):
|
||||||
if not mono_so_name:
|
if not mono_so_name:
|
||||||
raise RuntimeError('Could not find mono shared library in: ' + str(tmpenv['LIBPATH']))
|
raise RuntimeError('Could not find mono shared library in: ' + str(tmpenv['LIBPATH']))
|
||||||
|
|
||||||
copy_file_no_replace(mono_lib_path, 'bin', 'lib' + mono_so_name + sharedlib_ext)
|
copy_file(mono_lib_path, 'bin', 'lib' + mono_so_name + sharedlib_ext)
|
||||||
|
|
||||||
|
copy_file(os.path.join(mono_lib_path, 'mono', '4.5'), assemblies_output_dir, 'mscorlib.dll')
|
||||||
|
|
||||||
env.Append(LINKFLAGS='-rdynamic')
|
env.Append(LINKFLAGS='-rdynamic')
|
||||||
|
|
||||||
|
|
|
@ -102,6 +102,9 @@ MonoAssembly *GDMonoAssembly::_preload_hook(MonoAssemblyName *aname, char **asse
|
||||||
search_dirs.push_back(GodotSharpDirs::get_res_assemblies_dir());
|
search_dirs.push_back(GodotSharpDirs::get_res_assemblies_dir());
|
||||||
search_dirs.push_back(OS::get_singleton()->get_resource_dir());
|
search_dirs.push_back(OS::get_singleton()->get_resource_dir());
|
||||||
search_dirs.push_back(OS::get_singleton()->get_executable_path().get_base_dir());
|
search_dirs.push_back(OS::get_singleton()->get_executable_path().get_base_dir());
|
||||||
|
#ifdef GD_MONO_EDITOR_ASSEMBLIES_DIR
|
||||||
|
search_dirs.push_back(OS::get_singleton()->get_executable_path().get_base_dir().plus_file(_MKSTR(GD_MONO_EDITOR_ASSEMBLIES_DIR)).simplify_path());
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *rootdir = mono_assembly_getrootdir();
|
const char *rootdir = mono_assembly_getrootdir();
|
||||||
if (rootdir) {
|
if (rootdir) {
|
||||||
|
|
Loading…
Reference in New Issue