@@ -416,6 +416,9 @@ include shared.mak
416416# Define LINK_FUZZ_PROGRAMS if you want `make all` to also build the fuzz test
417417# programs in oss-fuzz/.
418418#
419+ # Define INCLUDE_LIBGIT_RS if you want `make all` and `make test` to build and
420+ # test the Rust crates in contrib/libgit-rs/ and contrib/libgit-rs/libgit-sys/.
421+ #
419422# === Optional library: libintl ===
420423#
421424# Define NO_GETTEXT if you don't want Git output to be translated.
@@ -657,6 +660,8 @@ CURL_CONFIG = curl-config
657660GCOV = gcov
658661STRIP = strip
659662SPATCH = spatch
663+ LD = ld
664+ OBJCOPY = objcopy
660665
661666export TCL_PATH TCLTK_PATH
662667
@@ -983,6 +988,8 @@ LIB_OBJS += combine-diff.o
983988LIB_OBJS += commit-graph.o
984989LIB_OBJS += commit-reach.o
985990LIB_OBJS += commit.o
991+ LIB_OBJS += common-exit.o
992+ LIB_OBJS += common-init.o
986993LIB_OBJS += compat/nonblock.o
987994LIB_OBJS += compat/obstack.o
988995LIB_OBJS += compat/terminal.o
@@ -2245,6 +2252,13 @@ ifdef WITH_BREAKING_CHANGES
22452252 BASIC_CFLAGS += -DWITH_BREAKING_CHANGES
22462253endif
22472254
2255+ ifdef INCLUDE_LIBGIT_RS
2256+ # Enable symbol hiding in contrib/libgit-rs/libgit-sys/libgitpub.a
2257+ # without making us rebuild the whole tree every time we run a Rust
2258+ # build.
2259+ BASIC_CFLAGS += -fvisibility=hidden
2260+ endif
2261+
22482262ifeq ($(TCLTK_PATH ) ,)
22492263NO_TCLTK = NoThanks
22502264endif
@@ -2740,6 +2754,7 @@ OBJECTS += $(REFTABLE_OBJS) $(REFTABLE_TEST_OBJS)
27402754OBJECTS += $(UNIT_TEST_OBJS )
27412755OBJECTS += $(CLAR_TEST_OBJS )
27422756OBJECTS += $(patsubst % ,$(UNIT_TEST_DIR ) /% .o,$(UNIT_TEST_PROGRAMS ) )
2757+ OBJECTS += contrib/libgit-rs/libgit-sys/public_symbol_export.o
27432758
27442759ifndef NO_CURL
27452760 OBJECTS += http.o http-walker.o remote-curl.o
@@ -3735,6 +3750,10 @@ clean: profile-clean coverage-clean cocciclean
37353750 $(RM ) $(htmldocs ) .tar.gz $(manpages ) .tar.gz
37363751 $(MAKE ) -C Documentation/ clean
37373752 $(RM ) Documentation/GIT-EXCLUDED-PROGRAMS
3753+ $(RM ) -r contrib/libgit-rs/target contrib/libgit-rs/libgit-sys/target
3754+ $(RM ) -r contrib/libgit-rs/libgit-sys/partial_symbol_export.o
3755+ $(RM ) -r contrib/libgit-rs/libgit-sys/hidden_symbol_export.o
3756+ $(RM ) -r contrib/libgit-rs/libgit-sys/libgitpub.a
37383757ifndef NO_PERL
37393758 $(RM) -r perl/build/
37403759endif
@@ -3896,3 +3915,28 @@ $(CLAR_TEST_PROG): $(UNIT_TEST_DIR)/clar.suite $(CLAR_TEST_OBJS) $(GITLIBS) GIT-
38963915build-unit-tests : $(UNIT_TEST_PROGS ) $(CLAR_TEST_PROG )
38973916unit-tests : $(UNIT_TEST_PROGS ) $(CLAR_TEST_PROG ) t/helper/test-tool$X
38983917 $(MAKE ) -C t/ unit-tests
3918+
3919+ .PHONY : libgitrs-sys
3920+ libgitrs-sys :
3921+ $(QUIET ) (\
3922+ cd contrib/libgit-rs/libgit-sys && \
3923+ cargo build \
3924+ )
3925+ .PHONY : libgitrs
3926+ libgitrs :
3927+ $(QUIET ) (\
3928+ cd contrib/libgit-rs && \
3929+ cargo build \
3930+ )
3931+ ifdef INCLUDE_LIBGIT_RS
3932+ all :: libgitrs
3933+ endif
3934+
3935+ contrib/libgit-rs/libgit-sys/partial_symbol_export.o : contrib/libgit-rs/libgit-sys/public_symbol_export.o libgit.a reftable/libreftable.a xdiff/lib.a
3936+ $(LD ) -r $^ -o $@
3937+
3938+ contrib/libgit-rs/libgit-sys/hidden_symbol_export.o : contrib/libgit-rs/libgit-sys/partial_symbol_export.o
3939+ $(OBJCOPY ) --localize-hidden $^ $@
3940+
3941+ contrib/libgit-rs/libgit-sys/libgitpub.a : contrib/libgit-rs/libgit-sys/hidden_symbol_export.o
3942+ $(AR ) $(ARFLAGS ) $@ $^
0 commit comments