build: use c11 everywhere

And improve the makefiles
This commit is contained in:
ObserverOfTime 2024-02-27 21:56:24 +02:00 committed by Amaan Qureshi
parent e75a36232b
commit 799833f9cf
11 changed files with 41 additions and 40 deletions

View file

@ -18,15 +18,19 @@ endif
OBJ := $(SRC:.c=.o)
# define default flags, and override to append mandatory flags
override CFLAGS := -O3 -std=gnu11 -fPIC -fvisibility=hidden -Wall -Wextra -Wshadow -pedantic $(CFLAGS)
ARFLAGS := rcs
CFLAGS := -O3 -Wall -Wextra -Wshadow -pedantic
override CFLAGS += -std=c11 -fPIC -fvisibility=hidden
override CFLAGS += -Ilib/src -Ilib/src/wasm -Ilib/include
# ABI versioning
SONAME_MAJOR := 0
SONAME_MINOR := 0
SONAME_MAJOR := $(word 1,$(subst ., ,$(VERSION)))
SONAME_MINOR := $(word 2,$(subst ., ,$(VERSION)))
# OS-specific bits
ifeq ($(shell uname),Darwin)
ifeq ($(OS),Windows_NT)
$(error "Windows is not supported")
else ifeq ($(shell uname),Darwin)
SOEXT = dylib
SOEXTVER_MAJOR = $(SONAME_MAJOR).dylib
SOEXTVER = $(SONAME_MAJOR).$(SONAME_MINOR).dylib
@ -37,43 +41,38 @@ else
SOEXTVER = so.$(SONAME_MAJOR).$(SONAME_MINOR)
LINKSHARED += -shared -Wl,-soname,libtree-sitter.so.$(SONAME_MAJOR)
endif
ifneq (,$(filter $(shell uname),FreeBSD NetBSD DragonFly))
ifneq ($(filter $(shell uname),FreeBSD NetBSD DragonFly),)
PCLIBDIR := $(PREFIX)/libdata/pkgconfig
endif
all: libtree-sitter.a libtree-sitter.$(SOEXTVER)
all: libtree-sitter.a libtree-sitter.$(SOEXT) tree-sitter.pc
libtree-sitter.a: $(OBJ)
$(AR) rcs $@ $^
$(AR) $(ARFLAGS) $@ $^
libtree-sitter.$(SOEXTVER): $(OBJ)
libtree-sitter.$(SOEXT): $(OBJ)
$(CC) $(LDFLAGS) $(LINKSHARED) $^ $(LDLIBS) -o $@
ln -sf $@ libtree-sitter.$(SOEXT)
ln -sf $@ libtree-sitter.$(SOEXTVER_MAJOR)
ifneq ($(STRIP),)
$(STRIP) $@
endif
install: all
sed -e 's|@LIBDIR@|$(LIBDIR)|;s|@INCLUDEDIR@|$(INCLUDEDIR)|;s|@VERSION@|$(VERSION)|' \
-e 's|=$(PREFIX)|=$${prefix}|' \
-e 's|@PREFIX@|$(PREFIX)|' \
tree-sitter.pc.in > tree-sitter.pc
install -d '$(DESTDIR)$(LIBDIR)'
install -m644 libtree-sitter.a '$(DESTDIR)$(LIBDIR)'/
install -m755 libtree-sitter.$(SOEXTVER) '$(DESTDIR)$(LIBDIR)'/
ln -sf libtree-sitter.$(SOEXTVER) '$(DESTDIR)$(LIBDIR)'/libtree-sitter.$(SOEXTVER_MAJOR)
ln -sf libtree-sitter.$(SOEXTVER) '$(DESTDIR)$(LIBDIR)'/libtree-sitter.$(SOEXT)
install -d '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter
install -m644 lib/include/tree_sitter/api.h '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter/
install -d '$(DESTDIR)$(PCLIBDIR)'
install -m644 tree-sitter.pc '$(DESTDIR)$(PCLIBDIR)'/
tree-sitter.pc: tree-sitter.pc.in
sed -e 's|@VERSION@|$(VERSION)|' \
-e 's|@LIBDIR@|$(LIBDIR)|' \
-e 's|@INCLUDEDIR@|$(INCLUDEDIR)|' \
-e 's|=$(PREFIX)|=$${prefix}|' \
-e 's|@PREFIX@|$(PREFIX)|' $< > $@
clean:
rm -f lib/src/*.o libtree-sitter.a libtree-sitter.$(SOEXT) libtree-sitter.$(SOEXTVER_MAJOR) libtree-sitter.$(SOEXTVER)
$(RM) $(OBJ) tree-sitter.pc libtree-sitter.a libtree-sitter.$(SOEXT)
install: all
install -Dm644 lib/include/tree_sitter/api.h '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter/api.h
install -Dm644 tree-sitter.pc '$(DESTDIR)$(PCLIBDIR)'/tree-sitter.pc
install -Dm644 libtree-sitter.a '$(DESTDIR)$(LIBDIR)'/libtree-sitter.a
install -m755 libtree-sitter.$(SOEXT) '$(DESTDIR)$(LIBDIR)'/libtree-sitter.$(SOEXTVER)
ln -sf libtree-sitter.$(SOEXTVER) '$(DESTDIR)$(LIBDIR)'/libtree-sitter.$(SOEXTVER_MAJOR)
ln -sf libtree-sitter.$(SOEXTVER_MAJOR) '$(DESTDIR)$(LIBDIR)'/libtree-sitter.$(SOEXT)
.PHONY: all install clean

View file

@ -11,6 +11,7 @@ let package = Package(
name: "TreeSitter",
targets: ["TreeSitter"]),
],
cLanguageStandard: .c11,
targets: [
.target(name: "TreeSitter",
path: "lib",

View file

@ -8,7 +8,7 @@ pub fn build(b: *std.Build) void {
});
lib.linkLibC();
lib.addCSourceFile(.{ .file = .{ .path = "lib/src/lib.c" }, .flags = &.{} });
lib.addCSourceFile(.{ .file = .{ .path = "lib/src/lib.c" }, .flags = &.{"-std=c11"} });
lib.addIncludePath(.{ .path = "lib/include" });
lib.addIncludePath(.{ .path = "lib/src" });

View file

@ -587,7 +587,7 @@ impl Loader {
if let Some(scanner_path) = scanner_path.as_ref() {
if scanner_path.extension() == Some("c".as_ref()) {
command.arg("-xc").arg("-std=c99").arg(scanner_path);
command.arg("-xc").arg("-std=c11").arg(scanner_path);
} else {
eprintln!("Warning: Using a C++ scanner is now deprecated. Please migrate your scanner code to C, as C++ support will be removed in the near future.");
command.arg(scanner_path);

View file

@ -30,7 +30,7 @@ OBJS := $(patsubst %.c,%.o,$(wildcard $(SRC_DIR)/*.c))
# flags
ARFLAGS := rcs
override CFLAGS += -I$(SRC_DIR) -std=c11
override CFLAGS += -I$(SRC_DIR) -std=c11 -fPIC
# OS-specific bits
ifeq ($(shell uname),Darwin)
@ -60,14 +60,11 @@ endif
all: lib$(LANGUAGE_NAME).a lib$(LANGUAGE_NAME).$(SOEXT) $(LANGUAGE_NAME).pc
$(SRC_DIR)/%.o: $(SRC_DIR)/%.c
$(CC) -c $^ -o $@
lib$(LANGUAGE_NAME).a: $(OBJS)
$(AR) $(ARFLAGS) $@ $^
lib$(LANGUAGE_NAME).$(SOEXT): $(OBJS)
$(CC) -fPIC $(LDFLAGS) $(LINKSHARED) $^ $(LDLIBS) -o $@
$(CC) $(LDFLAGS) $(LINKSHARED) $^ $(LDLIBS) -o $@
$(LANGUAGE_NAME).pc:
sed > $@ bindings/c/$(LANGUAGE_NAME).pc.in \

View file

@ -47,7 +47,7 @@ fn main() {
}
config
.flag_if_supported("-std=c99")
.flag_if_supported("-std=c11")
.flag_if_supported("-fvisibility=hidden")
.flag_if_supported("-Wshadow")
.flag_if_supported("-Wno-unused-parameter")

View file

@ -1,4 +1,4 @@
-std=c99
-std=c11
-Isrc/wasm
-Iinclude
-D TREE_SITTER_FEATURE_WASM
-D TREE_SITTER_FEATURE_WASM

View file

@ -1,3 +1,5 @@
#define _POSIX_C_SOURCE 200112L
#include <time.h>
#include <assert.h>
#include <stdio.h>

View file

@ -1,3 +1,5 @@
#define _POSIX_C_SOURCE 200112L
#include "tree_sitter/api.h"
#include "./array.h"
#include "./get_changed_ranges.h"

View file

@ -42,7 +42,7 @@ for lang in ${languages[@]}; do
$CXX $CXXFLAGS -g -O1 "-I${lang_dir}/src" -c "${lang_scanner}.cc" -o "${lang_scanner}.o"
objects+=("${lang_scanner}.o")
elif [ -e "${lang_scanner}.c" ]; then
$CC $CFLAGS -std=c99 -g -O1 "-I${lang_dir}/src" -c "${lang_scanner}.c" -o "${lang_scanner}.o"
$CC $CFLAGS -std=c11 -g -O1 "-I${lang_dir}/src" -c "${lang_scanner}.c" -o "${lang_scanner}.o"
objects+=("${lang_scanner}.o")
fi

View file

@ -122,7 +122,7 @@ $emcc \
-s EXPORTED_RUNTIME_METHODS=$runtime_methods \
$emscripten_flags \
-fno-exceptions \
-std=c99 \
-std=c11 \
-D 'fprintf(...)=' \
-D NDEBUG= \
-I ${src_dir} \