premake/tests/tools/test_gcc.lua
Jason Perkins 17f1843c71 Finish renaming architectures away from x32/x64
A number of tests were relying on the fact that x32/x64 were being converted implicitly to x86/x86_64. If/when we retire those symbols, all of those tests would break. Renamed them now to avoid having to sort it out later. Also fixed up comments to keep everything consistent.
2015-04-13 18:27:11 -04:00

479 lines
9.7 KiB
Lua

--
-- tests/test_gcc.lua
-- Automated test suite for the GCC toolset interface.
-- Copyright (c) 2009-2013 Jason Perkins and the Premake project
--
local suite = test.declare("tools_gcc")
local gcc = premake.tools.gcc
local project = premake.project
--
-- Setup/teardown
--
local sln, prj, cfg
function suite.setup()
sln, prj = test.createsolution()
system "Linux"
end
local function prepare()
cfg = test.getconfig(prj, "Debug")
end
--
-- 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"))
test.isequal("windres", gcc.gettoolname(cfg, "rc"))
end
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
--
-- By default, the -MMD -MP are used to generate dependencies.
--
function suite.cppflags_defaultWithMMD()
prepare()
test.contains({"-MMD", "-MP"}, gcc.getcppflags(cfg))
end
--
-- Haiku OS doesn't support the -MP flag yet (that's weird, isn't it?)
--
function suite.cppflagsExcludeMP_onHaiku()
system "Haiku"
prepare()
test.excludes({ "-MP" }, gcc.getcppflags(cfg))
end
--
-- Check the translation of CFLAGS.
--
function suite.cflags_onExtraWarnings()
warnings "extra"
prepare()
test.contains({ "-Wall -Wextra" }, gcc.getcflags(cfg))
end
function suite.cflags_onFatalWarnings()
flags { "FatalWarnings" }
prepare()
test.contains({ "-Werror" }, gcc.getcflags(cfg))
end
function suite.cflags_onSpecificWarnings()
enablewarnings { "enable" }
disablewarnings { "disable" }
fatalwarnings { "fatal" }
prepare()
test.contains({ "-Wenable", "-Wno-disable", "-Werror=fatal" }, gcc.getcflags(cfg))
end
function suite.cflags_onFloastFast()
floatingpoint "Fast"
prepare()
test.contains({ "-ffast-math" }, gcc.getcflags(cfg))
end
function suite.cflags_onFloastStrict()
floatingpoint "Strict"
prepare()
test.contains({ "-ffloat-store" }, gcc.getcflags(cfg))
end
function suite.cflags_onNoWarnings()
warnings "Off"
prepare()
test.contains({ "-w" }, gcc.getcflags(cfg))
end
function suite.cflags_onSSE()
vectorextensions "SSE"
prepare()
test.contains({ "-msse" }, gcc.getcflags(cfg))
end
function suite.cflags_onSSE2()
vectorextensions "SSE2"
prepare()
test.contains({ "-msse2" }, gcc.getcflags(cfg))
end
function suite.cflags_onAVX()
vectorextensions "AVX"
prepare()
test.contains({ "-mavx" }, gcc.getcflags(cfg))
end
function suite.cflags_onAVX2()
vectorextensions "AVX2"
prepare()
test.contains({ "-mavx2" }, gcc.getcflags(cfg))
end
--
-- 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
--
-- Check the optimization flags.
--
function suite.cflags_onNoOptimize()
optimize "Off"
prepare()
test.contains({ "-O0" }, gcc.getcflags(cfg))
end
function suite.cflags_onOptimize()
optimize "On"
prepare()
test.contains({ "-O2" }, gcc.getcflags(cfg))
end
function suite.cflags_onOptimizeSize()
optimize "Size"
prepare()
test.contains({ "-Os" }, gcc.getcflags(cfg))
end
function suite.cflags_onOptimizeSpeed()
optimize "Speed"
prepare()
test.contains({ "-O3" }, gcc.getcflags(cfg))
end
function suite.cflags_onOptimizeFull()
optimize "Full"
prepare()
test.contains({ "-O3" }, gcc.getcflags(cfg))
end
function suite.cflags_onOptimizeDebug()
optimize "Debug"
prepare()
test.contains({ "-Og" }, gcc.getcflags(cfg))
end
--
-- Check the translation of CXXFLAGS.
--
function suite.cflags_onNoExceptions()
flags { "NoExceptions" }
prepare()
test.contains({ "-fno-exceptions" }, gcc.getcxxflags(cfg))
end
function suite.cflags_onNoBufferSecurityCheck()
flags { "NoBufferSecurityCheck" }
prepare()
test.contains({ "-fno-stack-protector" }, gcc.getcxxflags(cfg))
end
--
-- Check the basic translation of LDFLAGS for a Posix system.
--
function suite.ldflags_onNoSymbols()
prepare()
test.contains({ "-s" }, gcc.getldflags(cfg))
end
function suite.ldflags_onSymbols()
flags { "Symbols" }
prepare()
test.excludes("-s", gcc.getldflags(cfg))
end
function suite.ldflags_onSharedLib()
kind "SharedLib"
prepare()
test.contains({ "-shared" }, gcc.getldflags(cfg))
end
--
-- Check Mac OS X variants on LDFLAGS.
--
function suite.ldflags_onMacOSXNoSymbols()
system "MacOSX"
prepare()
test.contains({ "-Wl,-x" }, gcc.getldflags(cfg))
end
function suite.ldflags_onMacOSXSharedLib()
system "MacOSX"
kind "SharedLib"
prepare()
test.contains({ "-dynamiclib" }, gcc.getldflags(cfg))
end
--
-- Check Windows variants on LDFLAGS.
--
function suite.ldflags_onWindowsharedLib()
system "Windows"
kind "SharedLib"
prepare()
test.contains({ "-shared", '-Wl,--out-implib="MyProject.lib"' }, gcc.getldflags(cfg))
end
function suite.ldflags_onWindowsApp()
system "Windows"
kind "WindowedApp"
prepare()
test.contains({ "-mwindows" }, gcc.getldflags(cfg))
end
--
-- Make sure system or architecture flags are added properly.
--
function suite.cflags_onX86()
architecture "x86"
prepare()
test.contains({ "-m32" }, gcc.getcflags(cfg))
end
function suite.ldflags_onX86()
architecture "x86"
prepare()
test.contains({ "-m32" }, gcc.getldflags(cfg))
end
function suite.cflags_onX86_64()
architecture "x86_64"
prepare()
test.contains({ "-m64" }, gcc.getcflags(cfg))
end
function suite.ldflags_onX86_64()
architecture "x86_64"
prepare()
test.contains({ "-m64" }, gcc.getldflags(cfg))
end
--
-- Non-Windows shared libraries should marked as position independent.
--
function suite.cflags_onWindowsSharedLib()
system "MacOSX"
kind "SharedLib"
prepare()
test.contains({ "-fPIC" }, gcc.getcflags(cfg))
end
--
-- Check the formatting of linked system libraries.
--
function suite.links_onSystemLibs()
links { "fs_stub", "net_stub" }
prepare()
test.contains({ "-lfs_stub", "-lnet_stub" }, gcc.getlinks(cfg))
end
function suite.links_onFramework()
links { "Cocoa.framework" }
prepare()
test.contains({ "-framework Cocoa" }, gcc.getlinks(cfg))
end
function suite.links_onSystemLibs_onWindows()
system "windows"
links { "ole32" }
prepare()
test.contains({ "-lole32" }, gcc.getlinks(cfg))
end
--
-- 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" }
test.createproject(sln)
system "Linux"
kind "StaticLib"
targetdir "lib"
prepare()
test.isequal({ "lib/libMyProject2.a" }, gcc.getlinks(cfg))
end
--
-- Use the -lname format when linking to sibling shared libraries.
--
function suite.links_onSharedSiblingLibrary()
links { "MyProject2" }
test.createproject(sln)
system "Linux"
kind "SharedLib"
targetdir "lib"
prepare()
test.isequal({ "lib/libMyProject2.so" }, gcc.getlinks(cfg))
end
--
-- When linking object files, leave off the "-l".
--
function suite.links_onObjectFile()
links { "generated.o" }
prepare()
test.isequal({ "generated.o" }, gcc.getlinks(cfg))
end
--
-- 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
--
-- Include directories should be made project relative.
--
function suite.includeDirsAreRelative()
includedirs { "../include", "src/include" }
prepare()
test.isequal({ '-I../include', '-Isrc/include' }, gcc.getincludedirs(cfg, cfg.includedirs))
end
--
-- Check handling of forced includes.
--
function suite.forcedIncludeFiles()
forceincludes { "stdafx.h", "include/sys.h" }
prepare()
test.isequal({'-include stdafx.h', '-include include/sys.h'}, gcc.getforceincludes(cfg))
end
--
-- 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
--
-- 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