compiler_setup.lua 1.8 KB

1234567891011121314151617181920212223242526
  1. rule("compiler_setup")
  2. on_config(function(target)
  3. if target:has_tool("cxx", "cl") then
  4. -- MSVC
  5. target:add("cxxflags", "/bigobj", "/permissive-", "/Zc:__cplusplus", "/Zc:externConstexpr", "/Zc:inline", "/Zc:lambda", "/Zc:preprocessor", "/Zc:referenceBinding", "/Zc:strictStrings", "/Zc:throwingNew", {tools = "cl"})
  6. target:add("defines", "_CRT_SECURE_NO_WARNINGS", "_ENABLE_EXTENDED_ALIGNED_STORAGE")
  7. -- Enable the following additional warnings:
  8. target:add("cxflags", "/we4062", {tools = "cl"}) -- Switch case not handled (warning as error)
  9. target:add("cxflags", "/we4426", {tools = "cl"}) -- Optimization flags changed after including header, may be due to #pragma optimize() (warning as error)
  10. target:add("cxflags", "/we5038", {tools = "cl"}) -- Data member will be initialized after data member (warning as error)
  11. -- Disable the following warnings:
  12. target:add("cxflags", "/wd4251", {tools = "cl"}) -- class needs to have dll-interface to be used by clients of class blah blah blah
  13. target:add("cxflags", "/wd4275", {tools = "cl"}) -- DLL-interface class 'class_1' used as base for DLL-interface blah
  14. else
  15. -- GCC-compatible (GCC, Clang, ...)
  16. target:add("cxflags", "-Wtrampolines", {tools = "gcc"})
  17. target:add("cxflags", "-Werror=inconsistent-missing-override", {tools = "clang"})
  18. target:add("cxflags", "-Werror=pessimizing-move")
  19. target:add("cxflags", "-Werror=redundant-move")
  20. target:add("cxflags", "-Werror=reorder")
  21. target:add("cxflags", "-Werror=suggest-override", {tools = "gcc"})
  22. target:add("cxflags", "-Werror=switch")
  23. end
  24. end)