From ee3eb5ac6c89d10b4a564dedae50216b196bad9c Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Wed, 14 Feb 2024 12:36:42 +0100 Subject: Fix builds on MacOS --- cbs.h | 5 +- make.c | 4 +- src/c8asm/instr.gperf | 1 + src/c8asm/lookup.h | 190 -------------------------------------------------- 4 files changed, 8 insertions(+), 192 deletions(-) delete mode 100644 src/c8asm/lookup.h diff --git a/cbs.h b/cbs.h index 3fc854d..c13baa5 100644 --- a/cbs.h +++ b/cbs.h @@ -717,6 +717,7 @@ _rebuild(char *src) { char *bbn, *sbn, *argv0; cmd_t cmd = {0}; + struct strv sv = {0}; /* We assume that the compiled binary and the source file are in the same directory. */ @@ -732,7 +733,9 @@ _rebuild(char *src) if (!foutdated(bbn, sbn)) return; - cmdadd(&cmd, "cc", "-std=c2x"); + env_or_default(&sv, "CC", "cc"); + cmdaddv(&cmd, sv.buf, sv.len); + cmdadd(&cmd, "-std=c2x"); #ifdef CBS_PTHREAD cmdadd(&cmd, "-lpthread"); #endif diff --git a/make.c b/make.c index 2008b21..f547737 100644 --- a/make.c +++ b/make.c @@ -22,8 +22,10 @@ "-Wno-pointer-sign" /* char ↔ char8_t */ #define CC "cc" -#ifdef __GNUC__ +#ifdef __GLIBC__ # define CFLAGS WARN, "-std=c2x", "-D_GNU_SOURCE" +#elifdef __APPLE__ /* TODO: Improve this check */ +# define CFLAGS WARN, "-std=c2x", "-DUINT64_WIDTH=64" #else # define CFLAGS WARN, "-std=c2x" #endif diff --git a/src/c8asm/instr.gperf b/src/c8asm/instr.gperf index fac4e57..333440a 100644 --- a/src/c8asm/instr.gperf +++ b/src/c8asm/instr.gperf @@ -2,6 +2,7 @@ %define initializer-suffix ,nullptr %define lookup-function-name oplookup %includes +%language=ANSI-C %readonly-tables %struct-type struct opf_pair { char *name; void (*pfn)(void); }; diff --git a/src/c8asm/lookup.h b/src/c8asm/lookup.h deleted file mode 100644 index 26bc141..0000000 --- a/src/c8asm/lookup.h +++ /dev/null @@ -1,190 +0,0 @@ -/* ANSI-C code produced by gperf version 3.1 */ -/* Command-line: gperf --output-file src/c8asm/lookup.h src/c8asm/instr.gperf */ -/* Computed positions: -k'1-3' */ - -#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ - && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ - && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ - && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ - && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ - && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ - && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ - && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ - && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ - && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ - && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ - && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ - && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ - && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ - && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ - && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ - && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ - && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ - && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ - && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ - && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ - && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ - && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) -/* The character set is not based on ISO-646. */ -#error "gperf generated tables don't work with this execution character set. Please report a bug to ." -#endif - -#line 7 "src/c8asm/instr.gperf" -struct opf_pair { char *name; void (*pfn)(void); }; -#include - -#define TOTAL_KEYWORDS 25 -#define MIN_WORD_LENGTH 2 -#define MAX_WORD_LENGTH 4 -#define MIN_HASH_VALUE 2 -#define MAX_HASH_VALUE 49 -/* maximum key range = 48, duplicates = 0 */ - -#ifdef __GNUC__ -__inline -#else -#ifdef __cplusplus -inline -#endif -#endif -static unsigned int -hash (register const char *str, register size_t len) -{ - static const unsigned char asso_values[] = - { - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 5, 15, 15, - 10, 0, 50, 50, 10, 50, 0, 5, 20, 50, - 5, 5, 18, 50, 0, 0, 0, 30, 50, 8, - 3, 3, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50 - }; - register unsigned int hval = len; - - switch (hval) - { - default: - hval += asso_values[(unsigned char)str[2]]; - /*FALLTHROUGH*/ - case 2: - hval += asso_values[(unsigned char)str[1]]; - /*FALLTHROUGH*/ - case 1: - hval += asso_values[(unsigned char)str[0]]; - break; - } - return hval; -} - -const struct opf_pair * -oplookup (register const char *str, register size_t len) -{ - static const unsigned char lengthtable[] = - { - 0, 0, 2, 3, 4, 0, 3, 2, 3, 4, 0, 3, 0, 3, - 4, 0, 3, 0, 3, 0, 2, 3, 0, 3, 0, 0, 3, 2, - 3, 0, 0, 0, 2, 3, 0, 0, 0, 0, 3, 0, 0, 0, - 0, 3, 4, 0, 0, 0, 3, 4 - }; - static const struct opf_pair wordlist[] = - { - {"",nullptr}, {"",nullptr}, -#line 23 "src/c8asm/instr.gperf" - {"se", parseop_se}, -#line 20 "src/c8asm/instr.gperf" - {"ret", parseop_ret}, -#line 22 "src/c8asm/instr.gperf" - {"rstr", parseop_rstr}, - {"",nullptr}, -#line 32 "src/c8asm/instr.gperf" - {"sys", parseop_sys}, -#line 19 "src/c8asm/instr.gperf" - {"or", parseop_or}, -#line 28 "src/c8asm/instr.gperf" - {"sne", parseop_sne}, -#line 29 "src/c8asm/instr.gperf" - {"stor", parseop_stor}, - {"",nullptr}, -#line 33 "src/c8asm/instr.gperf" - {"xor", parseop_xor}, - {"",nullptr}, -#line 25 "src/c8asm/instr.gperf" - {"shr", parseop_shr}, -#line 26 "src/c8asm/instr.gperf" - {"sknp", parseop_sknp}, - {"",nullptr}, -#line 16 "src/c8asm/instr.gperf" - {"hex", parseop_hex}, - {"",nullptr}, -#line 21 "src/c8asm/instr.gperf" - {"rnd", parseop_rnd}, - {"",nullptr}, -#line 17 "src/c8asm/instr.gperf" - {"jp", parseop_jp}, -#line 15 "src/c8asm/instr.gperf" - {"drw", parseop_drw}, - {"",nullptr}, -#line 10 "src/c8asm/instr.gperf" - {"and", parseop_and}, - {"",nullptr}, {"",nullptr}, -#line 27 "src/c8asm/instr.gperf" - {"skp", parseop_skp}, -#line 14 "src/c8asm/instr.gperf" - {"db", parseop_db}, -#line 9 "src/c8asm/instr.gperf" - {"add", parseop_add}, - {"",nullptr}, {"",nullptr}, {"",nullptr}, -#line 18 "src/c8asm/instr.gperf" - {"ld", parseop_ld}, -#line 24 "src/c8asm/instr.gperf" - {"shl", parseop_shl}, - {"",nullptr}, {"",nullptr}, {"",nullptr}, {"",nullptr}, -#line 13 "src/c8asm/instr.gperf" - {"cls", parseop_cls}, - {"",nullptr}, {"",nullptr}, {"",nullptr}, {"",nullptr}, -#line 11 "src/c8asm/instr.gperf" - {"bcd", parseop_bcd}, -#line 12 "src/c8asm/instr.gperf" - {"call", parseop_call}, - {"",nullptr}, {"",nullptr}, {"",nullptr}, -#line 30 "src/c8asm/instr.gperf" - {"sub", parseop_sub}, -#line 31 "src/c8asm/instr.gperf" - {"subn", parseop_subn} - }; - - if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) - { - register unsigned int key = hash (str, len); - - if (key <= MAX_HASH_VALUE) - if (len == lengthtable[key]) - { - register const char *s = wordlist[key].name; - - if (*str == *s && !memcmp (str + 1, s + 1, len - 1)) - return &wordlist[key]; - } - } - return 0; -} -- cgit v1.2.3