Shaos wrote:Ещё можно модель расположения проектов взять из
SprinterSDK, где на одном уровне с INC и LIB имелся каталог project и там уже подкаталоги с проектами (только я наверное назову его PRJ для единообразия), а то сейчас всё в одной куче лежит - и исходники утилит, и собранные утилиты, и исходники примеров, и скрипты сборки примеров под разные платформы, и (если собирать примеры) все промежуточные файлы (как в RW1P2 вплоть до версии 1.4). Ещё ради SprinterSDK я тогда делал возможность поиска файлов не только в текущем директории, но и в директории откуда вызываются исполняемые файлы - это тоже надо будет поддержать на уровне nedo[make]...
Поддержал каталог PRJ в котором лежат подкаталоги с проектами - теперь чтобы собрать скажем проект MAPGEN надо находясь в общем директории SDK выполнить в случае доса:
NEDO PRJ\MAPGEN\MAPGEN.N
а в случае линукса:
$(pwd)/nedo PRJ/MAPGEN/MAPGEN.N
Тут pwd нужен для подстановки полного текущего пути т.к. линукс не подставляет путь к исполняемому файлу в argv[0] если он запущен без префикса (как это делает DOS или Windows), а путь этот мне нужен т.к. далее он используется в
nedo как переменная ${EXEPATH} и все общие файлы берутся относительно него (включая исполняемые файлы из состава SDK типа
spr_comp или
robbyc, к которым этот путь добавляется неявно в процессе исполнения скрипта), а специфические для проекта файлы берутся из текущего директория проекта, куда
nedo перескакивает первым делом при запуске. Под спойлером можно посмотреть пример вывода в процессе сборки:
terminal Code: Select all
shaos@amd64s:~/src/SDK-work$ $(pwd)/nedo PRJ/MAPGEN/MAPGEN.N
EXEPATH=/home/shaos/src/SDK-work/
CURPATH=PRJ/MAPGEN
total 12
-rw-r--r-- 1 shaos shaos 605 Jul 9 03:41 MAPGEN.N
-rw-r--r-- 1 shaos shaos 2096 Jul 8 21:39 MAPGEN.R
-rw-r--r-- 1 shaos shaos 512 Jul 8 21:39 SPR_OR.SPR
>>>\remove SPR_OR.BIN
>>>\remove SPR_OR.R
>>>spr_comp -Sradio -O#2000 SPR_OR.SPR
-->!/home/shaos/src/SDK-work/spr_comp -Sradio -O#2000 SPR_OR.SPR
SPR_COMP v2.0 Alexander A. Shabarshin <me@shaos.net>
ORG 8192 [2000]
TYPE 8x8-2/16
SP_E SP_H SP_S SP_B SP_R SP_F SP_R0 SP_0 SP_1 OK
>>>\remove MAPGEN.RO
>>>robbyc -p -l MAPGEN.R
-->!/home/shaos/src/SDK-work/robbyc -p -l MAPGEN.R
ROBBYC - Robby Preprocessor & Compiler v2.3.1 (Jul 8 2024)
Copyright (c) 1998-2024, Alexander "Shaos" Shabarshin
http://nedoPC.org (E-mail: me@shaos.net)
Preprocessor
<MAPGEN.R!>
Pass 1
Pass 2
Ok!
<MAPGEN.RO>
<MAPGEN.RLS>
Good Luck !
>>>\need MAPGEN.RO
>>>\remove MAPGEN.A
>>>robbycc MAPGEN.RO -Pi8080 -Sradio -O#0000 -B#4000
-->!/home/shaos/src/SDK-work/robbycc MAPGEN.RO -Pi8080 -Sradio -O#0000 -B#4000
ROBBYCC v2.0.1 Robby bytecode to arbitrary code cross-compiler
Copyright (c) 2001-2024, Alexander A. Shabarshin <me@shaos.net>
Part of nedoPC SDK, see http://www.nedopc.org/nedopc/SDK
ORG #0000
BASE #4000 [16384]
VARS 240
REGS #4220 [16928]
0000 FindCode 0x01 (offset=0x0021)
0005 FindCode 0x20 (offset=0x0026)
000C FindCode 0x20 (offset=0x002D)
0013 FindCode 0x44 (offset=0x0034)
0017 FindCode 0x20 (offset=0x0038)
001E FindCode 0x20 (offset=0x003F)
0025 FindCode 0x20 (offset=0x0046)
002C FindCode 0x20 (offset=0x004D)
0033 FindCode 0x01 (offset=0x0054)
0038 FindCode 0x01 (offset=0x0059)
003D FindCode 0x20 (offset=0x005E)
0044 FindCode 0x20 (offset=0x0065)
004B FindCode 0x20 (offset=0x006C)
0052 FindCode 0x7F (offset=0x0073)
0056 FindCode 0x20 (offset=0x0077)
005D FindCode 0x20 (offset=0x007E)
0064 FindCode 0x40 (offset=0x0085)
0076 FindCode 0x40 (offset=0x0097)
0088 FindCode 0x20 (offset=0x00A9)
008F FindCode 0x20 (offset=0x00B0)
0096 FindCode 0x20 (offset=0x00B7)
009D FindCode 0x7F (offset=0x00BE)
00A1 FindCode 0x37 (offset=0x00C2)
00B7 FindCode 0x20 (offset=0x00D8)
00BE FindCode 0x40 (offset=0x00DF)
00CC FindCode 0x20 (offset=0x00ED)
00D3 FindCode 0x7F (offset=0x00F4)
00D7 FindCode 0x20 (offset=0x00F8)
00DE FindCode 0x44 (offset=0x00FF)
00E2 FindCode 0x20 (offset=0x0103)
00E9 FindCode 0x44 (offset=0x010A)
00ED FindCode 0x20 (offset=0x010E)
00F4 FindCode 0x20 (offset=0x0115)
00FB FindCode 0x20 (offset=0x011C)
0102 FindCode 0x44 (offset=0x0123)
0106 FindCode 0x20 (offset=0x0127)
010D FindCode 0x20 (offset=0x012E)
0114 FindCode 0x40 (offset=0x0135)
0122 FindCode 0x42 (offset=0x0143)
0129 FindCode 0x20 (offset=0x014A)
0130 FindCode 0x40 (offset=0x0151)
013E FindCode 0x42 (offset=0x015F)
0145 FindCode 0x40 (offset=0x0166)
0158 FindCode 0x40 (offset=0x0179)
0166 FindCode 0x40 (offset=0x0187)
0175 FindCode 0x40 (offset=0x0196)
0184 FindCode 0x69 (offset=0x01A5)
018B FindCode 0x40 (offset=0x01AC)
0199 FindCode 0x42 (offset=0x01BA)
01A0 FindCode 0x6A (offset=0x01C1)
01A7 FindCode 0x40 (offset=0x01C8)
01B5 FindCode 0x42 (offset=0x01D6)
01BC FindCode 0x6A (offset=0x01DD)
01C3 FindCode 0x40 (offset=0x01E4)
01D1 FindCode 0x42 (offset=0x01F2)
01D8 FindCode 0x6A (offset=0x01F9)
01DF FindCode 0x40 (offset=0x0200)
01ED FindCode 0x42 (offset=0x020E)
01F4 FindCode 0x6A (offset=0x0215)
01FB FindCode 0x40 (offset=0x021C)
0209 FindCode 0x42 (offset=0x022A)
0210 FindCode 0x6A (offset=0x0231)
0217 FindCode 0x40 (offset=0x0238)
0225 FindCode 0x42 (offset=0x0246)
022C FindCode 0x6A (offset=0x024D)
0233 FindCode 0x40 (offset=0x0254)
0241 FindCode 0x43 (offset=0x0262)
0245 FindCode 0x40 (offset=0x0266)
0253 FindCode 0x43 (offset=0x0274)
0257 FindCode 0x40 (offset=0x0278)
0260 FindCode 0x42 (offset=0x0281)
0267 FindCode 0x62 (offset=0x0288)
026B FindCode 0x40 (offset=0x028C)
0275 FindCode 0x42 (offset=0x0296)
027C FindCode 0x43 (offset=0x029D)
0280 FindCode 0x43 (offset=0x02A1)
0284 FindCode 0x43 (offset=0x02A5)
0288 FindCode 0x00 (offset=0x02A9)
0289 FindCode 0x20 (offset=0x02AA)
0290 FindCode 0x33 (offset=0x02B1)
0291 FindCode 0x40 (offset=0x02B2)
02A3 FindCode 0x40 (offset=0x02C4)
02C7 FindCode 0x40 (offset=0x02E8)
02D1 FindCode 0x42 (offset=0x02F2)
02D8 FindCode 0x40 (offset=0x02F9)
02E7 FindCode 0x40 (offset=0x0308)
02F1 FindCode 0x33 (offset=0x0312)
02F2 FindCode 0x33 (offset=0x0313)
02F3 FindCode 0x37 (offset=0x0314)
030A FindCode 0x33 (offset=0x032B)
030B FindCode 0x20 (offset=0x032C)
0312 FindCode 0x20 (offset=0x0333)
0319 FindCode 0x20 (offset=0x033A)
0320 FindCode 0x40 (offset=0x0341)
032F FindCode 0x40 (offset=0x0350)
033E FindCode 0x40 (offset=0x035F)
034D FindCode 0x40 (offset=0x036E)
035C FindCode 0x40 (offset=0x037D)
036B FindCode 0x20 (offset=0x038C)
0372 FindCode 0x40 (offset=0x0393)
0381 FindCode 0x42 (offset=0x03A2)
0388 FindCode 0x20 (offset=0x03A9)
0391 FindCode 0x40 (offset=0x03B2)
039F FindCode 0x43 (offset=0x03C0)
03A3 FindCode 0x20 (offset=0x03C4)
03AA FindCode 0x20 (offset=0x03CB)
03B1 FindCode 0x40 (offset=0x03D2)
03C0 FindCode 0x42 (offset=0x03E1)
03C7 FindCode 0x40 (offset=0x03E8)
03D6 FindCode 0x42 (offset=0x03F7)
03DD FindCode 0x20 (offset=0x03FE)
03E4 FindCode 0x44 (offset=0x0405)
03E8 FindCode 0x43 (offset=0x0409)
03EC FindCode 0x20 (offset=0x040D)
03F5 FindCode 0x40 (offset=0x0416)
0403 FindCode 0x43 (offset=0x0424)
0407 FindCode 0x20 (offset=0x0428)
040E FindCode 0x40 (offset=0x042F)
041D FindCode 0x42 (offset=0x043E)
0424 FindCode 0x40 (offset=0x0445)
0433 FindCode 0x42 (offset=0x0454)
043A FindCode 0x20 (offset=0x045B)
0441 FindCode 0x44 (offset=0x0462)
0445 FindCode 0x43 (offset=0x0466)
0449 FindCode 0x20 (offset=0x046A)
0452 FindCode 0x40 (offset=0x0473)
0460 FindCode 0x43 (offset=0x0481)
0464 FindCode 0x20 (offset=0x0485)
046B FindCode 0x40 (offset=0x048C)
047A FindCode 0x42 (offset=0x049B)
0481 FindCode 0x40 (offset=0x04A2)
0490 FindCode 0x42 (offset=0x04B1)
0497 FindCode 0x20 (offset=0x04B8)
049E FindCode 0x44 (offset=0x04BF)
04A2 FindCode 0x43 (offset=0x04C3)
04A6 FindCode 0x20 (offset=0x04C7)
04AF FindCode 0x40 (offset=0x04D0)
04BD FindCode 0x42 (offset=0x04DE)
04C4 FindCode 0x40 (offset=0x04E5)
04D8 FindCode 0x40 (offset=0x04F9)
04EC FindCode 0x40 (offset=0x050D)
04FA FindCode 0x40 (offset=0x051B)
0508 FindCode 0x43 (offset=0x0529)
050C FindCode 0x20 (offset=0x052D)
0513 FindCode 0x40 (offset=0x0534)
0522 FindCode 0x42 (offset=0x0543)
0529 FindCode 0x40 (offset=0x054A)
0538 FindCode 0x42 (offset=0x0559)
053F FindCode 0x20 (offset=0x0560)
0546 FindCode 0x44 (offset=0x0567)
054A FindCode 0x43 (offset=0x056B)
054E FindCode 0x20 (offset=0x056F)
0557 FindCode 0x40 (offset=0x0578)
0565 FindCode 0x43 (offset=0x0586)
0569 FindCode 0x20 (offset=0x058A)
0570 FindCode 0x40 (offset=0x0591)
057F FindCode 0x42 (offset=0x05A0)
0586 FindCode 0x40 (offset=0x05A7)
0595 FindCode 0x42 (offset=0x05B6)
059C FindCode 0x20 (offset=0x05BD)
05A3 FindCode 0x44 (offset=0x05C4)
05A7 FindCode 0x43 (offset=0x05C8)
05AB FindCode 0x40 (offset=0x05CC)
05BE FindCode 0x40 (offset=0x05DF)
05CC FindCode 0x43 (offset=0x05ED)
05D0 FindCode 0x33 (offset=0x05F1)
05D1 FindCode 0xFF (offset=0x05F2)
Compile Ok!
>>>\need MAPGEN.A
>>>\remove MAPGEN.LST
>>>\remove MAPGEN.BIN
>>>rasm MAPGEN.A -t/home/shaos/src/SDK-work/LIB/I8080/__RULES
-->!/home/shaos/src/SDK-work/rasm MAPGEN.A -t/home/shaos/src/SDK-work/LIB/I8080/__RULES
RoboAssembler v2.6.2 (c) 1997-2024 Alexander A. Shabarshin <me@shaos.net>
### Initialization (244 codes from '/home/shaos/src/SDK-work/LIB/I8080/__RULES')
### Includes
### Labels
### Deleting comments and empty lines
### First pass
### Second pass
### Compilation complete
>>>\need MAPGEN.BIN
>>>\remove SPR_OR.BIN
>>>\remove MAPGEN.LST
>>>\remove MAPGEN.R!
>>>\remove MAPGEN.RO
>>>\remove MAPGEN.RLS
>>>\remove MAPGEN.A
Ok!
По идее тут всё самодостаточное - никаких внешних тулзов не используется и сюда легко можно нахлобучить GitLab CI/CD-автоматизацию, когда получившиеся бинарники скармливаются текстовому эмулятору
pseudo-86rk (который лежит в той же самой репе
https://gitlab.com/nedopc/sdk) для сверки текстового выхлопа с эталоном - так можно проверять при каждом апдейте репы что никакая математика не сломана и т.д.
P.S. Если я в будущем добавлю в систему сборки поддержку i8086, то мне ведь придётся ещё написать текстовый эмулятор
pseudos
P.P.S. Самодостаточность есть только для i8080 и возможно будет для i8086, а вот для Z80 нужен ассемблер zmac, который не входит в эту репу - по идее он PUBLIC DOMAIN - наверное можно и включить?...