aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Voss <thomas.voss@humanwave.nl> 2024-02-14 12:36:42 +0100
committerThomas Voss <thomas.voss@humanwave.nl> 2024-02-14 12:36:42 +0100
commitee3eb5ac6c89d10b4a564dedae50216b196bad9c (patch)
tree8c14f7018da5b64cefec6ba7844168fab838f819
parent269d6af510b641c4d848ada8e20325205aa2e7be (diff)
Fix builds on MacOS
-rw-r--r--cbs.h5
-rw-r--r--make.c4
-rw-r--r--src/c8asm/instr.gperf1
-rw-r--r--src/c8asm/lookup.h190
4 files changed, 8 insertions, 192 deletions
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 <bug-gperf@gnu.org>."
-#endif
-
-#line 7 "src/c8asm/instr.gperf"
-struct opf_pair { char *name; void (*pfn)(void); };
-#include <string.h>
-
-#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;
-}