diff --git a/doc/xschem_man/xschem_man.html b/doc/xschem_man/xschem_man.html index 8350a83d..26a717e6 100644 --- a/doc/xschem_man/xschem_man.html +++ b/doc/xschem_man/xschem_man.html @@ -53,6 +53,7 @@
  • Backannotation of Ngspice simulation data into xschem
  • Use symgen.awk to create symbols from 'djboxsym' compatible text files
  • [Video] Install Xschem, Xschem_sky130, skywater-pdk and ngspice: step by step instructions
  • +
  • [Video] Second version, Install Xschem and open_pdks for skywater 130 design
  • [Video] Editing commands and simulation
  • [Video] Editing component attributes
  • [Video] Copying objects across xschem windows
  • diff --git a/scconfig/src/default/deps_default.c b/scconfig/src/default/deps_default.c index ad9a2acb..15bdd909 100644 --- a/scconfig/src/default/deps_default.c +++ b/scconfig/src/default/deps_default.c @@ -50,6 +50,11 @@ void deps_default_init(void) dep_add("cc/ldflags_dll", find_ldflags_dll); dep_add("cc/ldflags_so", find_ldflags_so); dep_add("cc/func_attr/unused/*", find_fattr_unused); + dep_add("cc/func_attr/noreturn/*", find_fattr_noreturn); + dep_add("cc/func_attr/deprecated/*", find_fattr_deprecated); + dep_add("cc/func_attr/weak/*", find_fattr_weak); + dep_add("cc/func_attr/visibility_hidden/*", find_fattr_visibility_hidden); + dep_add("cc/func_attr/visibility_default/*", find_fattr_visibility_default); dep_add("cc/declspec/dllimport/*", find_declspec_dllimport); dep_add("cc/declspec/dllexport/*", find_declspec_dllexport); dep_add("cc/argmachine/*", find_cc_argmachine); diff --git a/scconfig/src/default/find.h b/scconfig/src/default/find.h index 05013d59..49adf960 100644 --- a/scconfig/src/default/find.h +++ b/scconfig/src/default/find.h @@ -11,6 +11,11 @@ int find_funcmacro(const char *name, int logdepth, int fatal); int find_constructor(const char *name, int logdepth, int fatal); int find_destructor(const char *name, int logdepth, int fatal); int find_fattr_unused(const char *name, int logdepth, int fatal); +int find_fattr_noreturn(const char *name, int logdepth, int fatal); +int find_fattr_deprecated(const char *name, int logdepth, int fatal); +int find_fattr_weak(const char *name, int logdepth, int fatal); +int find_fattr_visibility_hidden(const char *name, int logdepth, int fatal); +int find_fattr_visibility_default(const char *name, int logdepth, int fatal); int find_declspec_dllimport(const char *name, int logdepth, int fatal); int find_declspec_dllexport(const char *name, int logdepth, int fatal); int find_rdynamic(const char *name, int logdepth, int fatal); diff --git a/scconfig/src/default/find_cc.c b/scconfig/src/default/find_cc.c index 83adf40d..5522c18c 100644 --- a/scconfig/src/default/find_cc.c +++ b/scconfig/src/default/find_cc.c @@ -399,27 +399,29 @@ int find_destructor(const char *name, int logdepth, int fatal) return 1; } -static int test_fattr(const char *name, int logdepth, int fatal, const char *fattr) +static int test_fattr(const char *name, int logdepth, int fatal, + const char *key, const char *fattr, const char *f_spec, int call_testfunc) { char path[64]; - char test_c[256]; + char test_c[512]; const char *test_c_tmp = NL "#include " - NL "static void test1() __attribute__ ((%s));" - NL "static void test1()" + NL "%s void test1() __attribute__ ((%s));" + NL "%s void test1()" NL "{" NL " puts(\"OK\");" NL "}" NL "int main() {" - NL " puts(\"OK\");" + NL " %s;" NL " return 0;" NL "}" NL ; require("cc/cc", logdepth, fatal); - sprintf(test_c, test_c_tmp, fattr); - sprintf(path, "cc/func_attr/%s/presents", fattr); + sprintf(test_c, test_c_tmp, f_spec, fattr, f_spec, + (call_testfunc ? "test1()" : "puts(\"OK\")")); + sprintf(path, "cc/func_attr/%s/presents", key); report("Checking for function attribute %s... ", fattr); logprintf(logdepth, "test_fattr: trying to find %s...\n", fattr); @@ -436,7 +438,34 @@ static int test_fattr(const char *name, int logdepth, int fatal, const char *fat int find_fattr_unused(const char *name, int logdepth, int fatal) { - return test_fattr(name, logdepth, fatal, "unused"); + return test_fattr(name, logdepth, fatal, "unused", "unused", "static", 0); +} + +int find_fattr_noreturn(const char *name, int logdepth, int fatal) +{ + return test_fattr(name, logdepth, fatal, "noreturn", "noreturn", "", 1); +} + +int find_fattr_deprecated(const char *name, int logdepth, int fatal) +{ + return test_fattr(name, logdepth, fatal, "deprecated", "depreated", "", 1); +} + +int find_fattr_weak(const char *name, int logdepth, int fatal) +{ + return test_fattr(name, logdepth, fatal, "weak", "weak", "", 1); +} + +int find_fattr_visibility_hidden(const char *name, int logdepth, int fatal) +{ + return test_fattr(name, logdepth, fatal, "visibility_hidden", + "visibility(\"hidden\")", "", 0); +} + +int find_fattr_visibility_default(const char *name, int logdepth, int fatal) +{ + return test_fattr(name, logdepth, fatal, "visibility_default", + "visibility(\"default\")", "", 1); } static int test_declspec(const char *name, int logdepth, int fatal, const char *dspec)