summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile94
-rw-r--r--README.md6
-rw-r--r--mk/c11-ext1.libs5
-rw-r--r--mk/c11-ext1.vars3
-rw-r--r--mk/c11.libs6
-rw-r--r--mk/c11.vars3
-rw-r--r--mk/c18-ext1.libs4
-rw-r--r--mk/c18-ext1.vars3
-rw-r--r--mk/c18.libs8
-rw-r--r--mk/c18.vars3
-rw-r--r--mk/c89.libs6
-rw-r--r--mk/c89.vars3
-rw-r--r--mk/c94.libs5
-rw-r--r--mk/c94.vars3
-rw-r--r--mk/c99.libs6
-rw-r--r--mk/c99.vars3
-rw-r--r--mk/current3
-rw-r--r--mk/posix-1.libs6
-rw-r--r--mk/posix-1.vars3
-rw-r--r--mk/posix-1993.vars3
-rw-r--r--mk/posix-1995.vars3
-rw-r--r--mk/posix-2.libs6
-rw-r--r--mk/posix-2.vars3
-rw-r--r--mk/posix-2001.vars3
-rw-r--r--mk/posix-2008.vars3
-rw-r--r--mk/xopen-4.libs5
-rw-r--r--mk/xopen-4.vars3
-rw-r--r--mk/xopen-400.libs5
-rw-r--r--mk/xopen-400.vars4
-rw-r--r--mk/xopen-500.libs6
-rw-r--r--mk/xopen-500.vars3
-rw-r--r--mk/xopen-600.libs6
-rw-r--r--mk/xopen-600.vars3
-rw-r--r--mk/xopen-700.libs6
-rw-r--r--mk/xopen-700.vars3
35 files changed, 160 insertions, 78 deletions
diff --git a/Makefile b/Makefile
index f257450e..f5de0648 100644
--- a/Makefile
+++ b/Makefile
@@ -4,7 +4,7 @@
AR=ar
ARFLAGS=rU
-BASE_CFLAGS=-g -O0 -Wall -Wextra -Werror -nostdinc -fno-builtin -fno-stack-protector -fPIC -I$(INCDIR) -Isrc -D__UNG_INTERNAL__
+CFLAGS=-g -O0 -Wall -Wextra -Werror -nostdinc -fno-builtin -fno-stack-protector -fPIC -I$(INCDIR) -Isrc -D__UNG_INTERNAL__
OBJDIR=obj
SRCDIR=src
@@ -16,11 +16,13 @@ SRCDIR=$(TOPDIR)/src
INCDIR=/lib/include
OBJDIR=./obj
-include mk/configured.mk
+include mk/current
all: libung.so
include mk/all.mk
+include mk/$(TARGET).vars
+include mk/$(TARGET).libs
cleandeps:
$(RM) -f mk/*.mk
@@ -35,87 +37,29 @@ newdeps: cleandeps
libung.so: libc.a libm.a
$(CC) -o libung.so -shared obj/*.o
-c89 c90:
- printf '.POSIX:\n\n' > mk/configured.mk
- printf 'CC=c89\n' >> mk/configured.mk
- printf 'CFLAGS=$$(BASE_CFLAGS) $(CFLAGS)\n' >> mk/configured.mk
- printf 'all: libc_C.0\n' >> mk/configured.mk
- printf 'all: libc_C.1\n' >> mk/configured.mk
- printf 'all: libm_C.0\n' >> mk/configured.mk
- printf 'all: libm_C.1\n' >> mk/configured.mk
+c89 c94 c99 c11 c11-ext1 c18 c18-ext1 posix-1 posix-2 posix-1993 posix-1995 posix-2001 posix-2008 xopen-4 xopen-400 xopen-500 xopen-600 xopen-700: clean
+ printf '.POSIX:\n\nTARGET=$@\n' > mk/current
$(MAKE)
-# 199409
-c94 c95 amd1:
- printf '.POSIX:\n\n' > mk/configured.mk
- printf 'CC=c89\n' >> mk/configured.mk
- printf 'CFLAGS=-std=c94 $$(BASE_CFLAGS) $(CFLAGS)\n' >> mk/configured.mk
- printf 'all: libc_C.0\n' >> mk/configured.mk
- printf 'all: libc_C.1\n' >> mk/configured.mk
- printf 'all: libc_C.199409\n' >> mk/configured.mk
- printf 'all: libm_C.0\n' >> mk/configured.mk
- printf 'all: libm_C.1\n' >> mk/configured.mk
- $(MAKE)
-
-
-# 199901
-c99:
- printf '.POSIX:\n\n' > mk/configured.mk
- printf 'CC=c99\n' >> mk/configured.mk
- printf 'CFLAGS=$$(BASE_CFLAGS) $(CFLAGS)\n' >> mk/configured.mk
- printf 'all: libc_C.0\n' >> mk/configured.mk
- printf 'all: libc_C.1\n' >> mk/configured.mk
- printf 'all: libc_C.199409\n' >> mk/configured.mk
- printf 'all: libc_C.199901\n' >> mk/configured.mk
- printf 'all: libm_C.0\n' >> mk/configured.mk
- printf 'all: libm_C.1\n' >> mk/configured.mk
- printf 'all: libm_C.199901\n' >> mk/configured.mk
- $(MAKE)
-
-# 201112
-c11:
-c11+ext1: c11
-
-# 201710
-c17 c18:
-c17+ext1 c18+ext1: c18
-
-# _POSIX_SOURCE
-posix-1: c89
+# aliases
+c90: c89
+c95 amd1: c94
+c17: c18
+c17-ext1: c18-ext1
+# TODO: allow AMD1 with POSIX.1, POSIX.2, SUSv1
posix-1+amd1 posix-1+c94 posix-1+c95: c94
-
-# _POSIX_C_SOURCE 2
-posix-2: c89
posix-1+amd1 posix-1+c94 posix-1+c95: c94
-
-# _POSIX_C_SOURCE 199309
-posix-1993: c89
posix-1+amd1 posix-1+c94 posix-1+c95: c94
-# _POSIX_C_SOURCE 199506
-posix-1995: c94
-
-# _POSIX_C_SOURCE 200112
-posix-2001: c99
-
-# _POSIX_C_SOURCE 200809
-posix-2008: c99
-
-# _XOPEN_SOURCE < 500 # TODO: +amd1
-xopen-4 xpg-4: posix-1993
-
-# _XOPEN_EXTENDED_UNIX # TODO: +amd1
-susv1 xopen-4-extended xpg-4-extended: xopen-4
-
-# _XOPEN_SOURCE 500
-susv2 xopen-500 xpg-5: posix-1995
-
-# _XOPEN_SOURCE 600
-susv3 xopen-600 xpg-6: posix-2001
+# TODO: SUSv4 + C18, SUSv4 + C18 + EXT1
-# _XOPEN_SOURCE 700 # TODO: +c11/c18(+ext1)
-susv4 xopen-700 xpg-7: posix-2008
+# aliases
+xpg-4: xopen-4
+susv1 xopen-4-extended xpg-4-extended: xopen-400
+susv2 xpg-5: xopen-500
+susv3 xpg-6: xopen-600
+susv4 xpg-7: xopen-700
deps:
$(MAKE) -f mk/deps.mk
diff --git a/README.md b/README.md
index 0a4ceec3..8dee5bb8 100644
--- a/README.md
+++ b/README.md
@@ -7,9 +7,9 @@ ISO C support, you'll want one of the following targets:
* c94 - ISO/IEC 9899:1990/AMD1:1995, AKA C94, C95
* c99 - ISO/IEC 9899:1999, AKA C99
* c11 - ISO/IEC 9899:2011, AKA C11
-* c11+ext1 - ISO/IEC 9899:2011, AKA C11, with Extension 1
+* c11-ext1 - ISO/IEC 9899:2011, AKA C11, with Extension 1
* c18 - ISO/IEC 9899:2018, AKA C18
-* c18+ext1 - ISO/IEC 9899:2018, AKA C18, with Extension 1
+* c18-ext1 - ISO/IEC 9899:2018, AKA C18, with Extension 1
For basic POSIX support:
@@ -33,7 +33,7 @@ SUSv4 library, run:
make susv4
If you run `make` without any targets, it will default to the most recently
-selected target. The default target straight from git is `c18+ext1`.
+selected target. The default target straight from git is `c18-ext1`.
Code Organization
-----------------
diff --git a/mk/c11-ext1.libs b/mk/c11-ext1.libs
new file mode 100644
index 00000000..bc2fe396
--- /dev/null
+++ b/mk/c11-ext1.libs
@@ -0,0 +1,5 @@
+.POSIX:
+
+include mk/c11.libs
+
+libc.a: libc_C_X1.201112
diff --git a/mk/c11-ext1.vars b/mk/c11-ext1.vars
new file mode 100644
index 00000000..14973d04
--- /dev/null
+++ b/mk/c11-ext1.vars
@@ -0,0 +1,3 @@
+.POSIX:
+
+CC=c11 -D__STDC_WANT_LIB_EXT1__
diff --git a/mk/c11.libs b/mk/c11.libs
new file mode 100644
index 00000000..57ea8730
--- /dev/null
+++ b/mk/c11.libs
@@ -0,0 +1,6 @@
+.POSIX:
+
+include mk/c99.libs
+
+libc.a: libc_C.201112
+libpthread.a: libpthread_C.20112
diff --git a/mk/c11.vars b/mk/c11.vars
new file mode 100644
index 00000000..0c0ee1ea
--- /dev/null
+++ b/mk/c11.vars
@@ -0,0 +1,3 @@
+.POSIX:
+
+CC=c11
diff --git a/mk/c18-ext1.libs b/mk/c18-ext1.libs
new file mode 100644
index 00000000..829112b3
--- /dev/null
+++ b/mk/c18-ext1.libs
@@ -0,0 +1,4 @@
+.POSIX:
+
+include mk/c18.libs
+include mk/c11-ext1.libs
diff --git a/mk/c18-ext1.vars b/mk/c18-ext1.vars
new file mode 100644
index 00000000..eb4e28e3
--- /dev/null
+++ b/mk/c18-ext1.vars
@@ -0,0 +1,3 @@
+.POSIX:
+
+CC=c18 -D__STDC_WANT_LIB_EXT1__
diff --git a/mk/c18.libs b/mk/c18.libs
new file mode 100644
index 00000000..5ba813f8
--- /dev/null
+++ b/mk/c18.libs
@@ -0,0 +1,8 @@
+.POSIX:
+
+include mk/c11.libs
+
+# There aren't actually any new functions in C18
+#libc.a: libc_C.201710
+#libc.a: libm_C.201710
+#libc.a: libpthread_C.201710
diff --git a/mk/c18.vars b/mk/c18.vars
new file mode 100644
index 00000000..d99d4270
--- /dev/null
+++ b/mk/c18.vars
@@ -0,0 +1,3 @@
+.POSIX:
+
+CC=c18
diff --git a/mk/c89.libs b/mk/c89.libs
new file mode 100644
index 00000000..075e2786
--- /dev/null
+++ b/mk/c89.libs
@@ -0,0 +1,6 @@
+.POSIX:
+
+libc.a: libc_C.0
+libc.a: libc_C.1
+libm.a: libm_C.0
+libm.a: libm_C.1
diff --git a/mk/c89.vars b/mk/c89.vars
new file mode 100644
index 00000000..ac7a1bd3
--- /dev/null
+++ b/mk/c89.vars
@@ -0,0 +1,3 @@
+.POSIX:
+
+CC=c89
diff --git a/mk/c94.libs b/mk/c94.libs
new file mode 100644
index 00000000..8b72f9af
--- /dev/null
+++ b/mk/c94.libs
@@ -0,0 +1,5 @@
+.POSIX:
+
+include mk/c89.libs
+
+all: libc_C.199409
diff --git a/mk/c94.vars b/mk/c94.vars
new file mode 100644
index 00000000..5ce1761a
--- /dev/null
+++ b/mk/c94.vars
@@ -0,0 +1,3 @@
+.POSIX:
+
+CC=c89 -std=c94
diff --git a/mk/c99.libs b/mk/c99.libs
new file mode 100644
index 00000000..92e3854c
--- /dev/null
+++ b/mk/c99.libs
@@ -0,0 +1,6 @@
+.POSIX:
+
+include mk/c94.libs
+
+all: libc_C.199901
+all: libm_C.199901
diff --git a/mk/c99.vars b/mk/c99.vars
new file mode 100644
index 00000000..1f31f19f
--- /dev/null
+++ b/mk/c99.vars
@@ -0,0 +1,3 @@
+.POSIX:
+
+CC=c99
diff --git a/mk/current b/mk/current
new file mode 100644
index 00000000..e8e98d54
--- /dev/null
+++ b/mk/current
@@ -0,0 +1,3 @@
+.POSIX:
+
+TARGET=c99
diff --git a/mk/posix-1.libs b/mk/posix-1.libs
new file mode 100644
index 00000000..ce583fa9
--- /dev/null
+++ b/mk/posix-1.libs
@@ -0,0 +1,6 @@
+.POSIX:
+
+include mk/c89.libs
+
+libc.a: libc_POSIX.1
+libm.a: libm_POSIX.1
diff --git a/mk/posix-1.vars b/mk/posix-1.vars
new file mode 100644
index 00000000..e6917b82
--- /dev/null
+++ b/mk/posix-1.vars
@@ -0,0 +1,3 @@
+.POSIX:
+
+CC=c89 -D_POSIX_SOURCE
diff --git a/mk/posix-1993.vars b/mk/posix-1993.vars
new file mode 100644
index 00000000..78684a39
--- /dev/null
+++ b/mk/posix-1993.vars
@@ -0,0 +1,3 @@
+.POSIX:
+
+CC=c89 -D_POSIX_C_SOURCE=199309L
diff --git a/mk/posix-1995.vars b/mk/posix-1995.vars
new file mode 100644
index 00000000..7dd7c021
--- /dev/null
+++ b/mk/posix-1995.vars
@@ -0,0 +1,3 @@
+.POSIX:
+
+CC=c89 -std=c94 -D_POSIX_C_SOURCE=199506L
diff --git a/mk/posix-2.libs b/mk/posix-2.libs
new file mode 100644
index 00000000..7b1de210
--- /dev/null
+++ b/mk/posix-2.libs
@@ -0,0 +1,6 @@
+.POSIX:
+
+include mk/posix-1.libs
+
+libc.a: libc_POSIX.2
+libm.a: libm_POSIX.2
diff --git a/mk/posix-2.vars b/mk/posix-2.vars
new file mode 100644
index 00000000..b223a5f8
--- /dev/null
+++ b/mk/posix-2.vars
@@ -0,0 +1,3 @@
+.POSIX:
+
+CC=c89 -D_POSIX_C_SOURCE=2
diff --git a/mk/posix-2001.vars b/mk/posix-2001.vars
new file mode 100644
index 00000000..c323b6ef
--- /dev/null
+++ b/mk/posix-2001.vars
@@ -0,0 +1,3 @@
+.POSIX:
+
+CC=c99 -D_POSIX_C_SOURCE=200112L
diff --git a/mk/posix-2008.vars b/mk/posix-2008.vars
new file mode 100644
index 00000000..aa3516cd
--- /dev/null
+++ b/mk/posix-2008.vars
@@ -0,0 +1,3 @@
+.POSIX:
+
+CC=c99 -D_POSIX_C_SOURCE=200809L
diff --git a/mk/xopen-4.libs b/mk/xopen-4.libs
new file mode 100644
index 00000000..8969afba
--- /dev/null
+++ b/mk/xopen-4.libs
@@ -0,0 +1,5 @@
+.POSIX:
+
+include mk/posix-1993.libs
+
+libc.a: libc_XOPEN.4
diff --git a/mk/xopen-4.vars b/mk/xopen-4.vars
new file mode 100644
index 00000000..41f75b30
--- /dev/null
+++ b/mk/xopen-4.vars
@@ -0,0 +1,3 @@
+.POSIX:
+
+CC=c89 -D_XOPEN_SOURCE
diff --git a/mk/xopen-400.libs b/mk/xopen-400.libs
new file mode 100644
index 00000000..6c9e0d46
--- /dev/null
+++ b/mk/xopen-400.libs
@@ -0,0 +1,5 @@
+.POSIX:
+
+include mk/xopen-4.libs
+
+libc.a: libc_XOPEN.400
diff --git a/mk/xopen-400.vars b/mk/xopen-400.vars
new file mode 100644
index 00000000..fb85c9fe
--- /dev/null
+++ b/mk/xopen-400.vars
@@ -0,0 +1,4 @@
+.POSIX:
+
+# TODO: verify the second FTM
+CC=c89 -D_XOPEN_SOURCE -D_XOPEN_UNIX_EXTENDED
diff --git a/mk/xopen-500.libs b/mk/xopen-500.libs
new file mode 100644
index 00000000..c1fb167c
--- /dev/null
+++ b/mk/xopen-500.libs
@@ -0,0 +1,6 @@
+.POSIX:
+
+include mk/xopen-400.libs
+include mk/posix-1995.libs
+
+libc.a: libc_XOPEN.500
diff --git a/mk/xopen-500.vars b/mk/xopen-500.vars
new file mode 100644
index 00000000..9bff522b
--- /dev/null
+++ b/mk/xopen-500.vars
@@ -0,0 +1,3 @@
+.POSIX:
+
+CC=c89 -std=c94 -D_XOPEN_SOURCE=500
diff --git a/mk/xopen-600.libs b/mk/xopen-600.libs
new file mode 100644
index 00000000..c4d282cd
--- /dev/null
+++ b/mk/xopen-600.libs
@@ -0,0 +1,6 @@
+.POSIX:
+
+include mk/xopen-500.libs
+include mk/posix-2001.libs
+
+libc.a: libc_XOPEN.600
diff --git a/mk/xopen-600.vars b/mk/xopen-600.vars
new file mode 100644
index 00000000..a75629fe
--- /dev/null
+++ b/mk/xopen-600.vars
@@ -0,0 +1,3 @@
+.POSIX:
+
+CC=c99 -D_XOPEN_SOURCE=600
diff --git a/mk/xopen-700.libs b/mk/xopen-700.libs
new file mode 100644
index 00000000..b470c0b7
--- /dev/null
+++ b/mk/xopen-700.libs
@@ -0,0 +1,6 @@
+.POSIX:
+
+include mk/xopen-600.libs
+include mk/posix-2008.libs
+
+libc.a: libc_XOPEN.700
diff --git a/mk/xopen-700.vars b/mk/xopen-700.vars
new file mode 100644
index 00000000..d7300804
--- /dev/null
+++ b/mk/xopen-700.vars
@@ -0,0 +1,3 @@
+.POSIX:
+
+CC=c99 -D_XOPEN_SOURCE=700