2009-05-12 21:44:45 +00:00
|
|
|
--
|
|
|
|
-- tests/test_gcc.lua
|
|
|
|
-- Automated test suite for the GCC toolset interface.
|
2013-05-16 15:40:47 +00:00
|
|
|
-- Copyright (c) 2009-2013 Jason Perkins and the Premake project
|
2009-05-12 21:44:45 +00:00
|
|
|
--
|
|
|
|
|
2017-04-25 05:44:13 +00:00
|
|
|
local p = premake
|
2013-09-11 14:57:44 +00:00
|
|
|
local suite = test.declare("tools_gcc")
|
2012-02-17 00:51:14 +00:00
|
|
|
|
2017-04-25 05:44:13 +00:00
|
|
|
local gcc = p.tools.gcc
|
|
|
|
local project = p.project
|
2012-02-17 00:51:14 +00:00
|
|
|
|
|
|
|
|
|
|
|
--
|
|
|
|
-- Setup/teardown
|
|
|
|
--
|
|
|
|
|
2015-08-28 20:16:14 +00:00
|
|
|
local wks, prj, cfg
|
2009-05-12 21:44:45 +00:00
|
|
|
|
2009-12-31 22:46:45 +00:00
|
|
|
function suite.setup()
|
2015-08-28 20:16:14 +00:00
|
|
|
wks, prj = test.createWorkspace()
|
2012-02-17 00:51:14 +00:00
|
|
|
system "Linux"
|
|
|
|
end
|
|
|
|
|
|
|
|
local function prepare()
|
2013-11-14 13:52:55 +00:00
|
|
|
cfg = test.getconfig(prj, "Debug")
|
2009-05-12 21:44:45 +00:00
|
|
|
end
|
|
|
|
|
2009-12-31 22:46:45 +00:00
|
|
|
|
2012-09-27 16:18:03 +00:00
|
|
|
--
|
|
|
|
-- Check the selection of tools based on the target system.
|
|
|
|
--
|
|
|
|
|
|
|
|
function suite.tools_onDefaults()
|
|
|
|
prepare()
|
|
|
|
test.isnil(gcc.gettoolname(cfg, "cc"))
|
|
|
|
test.isnil(gcc.gettoolname(cfg, "cxx"))
|
|
|
|
test.isnil(gcc.gettoolname(cfg, "ar"))
|
2013-09-26 23:37:24 +00:00
|
|
|
test.isequal("windres", gcc.gettoolname(cfg, "rc"))
|
2012-09-27 16:18:03 +00:00
|
|
|
end
|
|
|
|
|
2015-03-10 11:45:41 +00:00
|
|
|
function suite.tools_withPrefix()
|
|
|
|
gccprefix "test-prefix-"
|
|
|
|
prepare()
|
|
|
|
test.isequal("test-prefix-gcc", gcc.gettoolname(cfg, "cc"))
|
|
|
|
test.isequal("test-prefix-g++", gcc.gettoolname(cfg, "cxx"))
|
|
|
|
test.isequal("test-prefix-ar", gcc.gettoolname(cfg, "ar"))
|
|
|
|
test.isequal("test-prefix-windres", gcc.gettoolname(cfg, "rc"))
|
|
|
|
end
|
|
|
|
|
2012-09-27 16:18:03 +00:00
|
|
|
|
2011-02-10 17:24:51 +00:00
|
|
|
--
|
2012-02-17 00:51:14 +00:00
|
|
|
-- By default, the -MMD -MP are used to generate dependencies.
|
2011-02-10 17:24:51 +00:00
|
|
|
--
|
|
|
|
|
2012-02-17 00:51:14 +00:00
|
|
|
function suite.cppflags_defaultWithMMD()
|
|
|
|
prepare()
|
2014-09-17 23:19:47 +00:00
|
|
|
test.contains({"-MMD", "-MP"}, gcc.getcppflags(cfg))
|
2009-05-12 21:44:45 +00:00
|
|
|
end
|
|
|
|
|
2012-02-17 00:51:14 +00:00
|
|
|
|
|
|
|
--
|
|
|
|
-- Haiku OS doesn't support the -MP flag yet (that's weird, isn't it?)
|
|
|
|
--
|
|
|
|
|
|
|
|
function suite.cppflagsExcludeMP_onHaiku()
|
|
|
|
system "Haiku"
|
|
|
|
prepare()
|
2014-09-17 23:19:47 +00:00
|
|
|
test.excludes({ "-MP" }, gcc.getcppflags(cfg))
|
2011-02-10 17:24:51 +00:00
|
|
|
end
|
2009-12-31 22:46:45 +00:00
|
|
|
|
2011-02-10 17:24:51 +00:00
|
|
|
|
|
|
|
--
|
2012-02-17 00:51:14 +00:00
|
|
|
-- Check the translation of CFLAGS.
|
2011-02-10 17:24:51 +00:00
|
|
|
--
|
|
|
|
|
2013-09-27 18:49:21 +00:00
|
|
|
function suite.cflags_onExtraWarnings()
|
2013-09-29 16:39:07 +00:00
|
|
|
warnings "extra"
|
2013-09-27 18:25:10 +00:00
|
|
|
prepare()
|
2014-09-17 23:19:47 +00:00
|
|
|
test.contains({ "-Wall -Wextra" }, gcc.getcflags(cfg))
|
2013-09-27 18:25:10 +00:00
|
|
|
end
|
|
|
|
|
2012-02-17 00:51:14 +00:00
|
|
|
function suite.cflags_onFatalWarnings()
|
|
|
|
flags { "FatalWarnings" }
|
|
|
|
prepare()
|
2014-09-17 23:19:47 +00:00
|
|
|
test.contains({ "-Werror" }, gcc.getcflags(cfg))
|
2012-02-17 00:51:14 +00:00
|
|
|
end
|
|
|
|
|
2015-03-10 10:59:28 +00:00
|
|
|
function suite.cflags_onSpecificWarnings()
|
|
|
|
enablewarnings { "enable" }
|
|
|
|
disablewarnings { "disable" }
|
|
|
|
fatalwarnings { "fatal" }
|
|
|
|
prepare()
|
|
|
|
test.contains({ "-Wenable", "-Wno-disable", "-Werror=fatal" }, gcc.getcflags(cfg))
|
|
|
|
end
|
|
|
|
|
2013-09-27 18:49:21 +00:00
|
|
|
function suite.cflags_onFloastFast()
|
|
|
|
floatingpoint "Fast"
|
2012-07-30 11:12:01 +00:00
|
|
|
prepare()
|
2014-09-17 23:19:47 +00:00
|
|
|
test.contains({ "-ffast-math" }, gcc.getcflags(cfg))
|
2013-09-27 18:49:21 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
function suite.cflags_onFloastStrict()
|
|
|
|
floatingpoint "Strict"
|
|
|
|
prepare()
|
2014-09-17 23:19:47 +00:00
|
|
|
test.contains({ "-ffloat-store" }, gcc.getcflags(cfg))
|
2012-07-30 11:12:01 +00:00
|
|
|
end
|
2009-09-29 20:28:13 +00:00
|
|
|
|
2012-07-30 12:52:35 +00:00
|
|
|
function suite.cflags_onNoWarnings()
|
2013-09-29 16:39:07 +00:00
|
|
|
warnings "Off"
|
2012-07-30 11:12:01 +00:00
|
|
|
prepare()
|
2014-09-17 23:19:47 +00:00
|
|
|
test.contains({ "-w" }, gcc.getcflags(cfg))
|
2012-07-30 11:12:01 +00:00
|
|
|
end
|
2013-09-27 18:49:21 +00:00
|
|
|
|
|
|
|
function suite.cflags_onSSE()
|
|
|
|
vectorextensions "SSE"
|
|
|
|
prepare()
|
2014-09-17 23:19:47 +00:00
|
|
|
test.contains({ "-msse" }, gcc.getcflags(cfg))
|
2013-09-27 18:49:21 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
function suite.cflags_onSSE2()
|
|
|
|
vectorextensions "SSE2"
|
|
|
|
prepare()
|
2014-09-17 23:19:47 +00:00
|
|
|
test.contains({ "-msse2" }, gcc.getcflags(cfg))
|
2013-09-27 18:49:21 +00:00
|
|
|
end
|
|
|
|
|
2015-03-26 12:17:13 +00:00
|
|
|
function suite.cflags_onAVX()
|
|
|
|
vectorextensions "AVX"
|
|
|
|
prepare()
|
|
|
|
test.contains({ "-mavx" }, gcc.getcflags(cfg))
|
|
|
|
end
|
|
|
|
|
2015-03-26 16:24:11 +00:00
|
|
|
function suite.cflags_onAVX2()
|
2015-03-26 12:17:13 +00:00
|
|
|
vectorextensions "AVX2"
|
|
|
|
prepare()
|
|
|
|
test.contains({ "-mavx2" }, gcc.getcflags(cfg))
|
|
|
|
end
|
|
|
|
|
2013-10-16 17:47:09 +00:00
|
|
|
|
2015-03-10 10:41:44 +00:00
|
|
|
--
|
|
|
|
-- Check the defines and undefines.
|
|
|
|
--
|
|
|
|
|
|
|
|
function suite.defines()
|
|
|
|
defines "DEF"
|
|
|
|
prepare()
|
|
|
|
test.contains({ "-DDEF" }, gcc.getdefines(cfg.defines))
|
|
|
|
end
|
|
|
|
|
|
|
|
function suite.undefines()
|
|
|
|
undefines "UNDEF"
|
|
|
|
prepare()
|
|
|
|
test.contains({ "-UUNDEF" }, gcc.getundefines(cfg.undefines))
|
|
|
|
end
|
|
|
|
|
|
|
|
|
2013-10-16 17:47:09 +00:00
|
|
|
--
|
|
|
|
-- Check the optimization flags.
|
|
|
|
--
|
|
|
|
|
2013-10-09 01:05:17 +00:00
|
|
|
function suite.cflags_onNoOptimize()
|
|
|
|
optimize "Off"
|
|
|
|
prepare()
|
2014-09-17 23:19:47 +00:00
|
|
|
test.contains({ "-O0" }, gcc.getcflags(cfg))
|
2013-10-09 01:05:17 +00:00
|
|
|
end
|
2013-09-27 18:49:21 +00:00
|
|
|
|
2013-10-16 17:47:09 +00:00
|
|
|
function suite.cflags_onOptimize()
|
|
|
|
optimize "On"
|
|
|
|
prepare()
|
2014-09-17 23:19:47 +00:00
|
|
|
test.contains({ "-O2" }, gcc.getcflags(cfg))
|
2013-10-16 17:47:09 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
function suite.cflags_onOptimizeSize()
|
|
|
|
optimize "Size"
|
|
|
|
prepare()
|
2014-09-17 23:19:47 +00:00
|
|
|
test.contains({ "-Os" }, gcc.getcflags(cfg))
|
2013-10-16 17:47:09 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
function suite.cflags_onOptimizeSpeed()
|
|
|
|
optimize "Speed"
|
|
|
|
prepare()
|
2014-09-17 23:19:47 +00:00
|
|
|
test.contains({ "-O3" }, gcc.getcflags(cfg))
|
2013-10-16 17:47:09 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
function suite.cflags_onOptimizeFull()
|
|
|
|
optimize "Full"
|
|
|
|
prepare()
|
2014-09-17 23:19:47 +00:00
|
|
|
test.contains({ "-O3" }, gcc.getcflags(cfg))
|
2013-10-16 17:47:09 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
function suite.cflags_onOptimizeDebug()
|
|
|
|
optimize "Debug"
|
|
|
|
prepare()
|
2014-09-17 23:19:47 +00:00
|
|
|
test.contains({ "-Og" }, gcc.getcflags(cfg))
|
2013-10-16 17:47:09 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
|
2016-07-19 06:29:26 +00:00
|
|
|
--
|
|
|
|
-- Check the translation of symbols.
|
|
|
|
--
|
|
|
|
|
|
|
|
function suite.cflags_onDefaultSymbols()
|
|
|
|
prepare()
|
|
|
|
test.excludes({ "-g" }, gcc.getcflags(cfg))
|
|
|
|
end
|
|
|
|
|
|
|
|
function suite.cflags_onNoSymbols()
|
|
|
|
symbols "Off"
|
|
|
|
prepare()
|
|
|
|
test.excludes({ "-g" }, gcc.getcflags(cfg))
|
|
|
|
end
|
|
|
|
|
|
|
|
function suite.cflags_onSymbols()
|
|
|
|
symbols "On"
|
|
|
|
prepare()
|
|
|
|
test.contains({ "-g" }, gcc.getcflags(cfg))
|
|
|
|
end
|
|
|
|
|
|
|
|
|
2012-02-17 00:51:14 +00:00
|
|
|
--
|
|
|
|
-- Check the translation of CXXFLAGS.
|
|
|
|
--
|
2009-12-31 22:46:45 +00:00
|
|
|
|
2012-02-17 00:51:14 +00:00
|
|
|
function suite.cflags_onNoExceptions()
|
2015-06-23 20:53:10 +00:00
|
|
|
exceptionhandling "Off"
|
2012-02-17 00:51:14 +00:00
|
|
|
prepare()
|
2014-09-17 23:19:47 +00:00
|
|
|
test.contains({ "-fno-exceptions" }, gcc.getcxxflags(cfg))
|
2009-09-29 20:28:13 +00:00
|
|
|
end
|
|
|
|
|
2013-08-15 22:22:23 +00:00
|
|
|
function suite.cflags_onNoBufferSecurityCheck()
|
|
|
|
flags { "NoBufferSecurityCheck" }
|
|
|
|
prepare()
|
2014-09-17 23:19:47 +00:00
|
|
|
test.contains({ "-fno-stack-protector" }, gcc.getcxxflags(cfg))
|
2013-08-15 22:22:23 +00:00
|
|
|
end
|
2009-12-31 22:46:45 +00:00
|
|
|
|
2013-09-27 18:49:21 +00:00
|
|
|
|
2012-02-17 00:51:14 +00:00
|
|
|
--
|
|
|
|
-- Check the basic translation of LDFLAGS for a Posix system.
|
|
|
|
--
|
|
|
|
|
2014-09-17 23:19:47 +00:00
|
|
|
function suite.ldflags_onNoSymbols()
|
2012-02-17 00:51:14 +00:00
|
|
|
prepare()
|
2014-09-17 23:19:47 +00:00
|
|
|
test.contains({ "-s" }, gcc.getldflags(cfg))
|
2012-02-17 00:51:14 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
function suite.ldflags_onSymbols()
|
2016-07-19 06:29:26 +00:00
|
|
|
symbols "On"
|
2012-02-17 00:51:14 +00:00
|
|
|
prepare()
|
2014-09-17 23:19:47 +00:00
|
|
|
test.excludes("-s", gcc.getldflags(cfg))
|
2012-02-17 00:51:14 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
function suite.ldflags_onSharedLib()
|
|
|
|
kind "SharedLib"
|
|
|
|
prepare()
|
2014-09-17 23:19:47 +00:00
|
|
|
test.contains({ "-shared" }, gcc.getldflags(cfg))
|
2009-09-29 20:28:13 +00:00
|
|
|
end
|
2009-12-31 22:46:45 +00:00
|
|
|
|
|
|
|
|
2011-02-10 17:24:51 +00:00
|
|
|
--
|
2012-02-17 00:51:14 +00:00
|
|
|
-- Check Mac OS X variants on LDFLAGS.
|
2011-02-10 17:24:51 +00:00
|
|
|
--
|
|
|
|
|
2014-09-17 23:19:47 +00:00
|
|
|
function suite.ldflags_onMacOSXNoSymbols()
|
2012-02-17 00:51:14 +00:00
|
|
|
system "MacOSX"
|
|
|
|
prepare()
|
2014-09-17 23:19:47 +00:00
|
|
|
test.contains({ "-Wl,-x" }, gcc.getldflags(cfg))
|
2012-02-17 00:51:14 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
function suite.ldflags_onMacOSXSharedLib()
|
|
|
|
system "MacOSX"
|
|
|
|
kind "SharedLib"
|
|
|
|
prepare()
|
2014-09-17 23:19:47 +00:00
|
|
|
test.contains({ "-dynamiclib" }, gcc.getldflags(cfg))
|
2011-02-10 17:24:51 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
|
2012-02-17 00:51:14 +00:00
|
|
|
--
|
|
|
|
-- Check Windows variants on LDFLAGS.
|
|
|
|
--
|
|
|
|
|
|
|
|
function suite.ldflags_onWindowsharedLib()
|
|
|
|
system "Windows"
|
|
|
|
kind "SharedLib"
|
|
|
|
prepare()
|
2015-07-02 14:14:26 +00:00
|
|
|
test.contains({ "-shared", '-Wl,--out-implib="bin/Debug/MyProject.lib"' }, gcc.getldflags(cfg))
|
2009-12-31 22:46:45 +00:00
|
|
|
end
|
2012-02-17 00:51:14 +00:00
|
|
|
|
|
|
|
function suite.ldflags_onWindowsApp()
|
|
|
|
system "Windows"
|
|
|
|
kind "WindowedApp"
|
|
|
|
prepare()
|
2014-09-17 23:19:47 +00:00
|
|
|
test.contains({ "-mwindows" }, gcc.getldflags(cfg))
|
2012-02-17 00:51:14 +00:00
|
|
|
end
|
2013-01-31 14:38:45 +00:00
|
|
|
|
|
|
|
|
2012-02-17 00:51:14 +00:00
|
|
|
|
|
|
|
--
|
|
|
|
-- Make sure system or architecture flags are added properly.
|
|
|
|
--
|
|
|
|
|
2015-04-13 22:27:11 +00:00
|
|
|
function suite.cflags_onX86()
|
2015-04-10 13:02:19 +00:00
|
|
|
architecture "x86"
|
2012-02-17 00:51:14 +00:00
|
|
|
prepare()
|
2014-09-17 23:19:47 +00:00
|
|
|
test.contains({ "-m32" }, gcc.getcflags(cfg))
|
2012-02-17 00:51:14 +00:00
|
|
|
end
|
|
|
|
|
2015-04-13 22:27:11 +00:00
|
|
|
function suite.ldflags_onX86()
|
2015-04-10 13:02:19 +00:00
|
|
|
architecture "x86"
|
2012-02-17 00:51:14 +00:00
|
|
|
prepare()
|
2014-09-17 23:19:47 +00:00
|
|
|
test.contains({ "-m32" }, gcc.getldflags(cfg))
|
2012-02-17 00:51:14 +00:00
|
|
|
end
|
|
|
|
|
2015-04-13 22:27:11 +00:00
|
|
|
function suite.cflags_onX86_64()
|
2015-04-10 13:02:19 +00:00
|
|
|
architecture "x86_64"
|
2012-02-17 00:51:14 +00:00
|
|
|
prepare()
|
2014-09-17 23:19:47 +00:00
|
|
|
test.contains({ "-m64" }, gcc.getcflags(cfg))
|
2012-02-17 00:51:14 +00:00
|
|
|
end
|
|
|
|
|
2015-04-13 22:27:11 +00:00
|
|
|
function suite.ldflags_onX86_64()
|
2015-04-10 13:02:19 +00:00
|
|
|
architecture "x86_64"
|
2012-02-17 00:51:14 +00:00
|
|
|
prepare()
|
2014-09-17 23:19:47 +00:00
|
|
|
test.contains({ "-m64" }, gcc.getldflags(cfg))
|
2012-02-17 00:51:14 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
--
|
|
|
|
-- Non-Windows shared libraries should marked as position independent.
|
|
|
|
--
|
|
|
|
|
|
|
|
function suite.cflags_onWindowsSharedLib()
|
|
|
|
system "MacOSX"
|
|
|
|
kind "SharedLib"
|
|
|
|
prepare()
|
2014-09-17 23:19:47 +00:00
|
|
|
test.contains({ "-fPIC" }, gcc.getcflags(cfg))
|
2012-02-17 00:51:14 +00:00
|
|
|
end
|
|
|
|
|
2012-02-28 21:15:46 +00:00
|
|
|
|
|
|
|
--
|
|
|
|
-- Check the formatting of linked system libraries.
|
|
|
|
--
|
|
|
|
|
|
|
|
function suite.links_onSystemLibs()
|
|
|
|
links { "fs_stub", "net_stub" }
|
|
|
|
prepare()
|
2014-09-17 23:19:47 +00:00
|
|
|
test.contains({ "-lfs_stub", "-lnet_stub" }, gcc.getlinks(cfg))
|
2012-02-28 21:15:46 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
function suite.links_onFramework()
|
|
|
|
links { "Cocoa.framework" }
|
|
|
|
prepare()
|
2016-08-17 15:48:41 +00:00
|
|
|
test.contains({ "-framework Cocoa" }, {table.implode (gcc.getlinks(cfg), '', '', ' ')})
|
2012-02-28 21:15:46 +00:00
|
|
|
end
|
|
|
|
|
2015-02-12 23:29:48 +00:00
|
|
|
function suite.links_onSystemLibs_onWindows()
|
2015-02-14 19:56:02 +00:00
|
|
|
system "windows"
|
|
|
|
links { "ole32" }
|
2015-02-12 23:29:48 +00:00
|
|
|
prepare()
|
2015-02-14 19:56:02 +00:00
|
|
|
test.contains({ "-lole32" }, gcc.getlinks(cfg))
|
2015-02-12 23:29:48 +00:00
|
|
|
end
|
|
|
|
|
2012-02-28 21:15:46 +00:00
|
|
|
|
|
|
|
--
|
|
|
|
-- When linking to a static sibling library, the relative path to the library
|
|
|
|
-- should be used instead of the "-l" flag. This prevents linking against a
|
|
|
|
-- shared library of the same name, should one be present.
|
|
|
|
--
|
|
|
|
|
|
|
|
function suite.links_onStaticSiblingLibrary()
|
|
|
|
links { "MyProject2" }
|
2012-06-28 19:48:05 +00:00
|
|
|
|
2015-08-28 20:16:14 +00:00
|
|
|
test.createproject(wks)
|
2012-06-28 19:48:05 +00:00
|
|
|
system "Linux"
|
2012-02-28 21:15:46 +00:00
|
|
|
kind "StaticLib"
|
|
|
|
targetdir "lib"
|
2012-06-28 19:48:05 +00:00
|
|
|
|
2012-02-28 21:15:46 +00:00
|
|
|
prepare()
|
|
|
|
test.isequal({ "lib/libMyProject2.a" }, gcc.getlinks(cfg))
|
|
|
|
end
|
2012-02-29 21:05:45 +00:00
|
|
|
|
|
|
|
|
2012-06-13 19:21:22 +00:00
|
|
|
--
|
|
|
|
-- Use the -lname format when linking to sibling shared libraries.
|
|
|
|
--
|
|
|
|
|
2013-05-16 15:40:47 +00:00
|
|
|
function suite.links_onSharedSiblingLibrary()
|
2012-06-13 19:21:22 +00:00
|
|
|
links { "MyProject2" }
|
2012-06-28 19:48:05 +00:00
|
|
|
|
2015-08-28 20:16:14 +00:00
|
|
|
test.createproject(wks)
|
2012-06-28 19:48:05 +00:00
|
|
|
system "Linux"
|
2012-06-13 19:21:22 +00:00
|
|
|
kind "SharedLib"
|
|
|
|
targetdir "lib"
|
2012-06-28 19:48:05 +00:00
|
|
|
|
2012-06-13 19:21:22 +00:00
|
|
|
prepare()
|
2013-05-16 15:40:47 +00:00
|
|
|
test.isequal({ "lib/libMyProject2.so" }, gcc.getlinks(cfg))
|
2012-06-13 19:21:22 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
|
2012-02-29 21:05:45 +00:00
|
|
|
--
|
|
|
|
-- When linking object files, leave off the "-l".
|
|
|
|
--
|
|
|
|
|
|
|
|
function suite.links_onObjectFile()
|
|
|
|
links { "generated.o" }
|
|
|
|
prepare()
|
|
|
|
test.isequal({ "generated.o" }, gcc.getlinks(cfg))
|
|
|
|
end
|
|
|
|
|
2012-06-28 18:17:19 +00:00
|
|
|
|
2013-01-31 14:38:45 +00:00
|
|
|
--
|
|
|
|
-- If the object file is referenced with a path, it should be
|
|
|
|
-- made relative to the project.
|
|
|
|
--
|
|
|
|
|
|
|
|
function suite.links_onObjectFileOutsideProject()
|
|
|
|
location "MyProject"
|
|
|
|
links { "obj/Debug/generated.o" }
|
|
|
|
prepare()
|
|
|
|
test.isequal({ "../obj/Debug/generated.o" }, gcc.getlinks(cfg))
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
--
|
|
|
|
-- Make sure shell variables are kept intact for object file paths.
|
|
|
|
--
|
|
|
|
|
|
|
|
function suite.links_onObjectFileWithShellVar()
|
|
|
|
location "MyProject"
|
|
|
|
links { "$(IntDir)/generated.o" }
|
|
|
|
prepare()
|
|
|
|
test.isequal({ "$(IntDir)/generated.o" }, gcc.getlinks(cfg))
|
|
|
|
end
|
|
|
|
|
|
|
|
|
2012-06-28 18:17:19 +00:00
|
|
|
--
|
|
|
|
-- Include directories should be made project relative.
|
|
|
|
--
|
|
|
|
|
|
|
|
function suite.includeDirsAreRelative()
|
|
|
|
includedirs { "../include", "src/include" }
|
|
|
|
prepare()
|
2013-09-11 14:57:44 +00:00
|
|
|
test.isequal({ '-I../include', '-Isrc/include' }, gcc.getincludedirs(cfg, cfg.includedirs))
|
2012-06-28 18:17:19 +00:00
|
|
|
end
|
|
|
|
|
2012-06-30 12:25:30 +00:00
|
|
|
|
2012-11-06 21:42:44 +00:00
|
|
|
--
|
|
|
|
-- Check handling of forced includes.
|
|
|
|
--
|
|
|
|
|
|
|
|
function suite.forcedIncludeFiles()
|
|
|
|
forceincludes { "stdafx.h", "include/sys.h" }
|
|
|
|
prepare()
|
2013-09-11 14:57:44 +00:00
|
|
|
test.isequal({'-include stdafx.h', '-include include/sys.h'}, gcc.getforceincludes(cfg))
|
2012-11-06 21:42:44 +00:00
|
|
|
end
|
2013-09-11 14:57:44 +00:00
|
|
|
|
|
|
|
|
|
|
|
--
|
|
|
|
-- Include directories containing spaces (or which could contain spaces)
|
|
|
|
-- should be wrapped in quotes.
|
|
|
|
--
|
|
|
|
|
|
|
|
function suite.includeDirs_onSpaces()
|
|
|
|
includedirs { "include files" }
|
|
|
|
prepare()
|
|
|
|
test.isequal({ '-I"include files"' }, gcc.getincludedirs(cfg, cfg.includedirs))
|
|
|
|
end
|
|
|
|
|
|
|
|
function suite.includeDirs_onEnvVars()
|
|
|
|
includedirs { "$(IntDir)/includes" }
|
|
|
|
prepare()
|
|
|
|
test.isequal({ '-I"$(IntDir)/includes"' }, gcc.getincludedirs(cfg, cfg.includedirs))
|
|
|
|
end
|
|
|
|
|
2014-11-04 23:25:32 +00:00
|
|
|
|
|
|
|
|
|
|
|
--
|
|
|
|
-- Check handling of strict aliasing flags.
|
|
|
|
--
|
|
|
|
|
|
|
|
function suite.cflags_onNoStrictAliasing()
|
|
|
|
strictaliasing "Off"
|
|
|
|
prepare()
|
|
|
|
test.contains("-fno-strict-aliasing", gcc.getcflags(cfg))
|
|
|
|
end
|
|
|
|
|
|
|
|
function suite.cflags_onLevel1Aliasing()
|
|
|
|
strictaliasing "Level1"
|
|
|
|
prepare()
|
|
|
|
test.contains({ "-fstrict-aliasing", "-Wstrict-aliasing=1" }, gcc.getcflags(cfg))
|
|
|
|
end
|
|
|
|
|
|
|
|
function suite.cflags_onLevel2Aliasing()
|
|
|
|
strictaliasing "Level2"
|
|
|
|
prepare()
|
|
|
|
test.contains({ "-fstrict-aliasing", "-Wstrict-aliasing=2" }, gcc.getcflags(cfg))
|
|
|
|
end
|
|
|
|
|
|
|
|
function suite.cflags_onLevel3Aliasing()
|
|
|
|
strictaliasing "Level3"
|
|
|
|
prepare()
|
|
|
|
test.contains({ "-fstrict-aliasing", "-Wstrict-aliasing=3" }, gcc.getcflags(cfg))
|
|
|
|
end
|
2015-05-19 19:35:28 +00:00
|
|
|
|
|
|
|
|
|
|
|
--
|
|
|
|
-- Check handling of system search paths.
|
|
|
|
--
|
|
|
|
|
|
|
|
function suite.includeDirs_onSysIncludeDirs()
|
|
|
|
sysincludedirs { "/usr/local/include" }
|
|
|
|
prepare()
|
|
|
|
test.contains("-isystem /usr/local/include", gcc.getincludedirs(cfg, cfg.includedirs, cfg.sysincludedirs))
|
|
|
|
end
|
|
|
|
|
|
|
|
function suite.libDirs_onSysLibDirs()
|
|
|
|
syslibdirs { "/usr/local/lib" }
|
|
|
|
prepare()
|
|
|
|
test.contains("-L/usr/local/lib", gcc.getLibraryDirectories(cfg))
|
|
|
|
end
|
2015-06-30 20:20:10 +00:00
|
|
|
|
|
|
|
|
|
|
|
--
|
|
|
|
-- Check handling of link time optimization flag.
|
|
|
|
--
|
|
|
|
|
|
|
|
function suite.cflags_onLinkTimeOptimization()
|
|
|
|
flags "LinkTimeOptimization"
|
|
|
|
prepare()
|
|
|
|
test.contains("-flto", gcc.getcflags(cfg))
|
|
|
|
end
|
|
|
|
|
|
|
|
function suite.ldflags_onLinkTimeOptimization()
|
|
|
|
flags "LinkTimeOptimization"
|
|
|
|
prepare()
|
|
|
|
test.contains("-flto", gcc.getldflags(cfg))
|
|
|
|
end
|
2016-01-15 12:46:05 +00:00
|
|
|
|
|
|
|
|
|
|
|
--
|
|
|
|
-- Check link mode preference for system libraries.
|
|
|
|
--
|
|
|
|
function suite.linksModePreference_onAllStatic()
|
|
|
|
links { "fs_stub:static", "net_stub:static" }
|
|
|
|
prepare()
|
2016-01-15 16:02:01 +00:00
|
|
|
test.contains({ "-Wl,-Bstatic", "-lfs_stub", "-Wl,-Bdynamic", "-lnet_stub"}, gcc.getlinks(cfg))
|
2016-01-15 12:46:05 +00:00
|
|
|
end
|
|
|
|
|
2016-01-15 16:02:01 +00:00
|
|
|
function suite.linksModePreference_onStaticAndShared()
|
2016-01-15 12:46:05 +00:00
|
|
|
links { "fs_stub:static", "net_stub" }
|
|
|
|
prepare()
|
2016-01-15 16:02:01 +00:00
|
|
|
test.contains({ "-Wl,-Bstatic", "-lfs_stub", "-Wl,-Bdynamic", "-lnet_stub"}, gcc.getlinks(cfg))
|
2016-01-15 12:46:05 +00:00
|
|
|
end
|
|
|
|
|
2016-01-15 16:02:01 +00:00
|
|
|
function suite.linksModePreference_onAllShared()
|
|
|
|
links { "fs_stub:shared", "net_stub:shared" }
|
2016-01-15 12:46:05 +00:00
|
|
|
prepare()
|
2016-01-15 16:02:01 +00:00
|
|
|
test.excludes({ "-Wl,-Bstatic" }, gcc.getlinks(cfg))
|
2016-01-15 12:46:05 +00:00
|
|
|
end
|
2017-05-04 00:01:33 +00:00
|
|
|
|
|
|
|
|
|
|
|
--
|
|
|
|
-- Test language flags are added properly.
|
|
|
|
--
|
|
|
|
|
|
|
|
function suite.cflags_onCDefault()
|
|
|
|
cdialect "Default"
|
|
|
|
prepare()
|
|
|
|
test.contains({ }, gcc.getcflags(cfg))
|
|
|
|
test.contains({ }, gcc.getcxxflags(cfg))
|
|
|
|
end
|
|
|
|
|
|
|
|
function suite.cflags_onC89()
|
|
|
|
cdialect "C89"
|
|
|
|
prepare()
|
|
|
|
test.contains({ "-std=c89" }, gcc.getcflags(cfg))
|
|
|
|
test.contains({ }, gcc.getcxxflags(cfg))
|
|
|
|
end
|
|
|
|
|
|
|
|
function suite.cflags_onC90()
|
|
|
|
cdialect "C90"
|
|
|
|
prepare()
|
|
|
|
test.contains({ "-std=c90" }, gcc.getcflags(cfg))
|
|
|
|
test.contains({ }, gcc.getcxxflags(cfg))
|
|
|
|
end
|
|
|
|
|
|
|
|
function suite.cflags_onC99()
|
|
|
|
cdialect "C99"
|
|
|
|
prepare()
|
|
|
|
test.contains({ "-std=c99" }, gcc.getcflags(cfg))
|
|
|
|
test.contains({ }, gcc.getcxxflags(cfg))
|
|
|
|
end
|
|
|
|
|
|
|
|
function suite.cflags_onC11()
|
|
|
|
cdialect "C11"
|
|
|
|
prepare()
|
|
|
|
test.contains({ "-std=c11" }, gcc.getcflags(cfg))
|
|
|
|
test.contains({ }, gcc.getcxxflags(cfg))
|
|
|
|
end
|
|
|
|
|
|
|
|
function suite.cflags_ongnu89()
|
|
|
|
cdialect "gnu89"
|
|
|
|
prepare()
|
|
|
|
test.contains({ "-std=gnu89" }, gcc.getcflags(cfg))
|
|
|
|
test.contains({ }, gcc.getcxxflags(cfg))
|
|
|
|
end
|
|
|
|
|
|
|
|
function suite.cflags_ongnu90()
|
|
|
|
cdialect "gnu90"
|
|
|
|
prepare()
|
|
|
|
test.contains({ "-std=gnu90" }, gcc.getcflags(cfg))
|
|
|
|
test.contains({ }, gcc.getcxxflags(cfg))
|
|
|
|
end
|
|
|
|
|
|
|
|
function suite.cflags_ongnu99()
|
|
|
|
cdialect "gnu99"
|
|
|
|
prepare()
|
|
|
|
test.contains({ "-std=gnu99" }, gcc.getcflags(cfg))
|
|
|
|
test.contains({ }, gcc.getcxxflags(cfg))
|
|
|
|
end
|
|
|
|
|
|
|
|
function suite.cflags_ongnu11()
|
|
|
|
cdialect "gnu11"
|
|
|
|
prepare()
|
|
|
|
test.contains({ "-std=gnu11" }, gcc.getcflags(cfg))
|
|
|
|
test.contains({ }, gcc.getcxxflags(cfg))
|
|
|
|
end
|
|
|
|
|
|
|
|
function suite.cxxflags_onCppDefault()
|
|
|
|
cppdialect "Default"
|
|
|
|
prepare()
|
|
|
|
test.contains({ }, gcc.getcxxflags(cfg))
|
|
|
|
test.contains({ }, gcc.getcflags(cfg))
|
|
|
|
end
|
|
|
|
|
|
|
|
function suite.cxxflags_onCpp98()
|
|
|
|
cppdialect "C++98"
|
|
|
|
prepare()
|
|
|
|
test.contains({ "-std=c++98" }, gcc.getcxxflags(cfg))
|
|
|
|
test.contains({ }, gcc.getcflags(cfg))
|
|
|
|
end
|
|
|
|
|
|
|
|
function suite.cxxflags_onCpp11()
|
|
|
|
cppdialect "C++11"
|
|
|
|
prepare()
|
|
|
|
test.contains({ "-std=c++11" }, gcc.getcxxflags(cfg))
|
|
|
|
test.contains({ }, gcc.getcflags(cfg))
|
|
|
|
end
|
|
|
|
|
|
|
|
function suite.cxxflags_onCpp14()
|
|
|
|
cppdialect "C++14"
|
|
|
|
prepare()
|
|
|
|
test.contains({ "-std=c++14" }, gcc.getcxxflags(cfg))
|
|
|
|
test.contains({ }, gcc.getcflags(cfg))
|
|
|
|
end
|
|
|
|
|
|
|
|
function suite.cxxflags_onCpp17()
|
|
|
|
cppdialect "C++17"
|
|
|
|
prepare()
|
2017-06-08 23:19:37 +00:00
|
|
|
test.contains({ "-std=c++1z" }, gcc.getcxxflags(cfg))
|
2017-05-04 00:01:33 +00:00
|
|
|
test.contains({ }, gcc.getcflags(cfg))
|
|
|
|
end
|
|
|
|
|
|
|
|
function suite.cxxflags_onCppGnu98()
|
|
|
|
cppdialect "gnu++98"
|
|
|
|
prepare()
|
|
|
|
test.contains({ "-std=gnu++98" }, gcc.getcxxflags(cfg))
|
|
|
|
test.contains({ }, gcc.getcflags(cfg))
|
|
|
|
end
|
|
|
|
|
|
|
|
function suite.cxxflags_onCppGnu11()
|
|
|
|
cppdialect "gnu++11"
|
|
|
|
prepare()
|
|
|
|
test.contains({ "-std=gnu++11" }, gcc.getcxxflags(cfg))
|
|
|
|
test.contains({ }, gcc.getcflags(cfg))
|
|
|
|
end
|
|
|
|
|
|
|
|
function suite.cxxflags_onCppGnu14()
|
|
|
|
cppdialect "gnu++14"
|
|
|
|
prepare()
|
|
|
|
test.contains({ "-std=gnu++14" }, gcc.getcxxflags(cfg))
|
|
|
|
test.contains({ }, gcc.getcflags(cfg))
|
|
|
|
end
|
|
|
|
|
|
|
|
function suite.cxxflags_onCppGnu17()
|
|
|
|
cppdialect "gnu++17"
|
|
|
|
prepare()
|
2017-06-08 23:19:37 +00:00
|
|
|
test.contains({ "-std=gnu++1z" }, gcc.getcxxflags(cfg))
|
2017-05-04 00:01:33 +00:00
|
|
|
test.contains({ }, gcc.getcflags(cfg))
|
|
|
|
end
|