123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- /* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
- #define SHORTINT INT8
- #define INTEGER INT16
- #define LONGINT INT32
- #define SET UINT32
- #include "SYSTEM.h"
- #include "Configuration.h"
- #include "Heap.h"
- #include "Modules.h"
- #include "OPM.h"
- #include "Out.h"
- #include "Platform.h"
- #include "Strings.h"
- typedef
- CHAR extTools_CommandString[4096];
- static extTools_CommandString extTools_CFLAGS;
- export void extTools_Assemble (CHAR *moduleName, ADDRESS moduleName__len);
- static void extTools_InitialiseCompilerCommand (CHAR *s, ADDRESS s__len);
- export void extTools_LinkMain (CHAR *moduleName, ADDRESS moduleName__len, BOOLEAN statically, CHAR *additionalopts, ADDRESS additionalopts__len);
- static void extTools_execute (CHAR *title, ADDRESS title__len, CHAR *cmd, ADDRESS cmd__len);
- static void extTools_execute (CHAR *title, ADDRESS title__len, CHAR *cmd, ADDRESS cmd__len)
- {
- INT16 r, status, exitcode;
- extTools_CommandString fullcmd;
- __DUP(title, title__len, CHAR);
- __DUP(cmd, cmd__len, CHAR);
- if (__IN(18, OPM_Options, 32)) {
- Out_String((CHAR*)" ", 3);
- Out_String(cmd, cmd__len);
- Out_Ln();
- }
- __COPY(cmd, fullcmd, 4096);
- Heap_GC(0);
- r = Platform_System(fullcmd, 4096);
- status = __MASK(r, -128);
- exitcode = __ASHR(r, 8);
- if (exitcode > 127) {
- exitcode = exitcode - 256;
- }
- if (r != 0) {
- Out_String(title, title__len);
- Out_String(cmd, cmd__len);
- Out_Ln();
- Out_String((CHAR*)"-- failed: status ", 19);
- Out_Int(status, 1);
- Out_String((CHAR*)", exitcode ", 12);
- Out_Int(exitcode, 1);
- Out_String((CHAR*)".", 2);
- Out_Ln();
- if ((status == 0 && exitcode == 127)) {
- Out_String((CHAR*)"Is the C compiler in the current command path\?", 47);
- Out_Ln();
- }
- if (status != 0) {
- Modules_Halt(status);
- } else {
- Modules_Halt(exitcode);
- }
- }
- __DEL(title);
- __DEL(cmd);
- }
- static void extTools_InitialiseCompilerCommand (CHAR *s, ADDRESS s__len)
- {
- __COPY("gcc -fPIC -g", s, s__len);
- Strings_Append((CHAR*)" -I \"", 6, (void*)s, s__len);
- Strings_Append(OPM_ResourceDir, 1024, (void*)s, s__len);
- Strings_Append((CHAR*)"/include\" ", 11, (void*)s, s__len);
- Platform_GetEnv((CHAR*)"CFLAGS", 7, (void*)extTools_CFLAGS, 4096);
- Strings_Append(extTools_CFLAGS, 4096, (void*)s, s__len);
- Strings_Append((CHAR*)" ", 2, (void*)s, s__len);
- }
- void extTools_Assemble (CHAR *moduleName, ADDRESS moduleName__len)
- {
- extTools_CommandString cmd;
- __DUP(moduleName, moduleName__len, CHAR);
- extTools_InitialiseCompilerCommand((void*)cmd, 4096);
- Strings_Append((CHAR*)"-c ", 4, (void*)cmd, 4096);
- Strings_Append(moduleName, moduleName__len, (void*)cmd, 4096);
- Strings_Append((CHAR*)".c", 3, (void*)cmd, 4096);
- extTools_execute((CHAR*)"C compile: ", 12, cmd, 4096);
- __DEL(moduleName);
- }
- void extTools_LinkMain (CHAR *moduleName, ADDRESS moduleName__len, BOOLEAN statically, CHAR *additionalopts, ADDRESS additionalopts__len)
- {
- extTools_CommandString cmd;
- __DUP(additionalopts, additionalopts__len, CHAR);
- extTools_InitialiseCompilerCommand((void*)cmd, 4096);
- Strings_Append(moduleName, moduleName__len, (void*)cmd, 4096);
- Strings_Append((CHAR*)".c ", 4, (void*)cmd, 4096);
- Strings_Append(additionalopts, additionalopts__len, (void*)cmd, 4096);
- if (statically) {
- Strings_Append((CHAR*)" -static", 9, (void*)cmd, 4096);
- }
- Strings_Append((CHAR*)" -o ", 5, (void*)cmd, 4096);
- Strings_Append(moduleName, moduleName__len, (void*)cmd, 4096);
- if (!statically || 1) {
- Strings_Append((CHAR*)" -L\"", 5, (void*)cmd, 4096);
- Strings_Append(OPM_InstallDir, 1024, (void*)cmd, 4096);
- Strings_Append((CHAR*)"/lib\"", 6, (void*)cmd, 4096);
- Strings_Append((CHAR*)" -lvoc", 7, (void*)cmd, 4096);
- Strings_Append((CHAR*)"-O", 3, (void*)cmd, 4096);
- Strings_Append(OPM_Model, 10, (void*)cmd, 4096);
- Strings_Append((CHAR*)"", 1, (void*)cmd, 4096);
- }
- extTools_execute((CHAR*)"C compile and link: ", 21, cmd, 4096);
- __DEL(additionalopts);
- }
- export void *extTools__init(void)
- {
- __DEFMOD;
- __MODULE_IMPORT(Configuration);
- __MODULE_IMPORT(Heap);
- __MODULE_IMPORT(Modules);
- __MODULE_IMPORT(OPM);
- __MODULE_IMPORT(Out);
- __MODULE_IMPORT(Platform);
- __MODULE_IMPORT(Strings);
- __REGMOD("extTools", 0);
- /* BEGIN */
- __ENDMOD;
- }
|