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))
|
||||
|
||||
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.MonoBuildSolution(
|
||||
os.path.join(Dir('#bin').abspath, 'GodotSharpTools.dll'),
|
||||
os.path.join(assemblies_output_dir, 'GodotSharpTools.dll'),
|
||||
'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 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')
|
||||
|
@ -29,19 +29,15 @@ def is_enabled():
|
|||
return False
|
||||
|
||||
|
||||
def copy_file_no_replace(src_dir, dst_dir, name):
|
||||
def copy_file(src_dir, dst_dir, name):
|
||||
from shutil import copyfile
|
||||
|
||||
src_path = os.path.join(src_dir, name)
|
||||
dst_path = os.path.join(dst_dir, name)
|
||||
need_copy = True
|
||||
|
||||
if not os.path.isdir(dst_dir):
|
||||
os.mkdir(dst_dir)
|
||||
elif os.path.exists(dst_path):
|
||||
need_copy = False
|
||||
|
||||
if need_copy:
|
||||
copyfile(src_path, dst_path)
|
||||
|
||||
|
||||
|
@ -51,11 +47,13 @@ def configure(env):
|
|||
|
||||
envvars = Variables()
|
||||
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)
|
||||
|
||||
bits = env['bits']
|
||||
|
||||
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']
|
||||
|
||||
|
@ -99,11 +97,14 @@ def configure(env):
|
|||
if not mono_dll_name:
|
||||
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:
|
||||
sharedlib_ext = '.dylib' if sys.platform == 'darwin' else '.so'
|
||||
|
||||
mono_root = ''
|
||||
mono_lib_path = ''
|
||||
|
||||
if bits == '32':
|
||||
if os.getenv('MONO32_PREFIX'):
|
||||
|
@ -148,7 +149,7 @@ def configure(env):
|
|||
if not mono_so_name:
|
||||
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:
|
||||
if mono_static:
|
||||
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:
|
||||
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')
|
||||
|
||||
|
|
|
@ -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(OS::get_singleton()->get_resource_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();
|
||||
if (rootdir) {
|
||||
|
|
Loading…
Reference in New Issue