@@ -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.
@@ -664,6 +667,8 @@ CURL_CONFIG = curl-config
664667GCOV  = gcov
665668STRIP  = strip
666669SPATCH  = spatch
670+ LD  = ld
671+ OBJCOPY  = objcopy
667672
668673export  TCL_PATH  TCLTK_PATH 
669674
@@ -990,6 +995,8 @@ LIB_OBJS += combine-diff.o
990995LIB_OBJS  += commit-graph.o
991996LIB_OBJS  += commit-reach.o
992997LIB_OBJS  += commit.o
998+ LIB_OBJS  += common-exit.o
999+ LIB_OBJS  += common-init.o
9931000LIB_OBJS  += compat/nonblock.o
9941001LIB_OBJS  += compat/obstack.o
9951002LIB_OBJS  += compat/terminal.o
@@ -2240,6 +2247,13 @@ ifdef WITH_BREAKING_CHANGES
22402247	BASIC_CFLAGS += -DWITH_BREAKING_CHANGES
22412248endif 
22422249
2250+ ifdef  INCLUDE_LIBGIT_RS 
2251+ 	#  Enable symbol hiding in contrib/libgit-rs/libgit-sys/libgitpub.a
2252+ 	#  without making us rebuild the whole tree every time we run a Rust
2253+ 	#  build.
2254+ 	BASIC_CFLAGS += -fvisibility=hidden
2255+ endif 
2256+ 
22432257ifeq  ($(TCLTK_PATH ) ,)
22442258NO_TCLTK  = NoThanks
22452259endif 
@@ -2737,6 +2751,7 @@ OBJECTS += $(REFTABLE_OBJS) $(REFTABLE_TEST_OBJS)
27372751OBJECTS  += $(UNIT_TEST_OBJS ) 
27382752OBJECTS  += $(CLAR_TEST_OBJS ) 
27392753OBJECTS  += $(patsubst  % ,$(UNIT_TEST_DIR ) /% .o,$(UNIT_TEST_PROGRAMS ) ) 
2754+ OBJECTS  += contrib/libgit-rs/libgit-sys/public_symbol_export.o
27402755
27412756ifndef  NO_CURL 
27422757	OBJECTS += http.o http-walker.o remote-curl.o
@@ -3732,6 +3747,10 @@ clean: profile-clean coverage-clean cocciclean
37323747	$(RM )  $(htmldocs ) .tar.gz $(manpages ) .tar.gz
37333748	$(MAKE )  -C Documentation/ clean
37343749	$(RM )  Documentation/GIT-EXCLUDED-PROGRAMS
3750+ 	$(RM )  -r contrib/libgit-rs/target contrib/libgit-rs/libgit-sys/target
3751+ 	$(RM )  -r contrib/libgit-rs/libgit-sys/partial_symbol_export.o
3752+ 	$(RM )  -r contrib/libgit-rs/libgit-sys/hidden_symbol_export.o
3753+ 	$(RM )  -r contrib/libgit-rs/libgit-sys/libgitpub.a
37353754ifndef  NO_PERL 
37363755	$(RM) -r perl/build/
37373756endif 
@@ -3893,3 +3912,28 @@ $(CLAR_TEST_PROG): $(UNIT_TEST_DIR)/clar.suite $(CLAR_TEST_OBJS) $(GITLIBS) GIT-
38933912build-unit-tests : $(UNIT_TEST_PROGS )  $(CLAR_TEST_PROG ) 
38943913unit-tests : $(UNIT_TEST_PROGS )  $(CLAR_TEST_PROG )  t/helper/test-tool$X
38953914	$(MAKE )  -C t/ unit-tests
3915+ 
3916+ .PHONY : libgitrs-sys
3917+ libgitrs-sys :
3918+ 	$(QUIET ) (\
3919+ 		cd  contrib/libgit-rs/libgit-sys &&  \ 
3920+ 		cargo build \ 
3921+ 	)
3922+ .PHONY : libgitrs
3923+ libgitrs :
3924+ 	$(QUIET ) (\
3925+ 		cd  contrib/libgit-rs &&  \ 
3926+ 		cargo build \ 
3927+ 	)
3928+ ifdef  INCLUDE_LIBGIT_RS 
3929+ all :: libgitrs
3930+ endif 
3931+ 
3932+ 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
3933+ 	$(LD )  -r $^  -o $@ 
3934+ 
3935+ contrib/libgit-rs/libgit-sys/hidden_symbol_export.o : contrib/libgit-rs/libgit-sys/partial_symbol_export.o
3936+ 	$(OBJCOPY )  --localize-hidden $^  $@ 
3937+ 
3938+ contrib/libgit-rs/libgit-sys/libgitpub.a : contrib/libgit-rs/libgit-sys/hidden_symbol_export.o
3939+ 	$(AR )  $(ARFLAGS )  $@  $^ 
0 commit comments