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)