add_rules("mode.debug", "mode.release") set_languages("c++17") local modules = { Compression = { Option = "zlib", Deps = {"zlib"}, Includes = {"include/(sp/extensions/Compress.h)"}, Sources = {"src/sp/extensions/Compress.cpp"} }, TcpSocket = { Option = "tcp", Deps = {}, Includes = {"include/(sp/extensions/Tcp.h)", "include/(sp/extensions/tcp/*.h)"}, Sources = {"src/sp/extensions/Tcp*.cpp"} } } -- Map modules to options for name, module in table.orderpairs(modules) do if module.Option then option(module.Option, { description = "Enables the " .. name .. " module", default = true, category = "Modules" }) end end -- Add modules requirements for name, module in table.orderpairs(modules) do if module.Deps then add_requires(module.Deps) end end -- Add modules targets for name, module in table.orderpairs(modules) do if module.Deps and has_config(module.Option) then target("SimpleProtocol-" .. name) add_includedirs("include") for _, include in table.orderpairs(module.Includes) do add_headerfiles(include) end for _, source in table.orderpairs(module.Sources) do add_files(source) end for _, package in table.orderpairs(module.Deps) do add_packages(package) end set_group("Library") set_kind("$(kind)") end end target("SimpleProtocol") add_includedirs("include") add_files("src/sp/**.cpp") set_group("Library") set_kind("$(kind)") add_headerfiles("include/(sp/**.h)", "include/(sp/**.inl)") -- adding extensions for name, module in table.orderpairs(modules) do if module.Deps and has_config(module.Option) then add_deps("SimpleProtocol-" .. name) end end -- we don't want extensions remove_files("src/sp/extensions/**.cpp") remove_headerfiles("include/(sp/extension/**.h)") -- we need this for endian functions if is_os("windows") then add_links("ws2_32") end -- Tests for _, file in ipairs(os.files("test/**.cpp")) do local name = path.basename(file) target(name) set_kind("binary") add_files(file) add_includedirs("include") add_deps("SimpleProtocol") add_tests("compile_and_run") end