Skip to content

Make fixeddecimal_tiny/Makefile work partially on macOS #3290

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 29 additions & 18 deletions ffi/diplomat/c/examples/fixeddecimal_tiny/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,17 @@ FORCE:
ALL_HEADERS := $(wildcard ../../include/*.h)
ICU4X_NIGHTLY_TOOLCHAIN ?= "nightly-2022-04-18"

ifeq ($(shell uname -s), Darwin)
ICU4X_TINY_TARGET ?= "x86_64-apple-darwin"
LDFLAGS := -Wl,-dead_strip
# TODO: How to specify strip-all on darwin?
LDFLAGSX := -Wl,-dead_strip
else
ICU4X_TINY_TARGET ?= "x86_64-linux-unknown-gnu"
LDFLAGS := -Wl,--gc-sections
LDFLAGSX := -Wl,--gc-sections -Wl,--strip-all
endif

$(ALL_HEADERS):

GCC := gcc
Expand All @@ -18,17 +29,17 @@ LLD := lld-14
../../../../../target/debug/libicu_capi_staticlib.a: FORCE
cargo build -p icu_capi_staticlib --no-default-features --features buffer_provider,icu_capi/default_components

icu_capi_staticlib_tiny/target/x86_64-unknown-linux-gnu/debug/libicu_capi_staticlib_tiny.a: FORCE
icu_capi_staticlib_tiny/target/$(ICU4X_TINY_TARGET)/debug/libicu_capi_staticlib_tiny.a: FORCE
rustup toolchain install ${ICU4X_NIGHTLY_TOOLCHAIN}
rustup component add rust-src --toolchain ${ICU4X_NIGHTLY_TOOLCHAIN}
cd icu_capi_staticlib_tiny && \
RUSTFLAGS="-Clinker-plugin-lto -Clinker=$(CLANG) -Ccodegen-units=1 -Clink-arg=-flto -Cpanic=abort" cargo +${ICU4X_NIGHTLY_TOOLCHAIN} panic-abort-build --target x86_64-unknown-linux-gnu
RUSTFLAGS="-Clinker-plugin-lto -Clinker=$(CLANG) -Ccodegen-units=1 -Clink-arg=-flto -Cpanic=abort" cargo +${ICU4X_NIGHTLY_TOOLCHAIN} panic-abort-build --target $(ICU4X_TINY_TARGET)

icu_capi_staticlib_tiny/target/x86_64-unknown-linux-gnu/release-opt-size/libicu_capi_staticlib_tiny.a: FORCE
icu_capi_staticlib_tiny/target/$(ICU4X_TINY_TARGET)/release-opt-size/libicu_capi_staticlib_tiny.a: FORCE
rustup toolchain install ${ICU4X_NIGHTLY_TOOLCHAIN}
rustup component add rust-src --toolchain ${ICU4X_NIGHTLY_TOOLCHAIN}
cd icu_capi_staticlib_tiny && \
RUSTFLAGS="-Clinker-plugin-lto -Clinker=$(CLANG) -Ccodegen-units=1 -Clink-arg=-flto -Cpanic=abort" cargo +${ICU4X_NIGHTLY_TOOLCHAIN} panic-abort-build --target x86_64-unknown-linux-gnu --profile=release-opt-size
RUSTFLAGS="-Clinker-plugin-lto -Clinker=$(CLANG) -Ccodegen-units=1 -Clink-arg=-flto -Cpanic=abort" cargo +${ICU4X_NIGHTLY_TOOLCHAIN} panic-abort-build --target $(ICU4X_TINY_TARGET) --profile=release-opt-size

decimal-bn-en.postcard:
cargo run -p icu_datagen -- --locales en bn --keys "decimal/symbols@1" --format blob --out decimal-bn-en.postcard
Expand All @@ -38,36 +49,36 @@ decimal_bn_en.h: decimal-bn-en.postcard

# Naive target: no optimizations, full std
optim0.elf: ../../../../../target/debug/libicu_capi_staticlib.a $(ALL_HEADERS) test.c decimal_bn_en.h
$(GCC) test.c ../../../../../target/debug/libicu_capi_staticlib.a -ldl -lpthread -lm -g -o optim0.elf
$(GCC) --target=$(ICU4X_TINY_TARGET) test.c ../../../../../target/debug/libicu_capi_staticlib.a -ldl -lpthread -lm -g -o optim0.elf

# optim.elf: gcc with maximum link-time code stripping (gc-sections and strip-all)
optim1.elf: ../../../../../target/debug/libicu_capi_staticlib.a $(ALL_HEADERS) test.c decimal_bn_en.h
$(GCC) -fdata-sections -ffunction-sections test.c ../../../../../target/debug/libicu_capi_staticlib.a -ldl -lpthread -lm -g -o optim1.elf -Wl,--gc-sections -Wl,--strip-all
$(GCC) --target=$(ICU4X_TINY_TARGET) -fdata-sections -ffunction-sections test.c ../../../../../target/debug/libicu_capi_staticlib.a -ldl -lpthread -lm -g -o optim1.elf $(LDFLAGSX)

# optim2.elf: clang single-step with gc-sections
optim2.elf: icu_capi_staticlib_tiny/target/x86_64-unknown-linux-gnu/debug/libicu_capi_staticlib_tiny.a $(ALL_HEADERS) test.c decimal_bn_en.h
$(CLANG) -flto -fdata-sections -ffunction-sections test.c icu_capi_staticlib_tiny/target/x86_64-unknown-linux-gnu/debug/libicu_capi_staticlib_tiny.a -g -o optim2.elf -Wl,--gc-sections
optim2.elf: icu_capi_staticlib_tiny/target/$(ICU4X_TINY_TARGET)/debug/libicu_capi_staticlib_tiny.a $(ALL_HEADERS) test.c decimal_bn_en.h
$(CLANG) -flto --target=$(ICU4X_TINY_TARGET) -fdata-sections -ffunction-sections test.c icu_capi_staticlib_tiny/target/$(ICU4X_TINY_TARGET)/debug/libicu_capi_staticlib_tiny.a -g -o optim2.elf $(LDFLAGS)

optim3.o: $(ALL_HEADERS) test.c decimal_bn_en.h
$(CLANG) -c -flto=thin -fdata-sections -ffunction-sections --target=x86_64-unknown-linux-gnu test.c -g -o optim3.o
$(CLANG) -c -flto=thin -fdata-sections -ffunction-sections --target=$(ICU4X_TINY_TARGET) test.c -g -o optim3.o

# optim3.elf: clang two-step with lld, debug mode
optim3.elf: optim3.o icu_capi_staticlib_tiny/target/x86_64-unknown-linux-gnu/debug/libicu_capi_staticlib_tiny.a
$(CLANG) -flto=thin -fuse-ld=$(LLD) -L . -o optim3.elf optim3.o icu_capi_staticlib_tiny/target/x86_64-unknown-linux-gnu/debug/libicu_capi_staticlib_tiny.a -Wl,--gc-sections
optim3.elf: optim3.o icu_capi_staticlib_tiny/target/$(ICU4X_TINY_TARGET)/debug/libicu_capi_staticlib_tiny.a
$(CLANG) -flto=thin -fuse-ld=$(LLD) --target=$(ICU4X_TINY_TARGET) -L . -o optim3.elf optim3.o icu_capi_staticlib_tiny/target/$(ICU4X_TINY_TARGET)/debug/libicu_capi_staticlib_tiny.a $(LDFLAGS)

optim4.o: $(ALL_HEADERS) test.c decimal_bn_en.h
$(CLANG) -c -flto=thin -fdata-sections -ffunction-sections --target=x86_64-unknown-linux-gnu test.c -g -o optim4.o
$(CLANG) -c -flto=thin -fdata-sections -ffunction-sections --target=$(ICU4X_TINY_TARGET) test.c -g -o optim4.o

# optim4.elf: clang two-step with lld, release mode with debug symbols
optim4.elf: optim4.o icu_capi_staticlib_tiny/target/x86_64-unknown-linux-gnu/release-opt-size/libicu_capi_staticlib_tiny.a
$(CLANG) -flto=thin -fuse-ld=$(LLD) -L . -o optim4.elf optim4.o icu_capi_staticlib_tiny/target/x86_64-unknown-linux-gnu/release-opt-size/libicu_capi_staticlib_tiny.a -Wl,--gc-sections
optim4.elf: optim4.o icu_capi_staticlib_tiny/target/$(ICU4X_TINY_TARGET)/release-opt-size/libicu_capi_staticlib_tiny.a
$(CLANG) -flto=thin -fuse-ld=$(LLD) --target=$(ICU4X_TINY_TARGET) -L . -o optim4.elf optim4.o icu_capi_staticlib_tiny/target/$(ICU4X_TINY_TARGET)/release-opt-size/libicu_capi_staticlib_tiny.a $(LDFLAGS)

optim5.o: $(ALL_HEADERS) test.c decimal_bn_en.h
$(CLANG) -c -flto=thin -fdata-sections -ffunction-sections --target=x86_64-unknown-linux-gnu test.c -o optim5.o
$(CLANG) -c -flto=thin -fdata-sections -ffunction-sections --target=$(ICU4X_TINY_TARGET) test.c -o optim5.o

# optim5.elf: clang two-step with lld, release mode stripped of debug symbols
optim5.elf: optim5.o icu_capi_staticlib_tiny/target/x86_64-unknown-linux-gnu/release-opt-size/libicu_capi_staticlib_tiny.a
$(CLANG) -flto=thin -fuse-ld=$(LLD) -L . -o optim5.elf optim5.o icu_capi_staticlib_tiny/target/x86_64-unknown-linux-gnu/release-opt-size/libicu_capi_staticlib_tiny.a -Wl,--gc-sections -Wl,--strip-all
optim5.elf: optim5.o icu_capi_staticlib_tiny/target/$(ICU4X_TINY_TARGET)/release-opt-size/libicu_capi_staticlib_tiny.a
$(CLANG) -flto=thin -fuse-ld=$(LLD) --target=$(ICU4X_TINY_TARGET) -L . -o optim5.elf optim5.o icu_capi_staticlib_tiny/target/$(ICU4X_TINY_TARGET)/release-opt-size/libicu_capi_staticlib_tiny.a $(LDFLAGSX)

build: optim0.elf optim1.elf optim2.elf optim3.elf optim4.elf optim5.elf

Expand All @@ -80,5 +91,5 @@ test: build
./optim5.elf bn

clean:
git clean -xf *
git clean -xf -e _debug/ *
rm -f ../../../../../target/debug/libicu_capi_staticlib.a