7979defaults ['gcc_static_linker' ] = ['gcc-ar' ]
8080defaults ['clang_static_linker' ] = ['llvm-ar' ]
8181defaults ['nasm' ] = ['nasm' , 'yasm' ]
82+ defaults ['rgbasm' ] = ['rgbasm' ]
83+ defaults ['rgblink' ] = ['rgblink' ]
8284
8385
8486def compiler_from_language (env : 'Environment' , lang : str , for_machine : MachineChoice ) -> T .Optional [Compiler ]:
@@ -98,6 +100,7 @@ def compiler_from_language(env: 'Environment', lang: str, for_machine: MachineCh
98100 'cython' : detect_cython_compiler ,
99101 'nasm' : detect_nasm_compiler ,
100102 'masm' : detect_masm_compiler ,
103+ 'rgbds' : detect_rgbds_compiler ,
101104 }
102105 return lang_map [lang ](env , for_machine ) if lang in lang_map else None
103106
@@ -1353,6 +1356,40 @@ def detect_masm_compiler(env: 'Environment', for_machine: MachineChoice) -> Comp
13531356 _handle_exceptions (popen_exceptions , [comp ])
13541357 raise EnvironmentException ('Unreachable code (exception to make mypy happy)' )
13551358
1359+ def detect_rgbds_compiler (env : Environment , for_machine : MachineChoice ) -> Compiler :
1360+ from .asm import RgbdsCompiler
1361+ exelist = env .lookup_binary_entry (for_machine , 'rgbasm' )
1362+ is_cross = env .is_cross_build (for_machine ) # true, until Meson is ported to GB
1363+ info = env .machines [for_machine ]
1364+ if exelist is None :
1365+ exelist = defaults ['rgbasm' ]
1366+
1367+ try :
1368+ output = Popen_safe ([exelist [0 ], '--version' ])[1 ]
1369+ except OSError :
1370+ raise EnvironmentalException ('Could not execute RGBDS assembler "{}"' .format ('' .join (exelist )))
1371+
1372+ version = search_version (output )
1373+ linker = _detect_rgblink (env , for_machine )
1374+ comp = RgbdsCompiler (exelist , version , for_machine , info , linker , env .exe_wrapper , is_cross )
1375+ env .coredata .add_lang_args (comp .language , RgbdsCompiler , for_machine , env )
1376+
1377+ return comp
1378+
1379+ def _detect_rgblink (env : Environment , for_machine : MachineChoice ) -> DynamicLinker :
1380+ from ..linkers .linkers import RgbdsLinker
1381+ exelist = env .lookup_binary_entry (for_machine , 'rgblink' )
1382+ if exelist is None :
1383+ exelist = defaults ['rgblink' ]
1384+
1385+ try :
1386+ output = Popen_safe ([exelist [0 ], '--version' ])[1 ]
1387+ except OSError :
1388+ raise EnvironmentalException ('Could not execute RGBDS linker"{}"' .format ('' .join (exelist )))
1389+
1390+ version = search_version (output )
1391+ return RgbdsLinker (exelist , for_machine , '' , [], version = version )
1392+
13561393# GNU/Clang defines and version
13571394# =============================
13581395
0 commit comments