Skip to content

Commit e519c41

Browse files
Benoit VeySeanTAllen
Benoit Vey
authored andcommitted
Link libponyrt correctly with --pic on Linux
The normal version of libponyrt was linked even when compiling with --pic. Now, libponyrt-pic is linked when appropriate. Closes ponylang#1359.
1 parent 038d6e2 commit e519c41

File tree

3 files changed

+19
-0
lines changed

3 files changed

+19
-0
lines changed

CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ All notable changes to the Pony compiler and standard library will be documented
66

77
### Fixed
88

9+
- Link the correct version of `libponyrt` when compiling with `--pic` on Linux (issue #1359)
10+
911
### Added
1012

1113
- Runtime function `pony_send_next`. This function can help optimise some message sending scenarios.

Makefile

+15
Original file line numberDiff line numberDiff line change
@@ -580,6 +580,9 @@ install: libponyc libponyrt ponyc
580580
@mkdir -p $(destdir)/lib
581581
@mkdir -p $(destdir)/include/pony/detail
582582
$(SILENT)cp $(PONY_BUILD_DIR)/libponyrt.a $(destdir)/lib
583+
ifeq ($(OSTYPE),linux)
584+
$(SILENT)cp $(PONY_BUILD_DIR)/libponyrt-pic.a $(destdir)/lib
585+
endif
583586
ifneq ($(wildcard $(PONY_BUILD_DIR)/libponyrt.bc),)
584587
$(SILENT)cp $(PONY_BUILD_DIR)/libponyrt.bc $(destdir)/lib
585588
endif
@@ -594,6 +597,9 @@ ifeq ($$(symlink),yes)
594597
@mkdir -p $(prefix)/include/pony/detail
595598
$(SILENT)ln $(symlink.flags) $(destdir)/bin/ponyc $(prefix)/bin/ponyc
596599
$(SILENT)ln $(symlink.flags) $(destdir)/lib/libponyrt.a $(prefix)/lib/libponyrt.a
600+
ifeq ($(OSTYPE),linux)
601+
$(SILENT)ln $(symlink.flags) $(destdir)/lib/libponyrt-pic.a $(prefix)/lib/libponyrt-pic.a
602+
endif
597603
ifneq ($(wildcard $(destdir)/lib/libponyrt.bc),)
598604
$(SILENT)ln $(symlink.flags) $(destdir)/lib/libponyrt.bc $(prefix)/lib/libponyrt.bc
599605
endif
@@ -610,6 +616,9 @@ uninstall:
610616
-$(SILENT)rm -rf $(destdir) 2>/dev/null ||:
611617
-$(SILENT)rm $(prefix)/bin/ponyc 2>/dev/null ||:
612618
-$(SILENT)rm $(prefix)/lib/libponyrt.a 2>/dev/null ||:
619+
ifeq ($(OSTYPE),linux)
620+
-$(SILENT)rm $(prefix)/lib/libponyrt-pic.a 2>/dev/null ||:
621+
endif
613622
ifneq ($(wildcard $(prefix)/lib/libponyrt.bc),)
614623
-$(SILENT)rm $(prefix)/lib/libponyrt.bc 2>/dev/null ||:
615624
endif
@@ -661,13 +670,19 @@ deploy: test
661670
@mkdir -p $(package)/usr/lib/pony/$(package_version)/lib
662671
$(SILENT)cp build/release/libponyc.a $(package)/usr/lib/pony/$(package_version)/lib
663672
$(SILENT)cp build/release/libponyrt.a $(package)/usr/lib/pony/$(package_version)/lib
673+
ifeq ($(OSTYPE),linux)
674+
$(SILENT)cp build/release/libponyrt-pic.a $(package)/usr/lib/pony/$(package_version)/lib
675+
endif
664676
ifneq ($(wildcard build/release/libponyrt.bc),)
665677
$(SILENT)cp build/release/libponyrt.bc $(package)/usr/lib/pony/$(package_version)/lib
666678
endif
667679
$(SILENT)cp build/release/ponyc $(package)/usr/lib/pony/$(package_version)/bin
668680
$(SILENT)cp src/libponyrt/pony.h $(package)/usr/lib/pony/$(package_version)/include
669681
$(SILENT)cp src/common/pony/detail/atomics.h $(package)/usr/lib/pony/$(package_version)/include/pony/detail
670682
$(SILENT)ln -s /usr/lib/pony/$(package_version)/lib/libponyrt.a $(package)/usr/lib/libponyrt.a
683+
ifeq ($(OSTYPE),linux)
684+
$(SILENT)ln -s /usr/lib/pony/$(package_version)/lib/libponyrt-pic.a $(package)/usr/lib/libponyrt-pic.a
685+
endif
671686
ifneq ($(wildcard /usr/lib/pony/$(package_version)/lib/libponyrt.bc),)
672687
$(SILENT)ln -s /usr/lib/pony/$(package_version)/lib/libponyrt.bc $(package)/usr/lib/libponyrt.bc
673688
endif

src/libponyc/codegen/genexe.c

+2
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,8 @@ static bool link_exe(compile_t* c, ast_t* program,
207207
const char* ponyrt = c->opt->runtimebc ? "" :
208208
#if defined(PLATFORM_IS_WINDOWS)
209209
"ponyrt.lib";
210+
#elif defined(PLATFORM_IS_LINUX)
211+
c->opt->pic ? "-lponyrt-pic" : "-lponyrt";
210212
#else
211213
"-lponyrt";
212214
#endif

0 commit comments

Comments
 (0)