From b9d6e6e348539f40511cc556c791f280c5475104 Mon Sep 17 00:00:00 2001
From: Justine Tunney <jtunney@gmail.com>
Date: Sat, 30 Mar 2024 21:46:08 -0700
Subject: [PATCH] Standardize on -fsigned-char

MaGuess on Discord pointed out the fact that cosmocc contradicts itself
on the signedness of `char`. It's up to each platform to choose one, so
the cosmo platform shall choose signed. The rationale is it makes the C
language syntax more internally similar. `char` should be `signed char`
for the same reason `int` means `signed int`. It's recommended that you
still assume `char` could go either way since that's portable thinking.
But if you want to assume we'll always have signed char, that's ok too.
---
 build/definitions.mk        | 1 +
 tool/cosmocc/bin/cosmocc    | 2 +-
 tool/cosmocc/bin/cosmocross | 1 +
 3 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/build/definitions.mk b/build/definitions.mk
index b7c825184..9bc6d8c15 100644
--- a/build/definitions.mk
+++ b/build/definitions.mk
@@ -127,6 +127,7 @@ ifeq ($(ARCH), aarch64)
 DEFAULT_COPTS +=							\
 	-ffixed-x18							\
 	-ffixed-x28							\
+	-fsigned-char							\
 	-mno-outline-atomics
 endif
 
diff --git a/tool/cosmocc/bin/cosmocc b/tool/cosmocc/bin/cosmocc
index ae71ffeba..4951546df 100755
--- a/tool/cosmocc/bin/cosmocc
+++ b/tool/cosmocc/bin/cosmocc
@@ -265,7 +265,7 @@ LDFLAGS_X86_64="$LDFLAGS -L$BIN/../x86_64-linux-cosmo/lib -Wl,-T,$BIN/../x86_64-
 LDLIBS_X86_64="-lcosmo"
 
 CRT_AARCH64="$BIN/../aarch64-linux-cosmo/lib/crt.o"
-CPPFLAGS_AARCH64="$CPPFLAGS"
+CPPFLAGS_AARCH64="$CPPFLAGS -fsigned-char"
 CFLAGS_AARCH64="$CFLAGS -ffixed-x18 -ffixed-x28 -mno-outline-atomics"
 LDFLAGS_AARCH64="$LDFLAGS -L$BIN/../aarch64-linux-cosmo/lib -Wl,-T,$BIN/../aarch64-linux-cosmo/lib/aarch64.lds -Wl,-z,common-page-size=16384 -Wl,-z,max-page-size=16384"
 LDLIBS_AARCH64="-lcosmo"
diff --git a/tool/cosmocc/bin/cosmocross b/tool/cosmocc/bin/cosmocross
index d89d75971..78304cda8 100755
--- a/tool/cosmocc/bin/cosmocross
+++ b/tool/cosmocc/bin/cosmocross
@@ -84,6 +84,7 @@ if [ x"$ARCH" = x"x86_64" ]; then
 elif [ x"$ARCH" = x"aarch64" ]; then
   OBJCOPYFLAGS="-S"
   PAGESZ=16384
+  CPPFLAGS="$CPPFLAGS -fsigned-char"
   CFLAGS="$CFLAGS -ffixed-x18 -ffixed-x28 -mno-outline-atomics"
   LDFLAGS="$LDFLAGS -Wl,-T,$BIN/../$ARCH-linux-cosmo/lib/aarch64.lds"
 else