add -dead_strip_dylibs by default to the macOS linker

Under macOS, to reduce dependency chains, we remove functions and
data that are unreachable by the entry point or exported symbols.
In particular, the linker is run with "-dead_strip" and with
"-dead_strip_dylibs".
This commit is contained in:
Landon Curt Noll
2023-08-14 04:11:33 -07:00
parent ee900ec6ec
commit e0df1646fc
12 changed files with 51 additions and 26 deletions

View File

@@ -89,7 +89,8 @@ The following are the changes from calc version 2.14.3.1 to date:
Under macOS, to reduce dependency chains, we remove functions and Under macOS, to reduce dependency chains, we remove functions and
data that are unreachable by the entry point or exported symbols. data that are unreachable by the entry point or exported symbols.
In particular, the linker is run with "-dead_strip". In particular, the linker is run with "-dead_strip" and with
"-dead_strip_dylibs".
The following are the changes from calc version 2.14.2.1 to 2.14.3.0: The following are the changes from calc version 2.14.2.1 to 2.14.3.0:

View File

@@ -165,14 +165,7 @@ LIBCUSTCALC_SHLIB= -dynamiclib -undefined dynamic_lookup \
# To reduce dependency chains under macOS, we remove functions and # To reduce dependency chains under macOS, we remove functions and
# data that are unreachable by the entry point or exported symbols. # data that are unreachable by the entry point or exported symbols.
# #
LDFLAGS+= -Wl,-dead_strip LDFLAGS+= -Wl,-dead_strip -Wl,-dead_strip_dylibs
# NOTE: Do not use: LDFLAGS+= -Wl,-dead_strip_dylibs
#
# This option should not be used when linking against a dylib which is
# required at runtime for some indirect reason such as the dylib has an
# important initializer. The libcalc and libcustcalc have
# important initializers, and so this option should not be used.
# static library option # static library option
# #

View File

@@ -91,6 +91,16 @@ custom(char *name, int count, VALUE **vals)
} }
} }
/*
* validate custtbl_allowed value
*/
if (custtbl_allowed == 0) {
fprintf(stderr,
"%sCalc was built with custom functions enabled but custtbl_allowed is 0\n",
(conf->tab_ok ? "\t" : ""));
return error_value(E_NO_CUSTOM);
}
/* /*
* no such custom function * no such custom function
*/ */
@@ -107,6 +117,15 @@ custom(char *name, int count, VALUE **vals)
(conf->tab_ok ? "\t" : ""), name, count, (conf->tab_ok ? "\t" : ""), name, count,
(vals == NULL) ? "NULL" : "non-NULL"); (vals == NULL) ? "NULL" : "non-NULL");
} }
/*
* validate custtbl_allowed value
*/
if (custtbl_allowed != 0) {
fprintf(stderr,
"%sCalc was built with custom functions disabled but custtbl_allowed is != 0\n",
(conf->tab_ok ? "\t" : ""));
}
return error_value(E_NO_CUSTOM); return error_value(E_NO_CUSTOM);
#endif /* CUSTOM */ #endif /* CUSTOM */

View File

@@ -73,6 +73,7 @@ struct custom {
* *
* These are the required interfaces. The dummy.c stubs these interfaces too. * These are the required interfaces. The dummy.c stubs these interfaces too.
*/ */
EXTERN int custtbl_allowed; /* 1 ==> CUSTOM defined, 0 ==> CUSTOM undefined */
E_FUNC VALUE custom(char*, int, VALUE**); /* master custom interface */ E_FUNC VALUE custom(char*, int, VALUE**); /* master custom interface */
EXTERN BOOL allow_custom; /* TRUE => custom builtins allowed */ EXTERN BOOL allow_custom; /* TRUE => custom builtins allowed */
E_FUNC void showcustom(void); /* print custom functions */ E_FUNC void showcustom(void); /* print custom functions */

View File

@@ -1,7 +1,7 @@
/* /*
* c_argv - a custom function display info about its args * c_argv - a custom function display info about its args
* *
* Copyright (C) 1999-2006,2021 Landon Curt Noll * Copyright (C) 1999-2006,2021,2023 Landon Curt Noll
* *
* Calc is open software; you can redistribute it and/or modify it under * Calc is open software; you can redistribute it and/or modify it under
* the terms of the version 2.1 of the GNU Lesser General Public License * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -32,7 +32,7 @@
#if defined(CUSTOM) #if defined(CUSTOM)
int c_argv_allowed = 1; /* CUSTOM defined */ int c_argv_allowed = 1; /* CUSTOM defined */
#else /* CUSTOM */ #else /* CUSTOM */
int c_argv_allowed = 0; /* CUSTOM defined */ int c_argv_allowed = 0; /* CUSTOM undefined */
#endif /* CUSTOM */ #endif /* CUSTOM */

View File

@@ -1,7 +1,7 @@
/* /*
* c_devnull - a custom function that does nothing * c_devnull - a custom function that does nothing
* *
* Copyright (C) 1999-2004,2021 Landon Curt Noll * Copyright (C) 1999-2004,2021,2023 Landon Curt Noll
* *
* Calc is open software; you can redistribute it and/or modify it under * Calc is open software; you can redistribute it and/or modify it under
* the terms of the version 2.1 of the GNU Lesser General Public License * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -32,7 +32,7 @@
#if defined(CUSTOM) #if defined(CUSTOM)
int c_devnull_allowed = 1; /* CUSTOM defined */ int c_devnull_allowed = 1; /* CUSTOM defined */
#else /* CUSTOM */ #else /* CUSTOM */
int c_devnull_allowed = 0; /* CUSTOM defined */ int c_devnull_allowed = 0; /* CUSTOM undefined */
#endif /* CUSTOM */ #endif /* CUSTOM */

View File

@@ -1,7 +1,7 @@
/* /*
* c_help - custom help function * c_help - custom help function
* *
* Copyright (C) 1999-2004,2021,2022 Landon Curt Noll * Copyright (C) 1999-2004,2021-2023 Landon Curt Noll
* *
* Calc is open software; you can redistribute it and/or modify it under * Calc is open software; you can redistribute it and/or modify it under
* the terms of the version 2.1 of the GNU Lesser General Public License * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -32,7 +32,7 @@
#if defined(CUSTOM) #if defined(CUSTOM)
int c_help_allowed = 1; /* CUSTOM defined */ int c_help_allowed = 1; /* CUSTOM defined */
#else /* CUSTOM */ #else /* CUSTOM */
int c_help_allowed = 0; /* CUSTOM defined */ int c_help_allowed = 0; /* CUSTOM undefined */
#endif /* CUSTOM */ #endif /* CUSTOM */

View File

@@ -1,7 +1,7 @@
/* /*
* c_pmodm127 - calculate q mod 2^(2^127-1) * c_pmodm127 - calculate q mod 2^(2^127-1)
* *
* Copyright (C) 2004-2007,2021,2022 Landon Curt Noll * Copyright (C) 2004-2007,2021-2023 Landon Curt Noll
* *
* Calc is open software; you can redistribute it and/or modify it under * Calc is open software; you can redistribute it and/or modify it under
* the terms of the version 2.1 of the GNU Lesser General Public License * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -31,7 +31,7 @@
#if defined(CUSTOM) #if defined(CUSTOM)
int c_pmodm127_allowed = 1; /* CUSTOM defined */ int c_pmodm127_allowed = 1; /* CUSTOM defined */
#else /* CUSTOM */ #else /* CUSTOM */
int c_pmodm127_allowed = 0; /* CUSTOM defined */ int c_pmodm127_allowed = 0; /* CUSTOM undefined */
#endif /* CUSTOM */ #endif /* CUSTOM */

View File

@@ -1,7 +1,7 @@
/* /*
* c_pzasusb8 - print numerator as a string of USB8s * c_pzasusb8 - print numerator as a string of USB8s
* *
* Copyright (C) 1999-2004,2021,2022 Ernest Bowen * Copyright (C) 1999-2004,2021-2023 Ernest Bowen
* *
* Calc is open software; you can redistribute it and/or modify it under * Calc is open software; you can redistribute it and/or modify it under
* the terms of the version 2.1 of the GNU Lesser General Public License * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -31,7 +31,7 @@
#if defined(CUSTOM) #if defined(CUSTOM)
int c_pzasusb8_allowed = 1; /* CUSTOM defined */ int c_pzasusb8_allowed = 1; /* CUSTOM defined */
#else /* CUSTOM */ #else /* CUSTOM */
int c_pzasusb8_allowed = 0; /* CUSTOM defined */ int c_pzasusb8_allowed = 0; /* CUSTOM undefined */
#endif /* CUSTOM */ #endif /* CUSTOM */

View File

@@ -1,7 +1,7 @@
/* /*
* c_register - set or print a custom register value * c_register - set or print a custom register value
* *
* Copyright (C) 2007,2021,2022 Landon Curt Noll * Copyright (C) 2007,2021-2023 Landon Curt Noll
* *
* Calc is open software; you can redistribute it and/or modify it under * Calc is open software; you can redistribute it and/or modify it under
* the terms of the version 2.1 of the GNU Lesser General Public License * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -32,7 +32,7 @@
#if defined(CUSTOM) #if defined(CUSTOM)
int c_register_allowed = 1; /* CUSTOM defined */ int c_register_allowed = 1; /* CUSTOM defined */
#else /* CUSTOM */ #else /* CUSTOM */
int c_register_allowed = 0; /* CUSTOM defined */ int c_register_allowed = 0; /* CUSTOM undefined */
#endif /* CUSTOM */ #endif /* CUSTOM */

View File

@@ -1,7 +1,7 @@
/* /*
* c_sysinfo - names and values of selected #defines * c_sysinfo - names and values of selected #defines
* *
* Copyright (C) 1999-2007,2021,2022 Landon Curt Noll * Copyright (C) 1999-2007,2021-2023 Landon Curt Noll
* *
* Calc is open software; you can redistribute it and/or modify it under * Calc is open software; you can redistribute it and/or modify it under
* the terms of the version 2.1 of the GNU Lesser General Public License * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -32,7 +32,7 @@
#if defined(CUSTOM) #if defined(CUSTOM)
int c_sysinfo_allowed = 1; /* CUSTOM defined */ int c_sysinfo_allowed = 1; /* CUSTOM defined */
#else /* CUSTOM */ #else /* CUSTOM */
int c_sysinfo_allowed = 0; /* CUSTOM defined */ int c_sysinfo_allowed = 0; /* CUSTOM undefined */
#endif /* CUSTOM */ #endif /* CUSTOM */

View File

@@ -1,7 +1,7 @@
/* /*
* custtbl - custom interface table * custtbl - custom interface table
* *
* Copyright (C) 1999-2007,2021 Landon Curt Noll * Copyright (C) 1999-2007,2021,2023 Landon Curt Noll
* *
* Calc is open software; you can redistribute it and/or modify it under * Calc is open software; you can redistribute it and/or modify it under
* the terms of the version 2.1 of the GNU Lesser General Public License * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -24,6 +24,18 @@
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/ * Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*/ */
/*
* ISO C requires a translation unit to contain at least one declaration,
* so we declare a global variable whose value is based on if CUSTOM is defined.
*/
#if defined(CUSTOM)
int custtbl_allowed = 1; /* CUSTOM defined */
#else /* CUSTOM */
int custtbl_allowed = 0; /* CUSTOM undefined */
#endif /* CUSTOM */
#include <unistd.h> #include <unistd.h>
#include "../have_const.h" #include "../have_const.h"
@@ -35,8 +47,7 @@
/* /*
* NOTE: See the file CUSTOM for instructions on how to add * NOTE: See the file HOW_TO_ADD for instructions on how to add custom functions.
* custom functions.
*/ */