[R-SIG-Mac] Help on reducing size of shared libraries on MacOS on CRAN

Gilberto Camara g||berto@c@m@r@@|npe @end|ng |rom gm@||@com
Sat Mar 18 19:02:08 CET 2023

Dear R-SIG-MAC members

We are the developers of R package sits and would like to ask for your help in solving a problem with library size on R macOS binaries. 

Before submission to CRAN, version 1.3.0 of sits (https://cran.r-project.org/web/packages/sits/index.html) has been tested in various environments, including Ubuntu, Fedora, CRAN winbuilder (all flavors). We have tested sits-1.3.0 on r-release-mac-x86_64 and r-release-macos-arm64 with the following configurations:

- r-release-macos-x86_64: R 4.2.2, MacMini 3.2GHz, 6 cores, 32 MB RAM, macOS Ventura 3.2.1, Apple clang version 14.0.3 (clang-1403.

- r-release-macos-arm64: R 4.2.2, MacBookAir, chip ARM M1, 8 cores, 16 MB RAM, macOS Monterrey 12.6,  Apple clang version 14.0.0 (clang-1400.0.29.201). 

In our configuration of r-release-macos-x86_64, the installed size is 3.8 MB, and the libs directory size is 436 KB. On r-release-macos-arm64, the installed size is 5.4 MB and the libs directory size is 1.6 MB. 

The current CRAN check on sits version 1.3.0 reports a NOTE on r-release-macos-arm64 and r-oldrel-macos-arm64, with an installation size of 7.3Mb with the libs directory size reported as 4.8Mb. CRAN is using Apple clang version 13.0.0 ((clang-1300.0.29.30) on r-release-macos-arm64 and Apple clang version 12.0.0 (clang-1200.0.32.29) on r-oldrel-macos-arm64. 

There is a 3.2 MB difference in size between what CRAN reports and what we obtain in our tests for r-release-macos-arm64. We would appreciate your guidance on how to address this problem and, if possible, point to a reliable way to reduce package size in macOS. 

Note that our package links to RCpp and RCppArmadillo.

Our current Makevars configuration is given below
# suggestion by Dirk Eddelbuettel
SHLIB_CXXLDFLAGS = -Wlto,-S -shared
SHLIB_CXX11LDFLAGS = -Wlto,-S -shared
SHLIB_CXX14LDFLAGS = -Wlto,-S -shared
SHLIB_FCLDFLAGS = -Wlto,-S -shared
SHLIB_LDFLAGS = -Wlto,-S -shared

## suggestion by Dirk Eddelbuettel

strippedLib: $(SHLIB)
		if test -e "/usr/bin/strip" & test -e "/bin/uname" & [[ `uname` == "Linux" ]] ; then /usr/bin/strip --strip-debug $(SHLIB); fi

	rm -f $(OBJECTS)

.phony: strippedLib clean

Any help would be much appreciated. 

Best regards
Prof Dr Gilberto Camara
Senior Researcher
National Institute for Space Research (INPE), Brazil

More information about the R-SIG-Mac mailing list