Makefile: introduce infrastructure to build internal Rust library
Introduce infrastructure to build the internal Rust library. This mirrors the infrastructure we have added to Meson in the preceding commit. Developers can enable the infrastructure by passing the new `WITH_RUST` build toggle. Inspired-by: Ezekiel Newren <ezekielnewren@gmail.com> Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>next
parent
f2301be076
commit
e30c081c6a
|
@ -1,4 +1,6 @@
|
||||||
/fuzz_corpora
|
/fuzz_corpora
|
||||||
|
/target/
|
||||||
|
/Cargo.lock
|
||||||
/GIT-BUILD-DIR
|
/GIT-BUILD-DIR
|
||||||
/GIT-BUILD-OPTIONS
|
/GIT-BUILD-OPTIONS
|
||||||
/GIT-CFLAGS
|
/GIT-CFLAGS
|
||||||
|
|
37
Makefile
37
Makefile
|
@ -483,6 +483,14 @@ include shared.mak
|
||||||
# Define LIBPCREDIR=/foo/bar if your PCRE header and library files are
|
# Define LIBPCREDIR=/foo/bar if your PCRE header and library files are
|
||||||
# in /foo/bar/include and /foo/bar/lib directories.
|
# in /foo/bar/include and /foo/bar/lib directories.
|
||||||
#
|
#
|
||||||
|
# == Optional Rust support ==
|
||||||
|
#
|
||||||
|
# Define WITH_RUST if you want to include features and subsystems written in
|
||||||
|
# Rust into Git. For now, Rust is still an optional feature of the build
|
||||||
|
# process. With Git 3.0 though, Rust will always be enabled.
|
||||||
|
#
|
||||||
|
# Building Rust code requires Cargo.
|
||||||
|
#
|
||||||
# == SHA-1 and SHA-256 defines ==
|
# == SHA-1 and SHA-256 defines ==
|
||||||
#
|
#
|
||||||
# === SHA-1 backend ===
|
# === SHA-1 backend ===
|
||||||
|
@ -683,6 +691,7 @@ OBJECTS =
|
||||||
OTHER_PROGRAMS =
|
OTHER_PROGRAMS =
|
||||||
PROGRAM_OBJS =
|
PROGRAM_OBJS =
|
||||||
PROGRAMS =
|
PROGRAMS =
|
||||||
|
RUST_SOURCES =
|
||||||
EXCLUDED_PROGRAMS =
|
EXCLUDED_PROGRAMS =
|
||||||
SCRIPT_PERL =
|
SCRIPT_PERL =
|
||||||
SCRIPT_PYTHON =
|
SCRIPT_PYTHON =
|
||||||
|
@ -918,6 +927,11 @@ TEST_SHELL_PATH = $(SHELL_PATH)
|
||||||
LIB_FILE = libgit.a
|
LIB_FILE = libgit.a
|
||||||
XDIFF_LIB = xdiff/lib.a
|
XDIFF_LIB = xdiff/lib.a
|
||||||
REFTABLE_LIB = reftable/libreftable.a
|
REFTABLE_LIB = reftable/libreftable.a
|
||||||
|
ifdef DEBUG
|
||||||
|
RUST_LIB = target/debug/libgitcore.a
|
||||||
|
else
|
||||||
|
RUST_LIB = target/release/libgitcore.a
|
||||||
|
endif
|
||||||
|
|
||||||
# xdiff and reftable libs may in turn depend on what is in libgit.a
|
# xdiff and reftable libs may in turn depend on what is in libgit.a
|
||||||
GITLIBS = common-main.o $(LIB_FILE) $(XDIFF_LIB) $(REFTABLE_LIB) $(LIB_FILE)
|
GITLIBS = common-main.o $(LIB_FILE) $(XDIFF_LIB) $(REFTABLE_LIB) $(LIB_FILE)
|
||||||
|
@ -943,6 +957,15 @@ BASIC_LDFLAGS =
|
||||||
ARFLAGS = rcs
|
ARFLAGS = rcs
|
||||||
PTHREAD_CFLAGS =
|
PTHREAD_CFLAGS =
|
||||||
|
|
||||||
|
# Rust flags
|
||||||
|
CARGO_ARGS =
|
||||||
|
ifndef V
|
||||||
|
CARGO_ARGS += --quiet
|
||||||
|
endif
|
||||||
|
ifndef DEBUG
|
||||||
|
CARGO_ARGS += --release
|
||||||
|
endif
|
||||||
|
|
||||||
# For the 'sparse' target
|
# For the 'sparse' target
|
||||||
SPARSE_FLAGS ?= -std=gnu99 -D__STDC_NO_VLA__
|
SPARSE_FLAGS ?= -std=gnu99 -D__STDC_NO_VLA__
|
||||||
SP_EXTRA_FLAGS =
|
SP_EXTRA_FLAGS =
|
||||||
|
@ -1475,6 +1498,8 @@ CLAR_TEST_OBJS += $(UNIT_TEST_DIR)/unit-test.o
|
||||||
|
|
||||||
UNIT_TEST_OBJS += $(UNIT_TEST_DIR)/test-lib.o
|
UNIT_TEST_OBJS += $(UNIT_TEST_DIR)/test-lib.o
|
||||||
|
|
||||||
|
RUST_SOURCES += src/lib.rs
|
||||||
|
|
||||||
GIT-VERSION-FILE: FORCE
|
GIT-VERSION-FILE: FORCE
|
||||||
@OLD=$$(cat $@ 2>/dev/null || :) && \
|
@OLD=$$(cat $@ 2>/dev/null || :) && \
|
||||||
$(call version_gen,"$(shell pwd)",GIT-VERSION-FILE.in,$@) && \
|
$(call version_gen,"$(shell pwd)",GIT-VERSION-FILE.in,$@) && \
|
||||||
|
@ -1504,6 +1529,11 @@ endif
|
||||||
ALL_CFLAGS = $(DEVELOPER_CFLAGS) $(CPPFLAGS) $(CFLAGS) $(CFLAGS_APPEND)
|
ALL_CFLAGS = $(DEVELOPER_CFLAGS) $(CPPFLAGS) $(CFLAGS) $(CFLAGS_APPEND)
|
||||||
ALL_LDFLAGS = $(LDFLAGS) $(LDFLAGS_APPEND)
|
ALL_LDFLAGS = $(LDFLAGS) $(LDFLAGS_APPEND)
|
||||||
|
|
||||||
|
ifdef WITH_RUST
|
||||||
|
BASIC_CFLAGS += -DWITH_RUST
|
||||||
|
GITLIBS += $(RUST_LIB)
|
||||||
|
endif
|
||||||
|
|
||||||
ifdef SANITIZE
|
ifdef SANITIZE
|
||||||
SANITIZERS := $(foreach flag,$(subst $(comma),$(space),$(SANITIZE)),$(flag))
|
SANITIZERS := $(foreach flag,$(subst $(comma),$(space),$(SANITIZE)),$(flag))
|
||||||
BASIC_CFLAGS += -fsanitize=$(SANITIZE) -fno-sanitize-recover=$(SANITIZE)
|
BASIC_CFLAGS += -fsanitize=$(SANITIZE) -fno-sanitize-recover=$(SANITIZE)
|
||||||
|
@ -2918,6 +2948,12 @@ scalar$X: scalar.o GIT-LDFLAGS $(GITLIBS)
|
||||||
$(LIB_FILE): $(LIB_OBJS)
|
$(LIB_FILE): $(LIB_OBJS)
|
||||||
$(QUIET_AR)$(RM) $@ && $(AR) $(ARFLAGS) $@ $^
|
$(QUIET_AR)$(RM) $@ && $(AR) $(ARFLAGS) $@ $^
|
||||||
|
|
||||||
|
$(RUST_LIB): Cargo.toml $(RUST_SOURCES)
|
||||||
|
$(QUIET_CARGO)cargo build $(CARGO_ARGS)
|
||||||
|
|
||||||
|
.PHONY: rust
|
||||||
|
rust: $(RUST_LIB)
|
||||||
|
|
||||||
$(XDIFF_LIB): $(XDIFF_OBJS)
|
$(XDIFF_LIB): $(XDIFF_OBJS)
|
||||||
$(QUIET_AR)$(RM) $@ && $(AR) $(ARFLAGS) $@ $^
|
$(QUIET_AR)$(RM) $@ && $(AR) $(ARFLAGS) $@ $^
|
||||||
|
|
||||||
|
@ -3768,6 +3804,7 @@ clean: profile-clean coverage-clean cocciclean
|
||||||
$(RM) $(FUZZ_PROGRAMS)
|
$(RM) $(FUZZ_PROGRAMS)
|
||||||
$(RM) $(SP_OBJ)
|
$(RM) $(SP_OBJ)
|
||||||
$(RM) $(HCC)
|
$(RM) $(HCC)
|
||||||
|
$(RM) -r Cargo.lock target/
|
||||||
$(RM) version-def.h
|
$(RM) version-def.h
|
||||||
$(RM) -r $(dep_dirs) $(compdb_dir) compile_commands.json
|
$(RM) -r $(dep_dirs) $(compdb_dir) compile_commands.json
|
||||||
$(RM) $(test_bindir_programs)
|
$(RM) $(test_bindir_programs)
|
||||||
|
|
|
@ -56,6 +56,7 @@ ifndef V
|
||||||
QUIET_MKDIR_P_PARENT = @echo ' ' MKDIR -p $(@D);
|
QUIET_MKDIR_P_PARENT = @echo ' ' MKDIR -p $(@D);
|
||||||
|
|
||||||
## Used in "Makefile"
|
## Used in "Makefile"
|
||||||
|
QUIET_CARGO = @echo ' ' CARGO $@;
|
||||||
QUIET_CC = @echo ' ' CC $@;
|
QUIET_CC = @echo ' ' CC $@;
|
||||||
QUIET_AR = @echo ' ' AR $@;
|
QUIET_AR = @echo ' ' AR $@;
|
||||||
QUIET_LINK = @echo ' ' LINK $@;
|
QUIET_LINK = @echo ' ' LINK $@;
|
||||||
|
|
Loading…
Reference in New Issue