mirror of
https://github.com/vishapoberon/compiler.git
synced 2026-04-06 19:12:25 +00:00
Fix dynamic linking on Mac. Static linking not working.
This commit is contained in:
parent
44d5e0f325
commit
8063b0c595
3 changed files with 28 additions and 10 deletions
|
|
@ -89,6 +89,23 @@ PROCEDURE LinkMain*(VAR moduleName: ARRAY OF CHAR; statically: BOOLEAN; addition
|
|||
Strings.Append(OPM.Model, cmd);
|
||||
Strings.Append(Configuration.libext, cmd);
|
||||
execute("C compile and link: ", cmd);
|
||||
|
||||
IF (Configuration.os = "darwin") & ~statically THEN
|
||||
(* Darwin requires an extra command to set the library directory into the binary *)
|
||||
cmd := "install_name_tool -change lib";
|
||||
Strings.Append(Configuration.name, cmd);
|
||||
Strings.Append('-O', cmd);
|
||||
Strings.Append(OPM.Model, cmd);
|
||||
Strings.Append('.dylib ', cmd);
|
||||
Strings.Append(OPM.InstallDir, cmd);
|
||||
Strings.Append('/lib/lib', cmd);
|
||||
Strings.Append(Configuration.name, cmd);
|
||||
Strings.Append('-O', cmd);
|
||||
Strings.Append(OPM.Model, cmd);
|
||||
Strings.Append('.dylib ', cmd);
|
||||
Strings.Append(moduleName, cmd);
|
||||
execute("Set library directory: ", cmd)
|
||||
END
|
||||
END LinkMain;
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -53,8 +53,7 @@ char *objflag = " -o ";
|
|||
char *linkflags = " -L\"";
|
||||
char *libext = "";
|
||||
char *oname = NULL; // From O_NAME env var if present, or O_NAME macro otherwise.
|
||||
|
||||
|
||||
char *dynext = ".so";
|
||||
char *dataModel = NULL;
|
||||
char *compiler = NULL;
|
||||
char *cc = NULL;
|
||||
|
|
@ -114,7 +113,7 @@ void determineOS() {
|
|||
else if (strncasecmp(sys.sysname, "linux", 5) == 0) {determineLinuxVariant();}
|
||||
else if (strncasecmp(sys.sysname, "freebsd", 5) == 0) {os = "freebsd"; bsd = 1;}
|
||||
else if (strncasecmp(sys.sysname, "openbsd", 5) == 0) {os = "openbsd"; bsd = 1;}
|
||||
else if (strncasecmp(sys.sysname, "darwin", 5) == 0) {os = "darwin"; staticlink = "";}
|
||||
else if (strncasecmp(sys.sysname, "darwin", 5) == 0) {os = "darwin"; staticlink = ""; dynext = ".dylib";}
|
||||
else {
|
||||
fprintf(stderr, "\n\n** Unrecognised utsname.sysname '%s' returned by uname().\n", sys.sysname);
|
||||
fprintf(stderr, "** Please add a test for this OS in src/buildtools/configure.c\n");
|
||||
|
|
@ -376,6 +375,7 @@ void writeMakeParameters() {
|
|||
fprintf(fd, "INSTALLDIR=%s\n", installdir);
|
||||
fprintf(fd, "PLATFORM=%s\n", platform);
|
||||
fprintf(fd, "BINEXT=%s\n", binext);
|
||||
fprintf(fd, "DYNEXT=%s\n", dynext);
|
||||
fprintf(fd, "COMPILE=%s\n", cc);
|
||||
fprintf(fd, "STATICLINK=%s\n", staticlink);
|
||||
fclose(fd);
|
||||
|
|
@ -396,6 +396,7 @@ void writeConfigurationMod() {
|
|||
fprintf(fd, " linkflags* = '%s';\n", linkflags);
|
||||
fprintf(fd, " libspec* = '%s';\n", libspec);
|
||||
fprintf(fd, " libext* = '%s';\n", libext);
|
||||
fprintf(fd, " os* = '%s';\n", os);
|
||||
fprintf(fd, " compiler* = '%s';\n", compiler);
|
||||
fprintf(fd, " compile* = '%s';\n", cc);
|
||||
fprintf(fd, " installdir* = '%s';\n", installdir);
|
||||
|
|
|
|||
|
|
@ -386,7 +386,7 @@ library:
|
|||
@make -f src/tools/make/oberon.mk -s O$(MODEL)library MODEL=$(MODEL)
|
||||
@printf '\nMaking lib$(ONAME)-O$(MODEL) .a and .so\n'
|
||||
ar rcs "$(BUILDDIR)/$(MODEL)/lib$(ONAME)-O$(MODEL).a" $(BUILDDIR)/$(MODEL)/*.o
|
||||
@cd $(BUILDDIR)/$(MODEL) && $(COMPILE) -shared -o lib$(ONAME)-O$(MODEL).so *.o
|
||||
@cd $(BUILDDIR)/$(MODEL) && $(COMPILE) -shared -o lib$(ONAME)-O$(MODEL)$(DYNEXT) *.o
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue