From bb639a08204690a4b19f34baecd772eb1e5ce4ec Mon Sep 17 00:00:00 2001 From: Steven Hugg Date: Sun, 12 Aug 2018 19:59:08 -0400 Subject: [PATCH] link dependencies have depenencies too; coleco uses common.[ch] --- presets/coleco/bios.c | 5 +- presets/coleco/common.c | 110 +++++++++++++++++++++++++++++++ presets/coleco/common.h | 59 +++++++++++++++++ presets/coleco/cursorsmooth.c | 5 +- presets/coleco/frogs.c | 5 +- presets/coleco/hello.c | 5 +- presets/coleco/huffman.c | 5 +- presets/coleco/lines.c | 5 +- presets/coleco/lizard.c | 5 +- presets/coleco/mode2.c | 5 +- presets/coleco/mode2bitmap.c | 5 +- presets/coleco/multicolor.c | 5 +- presets/coleco/musicplayer.c | 5 +- presets/coleco/platform.c | 88 ++----------------------- presets/coleco/shoot.c | 119 ++-------------------------------- presets/coleco/siegegame.c | 77 ++++------------------ presets/coleco/simplemusic.c | 4 +- presets/coleco/skeleton.sdcc | 69 ++------------------ presets/coleco/stars.c | 5 +- presets/coleco/text.c | 5 +- presets/coleco/text32.c | 5 +- src/project.ts | 12 ++-- src/worker/workermain.js | 9 +-- test/cli/testworker.js | 5 +- 24 files changed, 243 insertions(+), 379 deletions(-) create mode 100644 presets/coleco/common.c create mode 100644 presets/coleco/common.h diff --git a/presets/coleco/bios.c b/presets/coleco/bios.c index 6affaafa..563c458c 100644 --- a/presets/coleco/bios.c +++ b/presets/coleco/bios.c @@ -1,9 +1,8 @@ #include #include - -#include "cv.h" -#include "cvu.h" +#include +#include #define DEFINE_BIOS_FN(name,address) \ int name() { __asm call address __endasm; } diff --git a/presets/coleco/common.c b/presets/coleco/common.c new file mode 100644 index 00000000..02bd5d2e --- /dev/null +++ b/presets/coleco/common.c @@ -0,0 +1,110 @@ + +#include +#include +#include +#include + +#include "common.h" + +volatile bool vint; +volatile uint_fast8_t vint_counter; + +void vint_handler(void) +{ + vint = true; + vint_counter++; +} + +const unsigned char reverse_lookup[16] = { +0x0, 0x8, 0x4, 0xc, 0x2, 0xa, 0x6, 0xe, 0x1, 0x9, 0x5, 0xd, 0x3, 0xb, 0x7, 0xf, }; + +byte reverse_bits(byte n) { + return (reverse_lookup[n&0b1111] << 4) | reverse_lookup[n>>4]; +} + +void flip_sprite_patterns(word dest, const byte* patterns, word len) { + word i; + for (i=0; i>= 4; + } +} + +// add two 16-bit BCD values +word bcd_add(word a, word b) { + a; b; // to avoid warning +__asm + ld hl,#4 + add hl,sp + ld iy,#2 + add iy,sp + ld a,0 (iy) + add a, (hl) + daa + ld c,a + ld a,1 (iy) + inc hl + adc a, (hl) + daa + ld b,a + ld l, c + ld h, b +__endasm; +} + diff --git a/presets/coleco/common.h b/presets/coleco/common.h new file mode 100644 index 00000000..106304e8 --- /dev/null +++ b/presets/coleco/common.h @@ -0,0 +1,59 @@ +#ifndef _CV_COMMON_H +#define _CV_COMMON_H + +/* VRAM map + 0x0000 - 0x17ff character pattern table + 0x1800 - 0x1aff image table + 0x2000 - 0x37ff color table + 0x3800 - 0x3bff sprite pattern table + 0x3c00 - 0x3fff sprite attribute table +*/ + +#define PATTERN ((const cv_vmemp)0x0000) +#define IMAGE ((const cv_vmemp)0x1800) +#define COLOR ((const cv_vmemp)0x2000) +#define SPRITE_PATTERNS ((const cv_vmemp)0x3800) +#define SPRITES ((const cv_vmemp)0x3c00) + +#define COLS 32 +#define ROWS 24 + +typedef unsigned char byte; +typedef signed char sbyte; +typedef unsigned short word; + +uintptr_t __at(0x6a) font_bitmap_a; +uintptr_t __at(0x6c) font_bitmap_0; + +#define LOCHAR 0x20 +#define HICHAR 0xff + +#define CHAR(ch) (ch-LOCHAR) + +extern volatile bool vint; +extern volatile uint_fast8_t vint_counter; + +extern void vint_handler(void); +extern byte reverse_bits(byte n); +extern void flip_sprite_patterns(word dest, const byte* patterns, word len); + +extern char cursor_x; +extern char cursor_y; + +extern void clrscr(); + +extern byte getchar(byte x, byte y); +extern void putchar(byte x, byte y, byte attr); +extern void putstring(byte x, byte y, const char* string); +extern void wait_vsync(); +extern void delay(byte i); +extern byte rndint(byte a, byte b); + +extern void memset_safe(void* _dest, char ch, word size); +extern char in_rect(byte x, byte y, byte x0, byte y0, byte w, byte h); +// print 4-digit BCD value +extern void draw_bcd_word(byte x, byte y, word bcd); +// add two 16-bit BCD values +extern word bcd_add(word a, word b); + +#endif diff --git a/presets/coleco/cursorsmooth.c b/presets/coleco/cursorsmooth.c index af84db66..77730330 100644 --- a/presets/coleco/cursorsmooth.c +++ b/presets/coleco/cursorsmooth.c @@ -1,14 +1,13 @@ #include #include +#include +#include const uint8_t sprite[0x1][0x20] = {/*{w:16,h:16,remap:[4,0,1,2,3],brev:1}*/ {0xE0, 0xC0, 0xA0, 0x10, 0x0A, 0x04, 0x0B, 0x03, 0x03, 0x0B, 0x04, 0x0A, 0x10, 0xA0, 0xC0, 0xE0, 0x07, 0x03, 0x05, 0x08, 0x50, 0x20, 0xD0, 0xC0, 0xC0, 0xD0, 0x20, 0x50, 0x08, 0x05, 0x03, 0x07} }; -#include "cv.h" -#include "cvu.h" - /* VRAM map 0x0000 - 0x17ff character pattern table 0x1800 - 0x1aff image table diff --git a/presets/coleco/frogs.c b/presets/coleco/frogs.c index 8cc251c7..7d7791dd 100644 --- a/presets/coleco/frogs.c +++ b/presets/coleco/frogs.c @@ -1,9 +1,8 @@ #include #include - -#include "cv.h" -#include "cvu.h" +#include +#include #define SPRITE_PATTERNS ((const cv_vmemp)0x3800) #define SPRITES ((const cv_vmemp)0x3c00) diff --git a/presets/coleco/hello.c b/presets/coleco/hello.c index 775fb243..20b5dfba 100644 --- a/presets/coleco/hello.c +++ b/presets/coleco/hello.c @@ -2,9 +2,8 @@ #include #include #include - -#include "cv.h" -#include "cvu.h" +#include +#include #define IMAGE ((const cv_vmemp)0x1c00) diff --git a/presets/coleco/huffman.c b/presets/coleco/huffman.c index 056c8d1b..152d9bf5 100644 --- a/presets/coleco/huffman.c +++ b/presets/coleco/huffman.c @@ -5,9 +5,8 @@ // Nodes from HUFFMAN_BS to HUFFMAN_RS - 1 do not have child nodes. // Nodes from HUFFMAN_RS onward only have a left child node. -#include "cvu_compression.h" - -#include "cvu.h" +#include +#include #define RLE_ESCAPE (const uint8_t)(253) diff --git a/presets/coleco/lines.c b/presets/coleco/lines.c index f1d48d93..5a38e5f8 100644 --- a/presets/coleco/lines.c +++ b/presets/coleco/lines.c @@ -2,9 +2,8 @@ #include #include #include - -#include "cv.h" -#include "cvu.h" +#include +#include #define PATTERN ((const cv_vmemp)0x0) #define COLOR ((const cv_vmemp)0x2000) diff --git a/presets/coleco/lizard.c b/presets/coleco/lizard.c index 8cc251c7..7d7791dd 100644 --- a/presets/coleco/lizard.c +++ b/presets/coleco/lizard.c @@ -1,9 +1,8 @@ #include #include - -#include "cv.h" -#include "cvu.h" +#include +#include #define SPRITE_PATTERNS ((const cv_vmemp)0x3800) #define SPRITES ((const cv_vmemp)0x3c00) diff --git a/presets/coleco/mode2.c b/presets/coleco/mode2.c index ed5d6583..a346454b 100644 --- a/presets/coleco/mode2.c +++ b/presets/coleco/mode2.c @@ -2,9 +2,8 @@ #include #include #include - -#include "cv.h" -#include "cvu.h" +#include +#include #define PATTERN ((const cv_vmemp)0x0) #define COLOR ((const cv_vmemp)0x2000) diff --git a/presets/coleco/mode2bitmap.c b/presets/coleco/mode2bitmap.c index e00a1d73..065607e0 100644 --- a/presets/coleco/mode2bitmap.c +++ b/presets/coleco/mode2bitmap.c @@ -2,9 +2,8 @@ #include #include #include - -#include "cv.h" -#include "cvu.h" +#include +#include #define PATTERN ((const cv_vmemp)0x0) #define IMAGE ((const cv_vmemp)0x1800) diff --git a/presets/coleco/multicolor.c b/presets/coleco/multicolor.c index bac1599c..aa477957 100644 --- a/presets/coleco/multicolor.c +++ b/presets/coleco/multicolor.c @@ -1,9 +1,8 @@ #include #include - -#include "cv.h" -#include "cvu.h" +#include +#include #define PATTERN ((const cv_vmemp)0x0000) #define IMAGE ((const cv_vmemp)0x1800) diff --git a/presets/coleco/musicplayer.c b/presets/coleco/musicplayer.c index b882ee25..da0d85dd 100644 --- a/presets/coleco/musicplayer.c +++ b/presets/coleco/musicplayer.c @@ -1,9 +1,8 @@ #include #include - -#include "cv.h" -#include "cvu.h" +#include +#include #define PATTERN ((const cv_vmemp)0x0000) #define COLOR ((const cv_vmemp)0x2000) diff --git a/presets/coleco/platform.c b/presets/coleco/platform.c index 197e66e7..bbd4a6ee 100644 --- a/presets/coleco/platform.c +++ b/presets/coleco/platform.c @@ -1,34 +1,11 @@ #include #include +#include +#include -#include "cv.h" -#include "cvu.h" - -#define PATTERN ((const cv_vmemp)0x1000) -#define IMAGE ((const cv_vmemp)0x1800) -#define COLOR ((const cv_vmemp)0x2000) -#define SPRITE_PATTERNS ((const cv_vmemp)0x3800) -#define SPRITES ((const cv_vmemp)0x3c00) - -#define COLS 32 -#define ROWS 24 - -typedef unsigned char byte; -typedef signed char sbyte; -typedef unsigned short word; - -uintptr_t __at(0x6a) font_bitmap_a; -uintptr_t __at(0x6c) font_bitmap_0; - -volatile bool vint; -volatile uint_fast8_t vint_counter; - -void vint_handler(void) -{ - vint = true; - vint_counter++; -} +#include "common.h" +//#link "common.c" #define XOFS 12 // sprite horiz. offset @@ -143,20 +120,6 @@ const byte sprite_table[NUM_SPRITE_PATTERNS*2][16*2] = { /// -const unsigned char reverse_lookup[16] = { -0x0, 0x8, 0x4, 0xc, 0x2, 0xa, 0x6, 0xe, 0x1, 0x9, 0x5, 0xd, 0x3, 0xb, 0x7, 0xf, }; - -byte reverse_bits(byte n) { - return (reverse_lookup[n&0b1111] << 4) | reverse_lookup[n>>4]; -} - -void flip_sprite_patterns(word dest, const byte* patterns, word len) { - word i; - for (i=0; i= gap && x < gap+GAPSIZE*2; } -byte rndint(byte a, byte b) { - return ((byte)rand() % (b-a+1)) + a; -} - void make_levels() { byte i; byte y=0; diff --git a/presets/coleco/shoot.c b/presets/coleco/shoot.c index 87af043a..74212d4f 100644 --- a/presets/coleco/shoot.c +++ b/presets/coleco/shoot.c @@ -1,46 +1,16 @@ #include #include +#include +#include -#include "cv.h" -#include "cvu.h" +#include "common.h" +//#link "common.c" -/* VRAM map - 0x0000 - 0x17ff character pattern table - 0x1800 - 0x1aff image table - 0x2000 - 0x37ff color table - 0x3800 - 0x3bff sprite pattern table - 0x3c00 - 0x3fff sprite attribute table -*/ - -const cv_vmemp PATTERN = 0x0000; -const cv_vmemp IMAGE = 0x1800; -const cv_vmemp COLOR = 0x2000; -const cv_vmemp SPRITE_PATTERNS = 0x3800; -const cv_vmemp SPRITES = 0x3c00; - -#define COLS 32 -#define ROWS 24 #define NSPRITES 16 #define NMISSILES 8 #define YOFFSCREEN 239 -typedef unsigned char byte; -typedef signed char sbyte; -typedef unsigned short word; - -uintptr_t __at(0x6a) font_bitmap_a; -uintptr_t __at(0x6c) font_bitmap_0; - -volatile bool vint; -volatile uint_fast8_t vint_counter; - -void vint_handler(void) -{ - vint = true; - vint_counter++; -} - static byte pattern_table[8*2] = { /*{w:16,h:8,remap:[3,0,1,2]}*/ 0xCC, 0xF2, 0xD0, 0xFC, 0xF3, 0xE8, 0xC4, 0x03, @@ -176,85 +146,6 @@ void setup_32_column_font() { set_shifted_pattern(pattern_table, PATTERN+67*8+i*3*8, i); } -#define LOCHAR 0x20 -#define HICHAR 0xff - -#define CHAR(ch) (ch-LOCHAR) - -#define BLANK 0 - -void clrscr() { - cvu_vmemset(IMAGE, CHAR(' '), COLS*ROWS); -} - -byte getchar(byte x, byte y) { - return cvu_vinb(IMAGE + y*COLS + x); -} - -void putchar(byte x, byte y, byte attr) { - cvu_voutb(attr, IMAGE + y*COLS + x); -} - -void putstring(byte x, byte y, const char* string) { - while (*string) { - putchar(x++, y, CHAR(*string++)); - } -} - -void wait_vsync() { - vint = false; - while (!vint) ; -} - -void delay(byte i) { - while (i--) { - wait_vsync(); - } -} - -void memset_safe(void* _dest, char ch, word size) { - byte* dest = _dest; - while (size--) { - *dest++ = ch; - } -} - -char in_rect(byte x, byte y, byte x0, byte y0, byte w, byte h) { - return ((byte)(x-x0) < w && (byte)(y-y0) < h); // unsigned -} - -void draw_bcd_word(byte x, byte y, word bcd) { - byte j; - x += 3; - for (j=0; j<4; j++) { - putchar(x, y, CHAR('0'+(bcd&0xf))); - x--; - bcd >>= 4; - } -} - -// add two 16-bit BCD values -word bcd_add(word a, word b) { - a; b; // to avoid warning -__asm - ld hl,#4 - add hl,sp - ld iy,#2 - add iy,sp - ld a,0 (iy) - add a, (hl) - daa - ld c,a - ld a,1 (iy) - inc hl - adc a, (hl) - daa - ld b,a - ld l, c - ld h, b -__endasm; -} - // GAME CODE typedef struct { @@ -347,6 +238,8 @@ void setup_formation() { enemies_left = MAX_IN_FORMATION; } +#define BLANK 0 + void draw_row(byte row) { byte i; byte x = formation_offset_x / 8; diff --git a/presets/coleco/siegegame.c b/presets/coleco/siegegame.c index cf2e63db..85562b33 100644 --- a/presets/coleco/siegegame.c +++ b/presets/coleco/siegegame.c @@ -1,79 +1,22 @@ #include #include +#include +#include -#include "cv.h" -#include "cvu.h" - -#define COLOR ((const cv_vmemp)0x2000) -#define IMAGE ((const cv_vmemp)0x1c00) - -#define COLS 32 -#define ROWS 24 - -typedef unsigned char byte; -typedef signed char sbyte; -typedef unsigned short word; - -uintptr_t __at(0x6a) font_bitmap_a; -uintptr_t __at(0x6c) font_bitmap_0; - -volatile bool vint; -volatile uint_fast8_t vint_counter; - -void vint_handler(void) -{ - vint = true; - vint_counter++; -} +#include "common.h" +//#link "common.c" void setup_32_column_font() { cv_set_image_table(IMAGE); - cvu_memtovmemcpy(0x1800, (void *)(font_bitmap_0 - '0'*8), 256*8); - cv_set_character_pattern_t(0x1800); + cvu_memtovmemcpy(PATTERN, (void *)(font_bitmap_0 - 16*8), 96*8); + cv_set_character_pattern_t(PATTERN); cv_set_screen_mode(CV_SCREENMODE_STANDARD); cv_set_color_table(COLOR); cvu_vmemset(COLOR, 0x30, 8); // set color for chars 0-63 cvu_vmemset(COLOR+8, 0x50, 32-8); // set chars 63-255 } -char cursor_x; -char cursor_y; - -void clrscr() { - cvu_vmemset(IMAGE, ' ', COLS*ROWS); -} - -#define LOCHAR 0x0 -#define HICHAR 0xff - -#define CHAR(ch) (ch-LOCHAR) - -byte getchar(byte x, byte y) { - return cvu_vinb(IMAGE + y*COLS + x); -} - -void putchar(byte x, byte y, byte attr) { - cvu_voutb(attr, IMAGE + y*COLS + x); -} - -void putstring(byte x, byte y, const char* string) { - while (*string) { - putchar(x++, y, CHAR(*string++)); - } -} - -void wait_vsync() { - vint = false; - while (!vint) ; -} - -void delay(byte i) { - while (i--) { - wait_vsync(); - } -} - ////////// GAME DATA typedef struct { @@ -98,7 +41,9 @@ byte frames_per_move; /////////// -const char BOX_CHARS[8] = { '+', '+', '+', '+', '-', '-', '!', '!' }; +const char BOX_CHARS[8] = { + CHAR('+'), CHAR('+'), CHAR('+'), CHAR('+'), + CHAR('-'), CHAR('-'), CHAR('!'), CHAR('!') }; void draw_box(byte x, byte y, byte x2, byte y2, const char* chars) { byte x1 = x; @@ -132,8 +77,8 @@ void init_game() { memset(players, 0, sizeof(players)); players[0].head_attr = CHAR('1'); players[1].head_attr = CHAR('2'); - players[0].tail_attr = '@'; - players[1].tail_attr = '%'; + players[0].tail_attr = CHAR('@'); + players[1].tail_attr = CHAR('%'); frames_per_move = START_SPEED; } diff --git a/presets/coleco/simplemusic.c b/presets/coleco/simplemusic.c index 17ac840b..ff1dc057 100644 --- a/presets/coleco/simplemusic.c +++ b/presets/coleco/simplemusic.c @@ -2,8 +2,8 @@ const uint16_t notes[] = { 12846, 12334, 11086, 10062, 10062, 9806, 10062, 10574, 11086, 10062, 11086, 12430, 11042, 12334, 12878, 14158, 14158, 12878, 13390, 13646, 10574, 9806, 10574, 12430, 12846, 12334, 11086, 10062, 10062, 9806, 10062, 10574, 11086, 10062, 11086, 12430, 11054, 12334, 12878, 14158, 14158, 12878, 13390, 13646, 10574, 10062, 10062, 10126, 11054, 12334, 12878, 14158, 13902, 14158, 14670, 14158, 13646, 12878, 13390, 13646, 3918, 12878, 14158, 13902, 12878, 12366, 12878, 12366, 12878, 11086, 10062, 9870, 12334, 11054, 11086, 10062, 10062, 9806, 10062, 10574, 11086, 10062, 11086, 12430, 11054, 12334, 12878, 14158, 14158, 12878, 13390, 13646, 10574, 10062, 10062, 10126, 0xffff }; -#include "cv.h" -#include "cvu_sound.h" +#include +#include struct cvu_music music; diff --git a/presets/coleco/skeleton.sdcc b/presets/coleco/skeleton.sdcc index 36eaa9fc..ab9b77f9 100644 --- a/presets/coleco/skeleton.sdcc +++ b/presets/coleco/skeleton.sdcc @@ -1,79 +1,22 @@ #include #include +#include +#include -#include "cv.h" -#include "cvu.h" - -#define COLOR ((const cv_vmemp)0x2000) -#define IMAGE ((const cv_vmemp)0x1c00) - -#define COLS 32 -#define ROWS 24 - -typedef unsigned char byte; -typedef signed char sbyte; -typedef unsigned short word; - -uintptr_t __at(0x6a) font_bitmap_a; -uintptr_t __at(0x6c) font_bitmap_0; - -volatile bool vint; -volatile uint_fast8_t vint_counter; - -void vint_handler(void) -{ - vint = true; - vint_counter++; -} +#include "common.h" +//#link "common.c" void setup_32_column_font() { cv_set_image_table(IMAGE); - cvu_memtovmemcpy(0x1800, (void *)(font_bitmap_0 - '0'*8), 256*8); - cv_set_character_pattern_t(0x1800); + cvu_memtovmemcpy(PATTERN, (void *)(font_bitmap_0 - 16*8), 96*8); + cv_set_character_pattern_t(PATTERN); cv_set_screen_mode(CV_SCREENMODE_STANDARD); cv_set_color_table(COLOR); cvu_vmemset(COLOR, 0x36, 8); // set color for chars 0-63 cvu_vmemset(COLOR+8, 0x06, 32-8); // set chars 63-255 } -char cursor_x; -char cursor_y; - -void clrscr() { - cvu_vmemset(IMAGE, ' ', COLS*ROWS); -} - -#define LOCHAR 0x0 -#define HICHAR 0xff - -#define CHAR(ch) (ch-LOCHAR) - -byte getchar(byte x, byte y) { - return cvu_vinb(IMAGE + y*COLS + x); -} - -void putchar(byte x, byte y, byte attr) { - cvu_voutb(attr, IMAGE + y*COLS + x); -} - -void putstring(byte x, byte y, const char* string) { - while (*string) { - putchar(x++, y, CHAR(*string++)); - } -} - -void wait_vsync() { - vint = false; - while (!vint) ; -} - -void delay(byte i) { - while (i--) { - wait_vsync(); - } -} - void main() { setup_32_column_font(); cv_set_screen_active(true); diff --git a/presets/coleco/stars.c b/presets/coleco/stars.c index 351d9932..7d32893d 100644 --- a/presets/coleco/stars.c +++ b/presets/coleco/stars.c @@ -1,8 +1,7 @@ #include #include - -#include "cv.h" -#include "cvu.h" +#include +#include #define PATTERN ((const cv_vmemp)0x0000) #define COLOR ((const cv_vmemp)0x2000) diff --git a/presets/coleco/text.c b/presets/coleco/text.c index 3dca962f..5cc53d1a 100644 --- a/presets/coleco/text.c +++ b/presets/coleco/text.c @@ -1,5 +1,6 @@ -#include "cv.h" -#include "cvu.h" + +#include +#include #define PATTERN 0x0000 #define IMAGE 0x0800 diff --git a/presets/coleco/text32.c b/presets/coleco/text32.c index 02be242e..d983b074 100644 --- a/presets/coleco/text32.c +++ b/presets/coleco/text32.c @@ -1,8 +1,7 @@ #include - -#include "cv.h" -#include "cvu.h" +#include +#include #define PATTERN 0x0000 #define IMAGE 0x1c00 diff --git a/src/project.ts b/src/project.ts index fdd32b68..db1be4da 100644 --- a/src/project.ts +++ b/src/project.ts @@ -63,7 +63,8 @@ export class CodeProject { } } else { // for .asm -- [.]include "file" - var re2 = /^\s+([.]?include)\s+"(.+?)"/gm; + // for .c -- #include "file" + var re2 = /^\s+([.#]?include)\s+"(.+?)"/gm; while (m = re2.exec(text)) { files.push(m[2]); } @@ -117,20 +118,20 @@ export class CodeProject { // TODO: add preproc directive for __MAINFILE__ var mainfilename = getFilenameForPath(this.mainpath); var maintext = this.getFile(this.mainpath); - var files = [mainfilename]; + var depfiles = []; msg.updates.push({path:mainfilename, data:maintext}); for (var dep of depends) { if (!dep.link) { msg.updates.push({path:dep.filename, data:dep.data}); - files.push(dep.filename); + depfiles.push(dep.filename); } } - msg.buildsteps.push({path:mainfilename, files:files, platform:this.platform_id, tool:this.platform.getToolForFilename(this.mainpath), mainfile:true}); + msg.buildsteps.push({path:mainfilename, files:[mainfilename].concat(depfiles), platform:this.platform_id, tool:this.platform.getToolForFilename(this.mainpath), mainfile:true}); for (var dep of depends) { if (dep.data && dep.link) { this.preloadWorker(dep.filename); msg.updates.push({path:dep.filename, data:dep.data}); - msg.buildsteps.push({path:dep.filename, platform:this.platform_id, tool:this.platform.getToolForFilename(dep.path)}); + msg.buildsteps.push({path:dep.filename, files:[dep.filename].concat(depfiles), platform:this.platform_id, tool:this.platform.getToolForFilename(dep.path)}); } } return msg; @@ -211,6 +212,7 @@ export class CodeProject { if (!this.mainpath) throw "need to call setMainFile first"; var maindata = this.getFile(this.mainpath); var text = typeof maindata === "string" ? maindata : ''; + // TODO: load dependencies of non-main files this.loadFileDependencies(text, (err, depends) => { if (err) { console.log(err); // TODO? diff --git a/src/worker/workermain.js b/src/worker/workermain.js index faf17214..25d8ab66 100644 --- a/src/worker/workermain.js +++ b/src/worker/workermain.js @@ -986,7 +986,7 @@ function compileSDCC(step) { populateFiles(step, FS); // load source file and preprocess var code = workfs[step.path].data; // TODO - var preproc = preprocessMCPP(code, step.platform); + var preproc = preprocessMCPP(step); if (preproc.errors) return preproc; else code = preproc.code; // pipe file to stdin @@ -1024,8 +1024,9 @@ function compileSDCC(step) { }; } -function preprocessMCPP(code, platform, toolname) { +function preprocessMCPP(step) { load("mcpp"); + var platform = step.platform; var params = PLATFORM_PARAMS[platform]; if (!params) throw Error("Platform not supported: " + platform); // :2: error: Can't open include file "foo.h" @@ -1039,7 +1040,7 @@ function preprocessMCPP(code, platform, toolname) { }); var FS = MCPP['FS']; setupFS(FS, 'sdcc'); // TODO: toolname - FS.writeFile("main.c", code, {encoding:'utf8'}); + populateFiles(step, FS); // TODO: make configurable by other compilers var args = [ "-D", "__8BITWORKSHOP__", @@ -1047,7 +1048,7 @@ function preprocessMCPP(code, platform, toolname) { "-D", "__SDCC_z80", "-I", "/share/include", "-Q", - "main.c", "main.i"]; + step.path, "main.i"]; if (params.extra_preproc_args) { args.push.apply(args, params.extra_preproc_args); } diff --git a/test/cli/testworker.js b/test/cli/testworker.js index 0a65bd80..d413c25a 100644 --- a/test/cli/testworker.js +++ b/test/cli/testworker.js @@ -152,8 +152,9 @@ describe('Worker', function() { compile('sdcc', csource, 'sound_williams-z80', done, 16384, 6, 0); }); it('should compile coleco skeleton', function(done) { - var csource = ab2str(fs.readFileSync('presets/coleco/skeleton.sdcc')); - compile('sdcc', csource, 'coleco', done, 32768, 31, 0); + // TODO: can't do skeleton b/c of dependencies + var csource = ab2str(fs.readFileSync('presets/coleco/text.c')); + compile('sdcc', csource, 'coleco', done, 32768, 14, 0); }); it('should compile verilog example', function(done) { var csource = ab2str(fs.readFileSync('presets/verilog/lfsr.v'));