From 96f057488e31750a83b7e3a8cdd86effdce67fe0 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Wed, 2 Sep 2015 06:50:54 +0200 Subject: automate some parts of intconf MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- .gitignore | 1 + Makefile | 34 ++++++++++++++++++++++++++-------- gen/bits/intconf.c | 38 ++++++++++++++++++++++++++++++++++++++ gen/bits/intconf.h | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ include/bits/intconf.h | 47 ----------------------------------------------- 5 files changed, 114 insertions(+), 55 deletions(-) create mode 100644 gen/bits/intconf.c create mode 100644 gen/bits/intconf.h delete mode 100644 include/bits/intconf.h diff --git a/.gitignore b/.gitignore index 9a4936c..1e79610 100644 --- a/.gitignore +++ b/.gitignore @@ -19,4 +19,5 @@ obj/ *.dvi *.ps /config.mk +/include/bits/intconf.h diff --git a/Makefile b/Makefile index aaaf03b..50c156a 100644 --- a/Makefile +++ b/Makefile @@ -55,17 +55,22 @@ CCFLAGS_STATIC = $(CCFLAGS_COMMON) CCFLAGS_SHARED = $(CCFLAGS_COMMON) -fPIC -DSHARED # Flags required when genering header file dependency list. -MMFLAGS = $(CCFLAGS_COMMON) -MG +MMFLAGS = $(CCFLAGS_COMMON) -Igen -MG +SHE = '\#' + # Object files to build. -OBJECTS = $(shell find src | grep '\.c$$' | sed -e 's:^src/:obj/:' -e 's:\.c$$:\.o:') +OBJECTS = $(shell find src | grep '\.c$$' | grep -v $(SHE) | sed -e 's:^src/:obj/:' -e 's:\.c$$:\.o:') # All header files. -HEADERS = $(shell find . | grep '\.h$$' | sed -e 's:^\./::') +HEADERS = $(shell find . | grep '\.h$$' | grep -v $(SHE) | sed -e 's:^\./::') # All code files. -SOURCES = $(shell find src | grep '\.c$$') +SOURCES = $(shell find src | grep '\.c$$' | grep -v $(SHE)) + +# Generated headers files. +GENERATED = include/bits/intconf.h @@ -89,19 +94,31 @@ all: $(OBJECTS) # Build object file. -obj/%.o: +obj/%.o: $(GENERATED) @mkdir -p $$(dirname $@) $(CC) -c -o $@ src/$*.c $(CCFLAGS_SHARED) +# Preprocess header files. +include/%.h: gen/%.h bin/gen/% + @mkdir -p $$(dirname $@) + gpp -s // < $< > $@ + +bin/gen/%: obj/gen/%.o + @mkdir -p $$(dirname $@) + $(CC) $(CCFLAGS_WARNINGS) -std=c99 -o $@ $^ +obj/gen/%.o: gen/%.c + @mkdir -p $$(dirname $@) + $(CC) -c -o $@ $< # Generate list of file dependencies for object files. -obj/deps.mk: Makefile $(HEADERS) $(SOURCES) +obj/deps.mk: Makefile $(HEADERS) $(SOURCES) $(GENERATED) @mkdir -p obj - @find src | grep '\.c$$' | xargs $(CC) -MM $(MMFLAGS) > $@ - @sed -i 's#^[^ :]*\.o: src\([^ ]*\)/[^ /]*\.c#obj\1/&#' $@ + find src | grep '\.c$$' | xargs $(CC) -MM $(MMFLAGS) > $@ + sed -i 's#^[^ :]*\.o: src\([^ ]*\)/[^ /]*\.c#obj\1/&#' $@ + sed -i 's# gen/\([^ ]*\.h\)# \1#g' $@ @@ -109,6 +126,7 @@ obj/deps.mk: Makefile $(HEADERS) $(SOURCES) .PHONY: clean clean: -rm -rf obj bin + -rm -f include/bits/intconf.h # Remove all files that are not part of the source. .PHONY: distclean diff --git a/gen/bits/intconf.c b/gen/bits/intconf.c new file mode 100644 index 0000000..b5d05be --- /dev/null +++ b/gen/bits/intconf.c @@ -0,0 +1,38 @@ +/** + * slibc — Yet another C library + * Copyright © 2015 Mattias Andrée (maandree@member.fsf.org) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include + + + +int main(void) +{ + printf("CHAR_BIT %zu\n", 8 * sizeof(char)); + printf("SHORT_BIT %zu\n", 8 * sizeof(short int)); + printf("INT_BIT %zu\n", 8 * sizeof(int)); + printf("LONG_BIT %zu\n", 8 * sizeof(long int)); + printf("LONG_LONG_BIT %zu\n", 8 * sizeof(long long int)); + + printf("INT%zu %s\n", 8 * sizeof(char), "char"); + printf("INT%zu %s\n", 8 * sizeof(short int), "short int"); + printf("INT%zu %s\n", 8 * sizeof(int), "int"); + printf("INT%zu %s\n", 8 * sizeof(long int), "long int"); + printf("INT%zu %s\n", 8 * sizeof(long long int), "long long int"); + + return 0; +} + diff --git a/gen/bits/intconf.h b/gen/bits/intconf.h new file mode 100644 index 0000000..84989e9 --- /dev/null +++ b/gen/bits/intconf.h @@ -0,0 +1,49 @@ +/** + * slibc — Yet another C library + * Copyright © 2015 Mattias Andrée (maandree@member.fsf.org) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#ifndef _BITS_INTCONF_H +#define _BITS_INTCONF_H +//>set -e +//>FAST8=8; FAST16=64; FAST32=64; FAST64=64 + +#define __MAX_TO_MIN(max) (-(max) - 1) +#define __CHAR_BIT //(bin/gen/bits/intconf | grep ^CHAR_BIT | sed "s/^[^ ]* //") +#define __SHORT_BIT //(bin/gen/bits/intconf | grep ^SHORT_BIT | sed "s/^[^ ]* //") +#define __INT_BIT //(bin/gen/bits/intconf | grep ^INT_BIT | sed "s/^[^ ]* //") +#define __LONG_BIT //(bin/gen/bits/intconf | grep ^LONG_BIT | sed "s/^[^ ]* //") +#define __LONG_LONG_BIT //(bin/gen/bits/intconf | grep ^LONG_LONG_BIT | sed "s/^[^ ]* //") +#define __INT8 //(bin/gen/bits/intconf | grep ^INT8 | sed "s/^[^ ]* //" | sed 1q) +#define __INT16 //(bin/gen/bits/intconf | grep ^INT16 | sed "s/^[^ ]* //" | sed 1q) +#define __INT32 //(bin/gen/bits/intconf | grep ^INT32 | sed "s/^[^ ]* //" | sed 1q) +#define __INT64 //(bin/gen/bits/intconf | grep ^INT64 | sed "s/^[^ ]* //" | sed 1q) +#define __INT_FAST8 __INT//{FAST8} +#define __INT_FAST16 __INT//{FAST16} +#define __INT_FAST32 __INT//{FAST32} +#define __INT_FAST64 __INT//{FAST64} +#define __INT_FAST8_MAX INT//{FAST8}_MAX +#define __INT_FAST16_MAX INT//{FAST16}_MAX +#define __INT_FAST32_MAX INT//{FAST32}_MAX +#define __INT_FAST64_MAX INT//{FAST64}_MAX +#define __UINT_FAST8_MAX UINT//{FAST8}_MAX +#define __UINT_FAST16_MAX UINT//{FAST16}_MAX +#define __UINT_FAST32_MAX UINT//{FAST32}_MAX +#define __UINT_FAST64_MAX UINT//{FAST64}_MAX + + + +#endif + diff --git a/include/bits/intconf.h b/include/bits/intconf.h deleted file mode 100644 index f76c999..0000000 --- a/include/bits/intconf.h +++ /dev/null @@ -1,47 +0,0 @@ -/** - * slibc — Yet another C library - * Copyright © 2015 Mattias Andrée (maandree@member.fsf.org) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#ifndef _BITS_INTCONF_H -#define _BITS_INTCONF_H - - -#define __MAX_TO_MIN(max) (-(max) - 1) -#define __CHAR_BIT 8 -#define __SHORT_BIT 16 -#define __INT_BIT 32 -#define __LONG_BIT 64 -#define __LONG_LONG_BIT 64 -#define __INT8 char -#define __INT16 short int -#define __INT32 int -#define __INT64 long int -#define __INT_FAST8 __INT8 -#define __INT_FAST16 __INT64 -#define __INT_FAST32 __INT64 -#define __INT_FAST64 __INT64 -#define __INT_FAST8_MAX INT8_MAX -#define __INT_FAST16_MAX INT64_MAX -#define __INT_FAST32_MAX INT64_MAX -#define __INT_FAST64_MAX INT64_MAX -#define __UINT_FAST8_MAX UINT8_MAX -#define __UINT_FAST16_MAX UINT64_MAX -#define __UINT_FAST32_MAX UINT64_MAX -#define __UINT_FAST64_MAX UINT64_MAX - - -#endif - -- cgit v1.2.3-70-g09d2