From de16d5cb87b584ec4e00e0a1673fa5040ceca7c5 Mon Sep 17 00:00:00 2001 From: Thomas Desveaux Date: Mon, 9 Apr 2018 17:14:38 +0200 Subject: [PATCH 1/3] Add VisibilityHidden to flags + implement for gcc --- src/_premake_init.lua | 1 + src/tools/gcc.lua | 1 + tests/tools/test_gcc.lua | 6 ++++++ 3 files changed, 8 insertions(+) diff --git a/src/_premake_init.lua b/src/_premake_init.lua index bcb445ed36..b696bc2d8b 100644 --- a/src/_premake_init.lua +++ b/src/_premake_init.lua @@ -535,6 +535,7 @@ "C90", -- DEPRECATED "C99", -- DEPRECATED "C11", -- DEPRECATED + "VisibilityHidden", }, aliases = { FatalWarnings = { "FatalWarnings", "FatalCompileWarnings", "FatalLinkWarnings" }, diff --git a/src/tools/gcc.lua b/src/tools/gcc.lua index aa89bd4c2f..63e50baf9b 100644 --- a/src/tools/gcc.lua +++ b/src/tools/gcc.lua @@ -145,6 +145,7 @@ }, flags = { NoBufferSecurityCheck = "-fno-stack-protector", + VisibilityHidden = { "-fvisibility=hidden", "-fvisibility-inlines-hidden" }, }, cppdialect = { ["C++98"] = "-std=c++98", diff --git a/tests/tools/test_gcc.lua b/tests/tools/test_gcc.lua index 4dfccfbae8..9ff83c8775 100644 --- a/tests/tools/test_gcc.lua +++ b/tests/tools/test_gcc.lua @@ -320,6 +320,12 @@ test.contains({ "-fno-stack-protector" }, gcc.getcxxflags(cfg)) end + function suite.cxxflags_onVisibilityHidden() + flags { "VisibilityHidden" } + prepare() + test.excludes({ "-fvisibility=hidden", "-fvisibility-inlines-hidden" }, gcc.getcflags(cfg)) + test.contains({ "-fvisibility=hidden", "-fvisibility-inlines-hidden" }, gcc.getcxxflags(cfg)) + end -- -- Check the basic translation of LDFLAGS for a Posix system. From 2d8271c1e270e8cb2388501df9f1ca4163342110 Mon Sep 17 00:00:00 2001 From: Thomas Desveaux Date: Tue, 10 Apr 2018 19:46:36 +0200 Subject: [PATCH 2/3] Pull VisibilityHidden from flags to an API + Add all possible values --- src/_premake_init.lua | 13 ++++++++++++- src/tools/gcc.lua | 7 ++++++- tests/tools/test_gcc.lua | 39 ++++++++++++++++++++++++++++++++------- 3 files changed, 50 insertions(+), 9 deletions(-) diff --git a/src/_premake_init.lua b/src/_premake_init.lua index b696bc2d8b..4e4b877ea2 100644 --- a/src/_premake_init.lua +++ b/src/_premake_init.lua @@ -535,7 +535,6 @@ "C90", -- DEPRECATED "C99", -- DEPRECATED "C11", -- DEPRECATED - "VisibilityHidden", }, aliases = { FatalWarnings = { "FatalWarnings", "FatalCompileWarnings", "FatalLinkWarnings" }, @@ -1337,6 +1336,18 @@ } } + api.register { + name = "visibility", + scope = "config", + kind = "string", + allowed = { + "Default", + "Hidden", + "Internal", + "Protected" + } + } + ----------------------------------------------------------------------------- -- -- Field name aliases for backward compatibility diff --git a/src/tools/gcc.lua b/src/tools/gcc.lua index 63e50baf9b..a6ae79a6be 100644 --- a/src/tools/gcc.lua +++ b/src/tools/gcc.lua @@ -145,7 +145,6 @@ }, flags = { NoBufferSecurityCheck = "-fno-stack-protector", - VisibilityHidden = { "-fvisibility=hidden", "-fvisibility-inlines-hidden" }, }, cppdialect = { ["C++98"] = "-std=c++98", @@ -165,6 +164,12 @@ }, rtti = { Off = "-fno-rtti" + }, + visibility = { + Default = "-fvisibility=default", + Hidden = { "-fvisibility=hidden", "-fvisibility-inlines-hidden" }, + Internal = "-fvisibility=internal", + Protected = "-fvisibility=protected", } } diff --git a/tests/tools/test_gcc.lua b/tests/tools/test_gcc.lua index 9ff83c8775..cf54a8199d 100644 --- a/tests/tools/test_gcc.lua +++ b/tests/tools/test_gcc.lua @@ -320,13 +320,6 @@ test.contains({ "-fno-stack-protector" }, gcc.getcxxflags(cfg)) end - function suite.cxxflags_onVisibilityHidden() - flags { "VisibilityHidden" } - prepare() - test.excludes({ "-fvisibility=hidden", "-fvisibility-inlines-hidden" }, gcc.getcflags(cfg)) - test.contains({ "-fvisibility=hidden", "-fvisibility-inlines-hidden" }, gcc.getcxxflags(cfg)) - end - -- -- Check the basic translation of LDFLAGS for a Posix system. -- @@ -794,3 +787,35 @@ test.contains({ "-std=gnu++17" }, gcc.getcxxflags(cfg)) test.contains({ }, gcc.getcflags(cfg)) end + +-- +-- Test visibility. +-- + + function suite.cxxflags_onVisibilityDefault() + visibility "Default" + prepare() + test.excludes({ "-fvisibility=default" }, gcc.getcflags(cfg)) + test.contains({ "-fvisibility=default" }, gcc.getcxxflags(cfg)) + end + + function suite.cxxflags_onVisibilityHidden() + visibility "Hidden" + prepare() + test.excludes({ "-fvisibility=hidden", "-fvisibility-inlines-hidden" }, gcc.getcflags(cfg)) + test.contains({ "-fvisibility=hidden", "-fvisibility-inlines-hidden" }, gcc.getcxxflags(cfg)) + end + + function suite.cxxflags_onVisibilityInternal() + visibility "Internal" + prepare() + test.excludes({ "-fvisibility=internal" }, gcc.getcflags(cfg)) + test.contains({ "-fvisibility=internal" }, gcc.getcxxflags(cfg)) + end + + function suite.cxxflags_onVisibilityProtected() + visibility "Protected" + prepare() + test.excludes({ "-fvisibility=protected" }, gcc.getcflags(cfg)) + test.contains({ "-fvisibility=protected" }, gcc.getcxxflags(cfg)) + end From 66e357687139e6afec1fb5b9bc5390ef404704a6 Mon Sep 17 00:00:00 2001 From: thomas desveaux Date: Thu, 12 Apr 2018 19:30:32 +0200 Subject: [PATCH 3/3] Remove visibility-inlines-hidden from visibility api --- src/tools/gcc.lua | 2 +- tests/tools/test_gcc.lua | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/tools/gcc.lua b/src/tools/gcc.lua index 07f15e0a3b..7152476732 100644 --- a/src/tools/gcc.lua +++ b/src/tools/gcc.lua @@ -171,7 +171,7 @@ }, visibility = { Default = "-fvisibility=default", - Hidden = { "-fvisibility=hidden", "-fvisibility-inlines-hidden" }, + Hidden = "-fvisibility=hidden", Internal = "-fvisibility=internal", Protected = "-fvisibility=protected", } diff --git a/tests/tools/test_gcc.lua b/tests/tools/test_gcc.lua index 3066308e0b..4a08230afa 100644 --- a/tests/tools/test_gcc.lua +++ b/tests/tools/test_gcc.lua @@ -822,8 +822,8 @@ function suite.cxxflags_onVisibilityHidden() visibility "Hidden" prepare() - test.excludes({ "-fvisibility=hidden", "-fvisibility-inlines-hidden" }, gcc.getcflags(cfg)) - test.contains({ "-fvisibility=hidden", "-fvisibility-inlines-hidden" }, gcc.getcxxflags(cfg)) + test.excludes({ "-fvisibility=hidden" }, gcc.getcflags(cfg)) + test.contains({ "-fvisibility=hidden" }, gcc.getcxxflags(cfg)) end function suite.cxxflags_onVisibilityInternal()