t_wasm.pas 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. unit t_wasm;
  2. interface
  3. uses
  4. systems,
  5. globtype,
  6. import, export, aasmdata, aasmcpu,
  7. fmodule, ogbase,
  8. symsym, symdef,
  9. link,
  10. i_wasm, tgcpu;
  11. type
  12. { texportlibwasm }
  13. texportlibwasm=class(texportlib)
  14. procedure preparelib(const s : string);override;
  15. procedure exportprocedure(hp : texported_item);override;
  16. procedure exportvar(hp : texported_item);override;
  17. procedure generatelib;override;
  18. end;
  19. { timportlibwasm }
  20. timportlibwasm = class(timportlib)
  21. procedure generatelib;override;
  22. end;
  23. { tlinkerjvm }
  24. tlinkerwasm=class(texternallinker)
  25. constructor Create;override;
  26. //function MakeExecutable:boolean;override;
  27. function MakeSharedLibrary:boolean;override;
  28. end;
  29. implementation
  30. { timportlibwasm }
  31. procedure timportlibwasm.generatelib;
  32. var
  33. i,j : longint;
  34. SmartFilesCount: Integer;
  35. ImportLibrary : TImportLibrary;
  36. ImportSymbol : TImportSymbol;
  37. begin
  38. for i:=0 to current_module.ImportLibraryList.Count-1 do
  39. begin
  40. ImportLibrary:=TImportLibrary(current_module.ImportLibraryList[i]);
  41. for j:=0 to ImportLibrary.ImportSymbolList.Count-1 do
  42. begin
  43. ImportSymbol:=TImportSymbol(ImportLibrary.ImportSymbolList[j]);
  44. current_asmdata.asmlists[al_imports].Concat(tai_impexp.create(ImportLibrary.Name, ImportSymbol.MangledName, ImportSymbol.Name, ie_Func));
  45. end;
  46. end;
  47. end;
  48. { tlinkerwasm }
  49. constructor tlinkerwasm.Create;
  50. begin
  51. inherited Create;
  52. end;
  53. function tlinkerwasm.MakeSharedLibrary: boolean;
  54. begin
  55. Result := true;
  56. //Result:=inherited MakeSharedLibrary;
  57. end;
  58. { texportlibwasm }
  59. procedure texportlibwasm.preparelib(const s: string);
  60. begin
  61. //nothing to happen. wasm files are modules
  62. end;
  63. procedure texportlibwasm.exportprocedure(hp: texported_item);
  64. var
  65. nm : TSymStr;
  66. begin
  67. nm := tprocdef(tprocsym(hp.sym).ProcdefList[0]).mangledname;
  68. current_asmdata.asmlists[al_exports].Concat(tai_impexp.create(hp.name^, nm, ie_Func));
  69. end;
  70. procedure texportlibwasm.exportvar(hp: texported_item);
  71. begin
  72. //inherited exportvar(hp);
  73. end;
  74. procedure texportlibwasm.generatelib;
  75. begin
  76. //inherited generatelib;
  77. end;
  78. initialization
  79. RegisterTarget(system_wasm_info);
  80. RegisterImport(system_wasm_wasm32, timportlibwasm);
  81. RegisterExport(system_wasm_wasm32, texportlibwasm);
  82. RegisterLinker(ld_wasm, tlinkerwasm);
  83. end.