diff options
| author | 夕伽 <[email protected]> | 2018-09-04 13:37:45 +0800 |
|---|---|---|
| committer | 夕伽 <[email protected]> | 2018-09-04 13:37:45 +0800 |
| commit | 3cb295e071987b72cb78223781a7632d0a41d5cf (patch) | |
| tree | 84734ff9391d632e206554426b80a78d8d467ccb | |
| parent | aa6cba4025f0a255e24072153c6c55f273b8b7eb (diff) | |
move mfc'rule to mfc/xmake.lua from xmake.lua
| -rw-r--r-- | xmake/rules/winsdk/mfc/mfc.lua | 140 | ||||
| -rw-r--r-- | xmake/rules/winsdk/mfc/xmake.lua | 51 | ||||
| -rw-r--r-- | xmake/rules/winsdk/xmake.lua | 123 |
3 files changed, 192 insertions, 122 deletions
diff --git a/xmake/rules/winsdk/mfc/mfc.lua b/xmake/rules/winsdk/mfc/mfc.lua new file mode 100644 index 000000000..1cba4752e --- /dev/null +++ b/xmake/rules/winsdk/mfc/mfc.lua @@ -0,0 +1,140 @@ +--!A cross-platform build utility based on Lua +-- +-- Licensed to the Apache Software Foundation (ASF) under one +-- or more contributor license agreements. See the NOTICE file +-- distributed with this work for additional information +-- regarding copyright ownership. The ASF licenses this file +-- to you under the Apache License, Version 2.0 (the +-- "License"); you may not use this file except in compliance +-- with the License. You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +-- Copyright (C) 2015 - 2018, TBOOX Open Source Group. +-- +-- @author ruki +-- @file xmake.lua +-- + +-- remove exists md or mt +function _mfc_remove_mt_md_flags(target, flagsname) + local flags = target:get(flagsname) + if type(flags) == "table" then + for key, flag in pairs(flags) do + flag = flag:lower() + if flag:find("[/%-]mt") or flag:find("[/%-]md") then + flags[key] = nil + end + end + elseif type(flags) == "string" then + local flag = flags:lower() + if flag:find("[/%-]mt") or flag:find("[/%-]md") then + flags = {} + end + end + target:set(flagsname, flags) +end + +-- remove exists settings +function _mfc_remove_flags(target) + local ldflags = target:get("ldflags") + for key, ldflag in pairs(ldflags) do + ldflag = ldflag:lower() + if ldflag:find("[/%-]subsystem:") then + ldflags[key] = nil + break + end + end + target:set("ldflags", ldflags) + + -- remove defines /DMT /DMTd /DMD /DMDd + local defines = target:get("defines") + for key, define in pairs(defines) do + define = define:lower() + if define:find("[/%-]dmt") or define:find("[/%-]dmd") then + defines[key] = nil + end + end + target:set("defines", defines) + + -- remove c /MD,/MT + _mfc_remove_mt_md_flags(target, "cflags") + + -- remove c,cpp /MD,/MT + _mfc_remove_mt_md_flags(target, "cxflags") + + -- remove cpp /MD,/MT + _mfc_remove_mt_md_flags(target, "cxxflags") +end + +-- check unicode +function _mfc_check_is_unicode(target) + local defines = target:get("defines") + for key, define in pairs(defines) do + define = define:lower() + if define:find("unicode") or define:find("_unicode") then + return true + end + end + return false +end + +-- apply shared mfc settings +function _mfc_shared(target) + + -- remove some exists flags + _mfc_remove_flags(target) + + -- add flags + target:add("ldflags", "-subsystem:windows", {force = true}) + + -- set runtimelibrary + target:add("cxflags", ifelse(is_mode("debug"), "-MDd", "-MD")) + target:add("defines", "AFX", "_AFXDLL") +end + +-- apply static mfc settings +function _mfc_static(target) + + -- remove some exists flags + _mfc_remove_flags(target) + + -- add flags + target:add("ldflags", "-subsystem:windows", {force = true}) + target:add("ldflags", "-force", {force = true}) + + -- set runtimelibrary + target:add("cxflags", ifelse(is_mode("debug"), "-MTd", "-MT")) +end + +-- apply appliction settings use static mfc +function mfc_static_app(target) + + -- static common + _mfc_static(target) + + -- set kind: binary + target:set("kind", "binary") + + -- set entry + target:add("ldflags", ifelse(_mfc_check_is_unicode(target), "-entry:wWinMainCRTStartup", "-entry:WinMainCRTStartup"), {force = true}) +end + +-- apply appliction settings use shared mfc +function mfc_shared_app(target) + + -- static common + _mfc_shared(target) + + -- set kind: binary + target:set("kind", "binary") + + -- set entry + target:add("ldflags", ifelse(_mfc_check_is_unicode(target), "-entry:wWinMainCRTStartup", "-entry:WinMainCRTStartup"), {force = true}) +end
\ No newline at end of file diff --git a/xmake/rules/winsdk/mfc/xmake.lua b/xmake/rules/winsdk/mfc/xmake.lua new file mode 100644 index 000000000..6e1761e48 --- /dev/null +++ b/xmake/rules/winsdk/mfc/xmake.lua @@ -0,0 +1,51 @@ +--!A cross-platform build utility based on Lua +-- +-- Licensed to the Apache Software Foundation (ASF) under one +-- or more contributor license agreements. See the NOTICE file +-- distributed with this work for additional information +-- regarding copyright ownership. The ASF licenses this file +-- to you under the Apache License, Version 2.0 (the +-- "License"); you may not use this file except in compliance +-- with the License. You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +-- Copyright (C) 2015 - 2018, TBOOX Open Source Group. +-- +-- @author ruki +-- @file xmake.lua +-- + +-- define rule: shared mfcapp +rule("win.sdk.mfcapp.shared") + + -- FIXME: before load need check of vs's minverion, if defined + --before_load(function (target) + --end) + + -- after load + after_load(function (target) + + -- apply mfc settings + import("mfc").mfc_shared_app(target) + end) + +-- define rule: static mfcapp +rule("win.sdk.mfcapp.static") + + -- FIXME: before load need check of vs's minverion, if defined + --before_load(function (target) + --end) + + -- after load + after_load(function (target) + + -- apply mfc settings + import("mfc").mfc_static_app(target) + end)
\ No newline at end of file diff --git a/xmake/rules/winsdk/xmake.lua b/xmake/rules/winsdk/xmake.lua index 2ae7f7955..123829019 100644 --- a/xmake/rules/winsdk/xmake.lua +++ b/xmake/rules/winsdk/xmake.lua @@ -22,69 +22,6 @@ -- @file xmake.lua -- --- remove exists md or mt -function _rule_remove_mt_md_flags(target, flagsname) - local flags = target:get(flagsname) - if type(flags) == "table" then - for key, flag in pairs(flags) do - flag = flag:lower() - if flag:find("[/%-]mt") or flag:find("[/%-]md") then - flags[key] = nil - end - end - elseif type(flags) == "string" then - local flag = flags:lower() - if flag:find("[/%-]mt") or flag:find("[/%-]md") then - flags = {} - end - end - target:set(flagsname, flags) -end - --- remove exists settings -function _rule_remove_exists_flags(target) - local ldflags = target:get("ldflags") - for key, ldflag in pairs(ldflags) do - ldflag = ldflag:lower() - if ldflag:find("[/%-]subsystem:") then - ldflags[key] = nil - break - end - end - target:set("ldflags", ldflags) - - -- remove defines /DMT /DMTd /DMD /DMDd - local defines = target:get("defines") - for key, define in pairs(defines) do - define = define:lower() - if define:find("[/%-]dmt") or define:find("[/%-]dmd") then - defines[key] = nil - end - end - target:set("defines", defines) - - -- remove c /MD,/MT - _rule_remove_mt_md_flags(target, "cflags") - - -- remove c,cpp /MD,/MT - _rule_remove_mt_md_flags(target, "cxflags") - - -- remove cpp /MD,/MT - _rule_remove_mt_md_flags(target, "cxxflags") -end - --- check unicode -function _rule_check_is_unicode(target) - local defines = target:get("defines") - for key, define in pairs(defines) do - define = define:lower() - if define:find("unicode") or define:find("_unicode") then - return true - end - end - return false -end - -- define rule: application rule("win.sdk.application") @@ -114,62 +51,4 @@ rule("win.sdk.application") target:add("links", "kernel32", "user32", "gdi32", "winspool", "comdlg32", "advapi32") target:add("links", "shell32", "ole32", "oleaut32", "uuid", "odbc32", "odbccp32", "comctl32") target:add("links", "cfgmgr32", "comdlg32", "setupapi", "strsafe", "shlwapi") - end) - --- define rule: sharedmfcapp -rule("win.sdk.mfcapp.shared") - - -- save local functions - local remove_exists_flags = _rule_remove_exists_flags - local check_is_unicode = _rule_check_is_unicode - - -- after load - after_load(function (target) - - -- set kind: binary - target:set("kind", "binary") - - -- remove some exists flags - remove_exists_flags(target) - - -- add flags - target:add("ldflags", "-subsystem:windows", {force = true}) - target:add("ldflags", ifelse(check_is_unicode(target), "-entry:wWinMainCRTStartup", "-entry:WinMainCRTStartup"), {force = true}) - - -- set runtimelibrary - target:add("cxflags", ifelse(is_mode("debug"), "-MDd", "-MD")) - target:add("defines", "AFX", "_AFXDLL") - - -- add mfc flags - target:values_set("project.vs.mfc", true) - end) - - --- define rule: staticmfcapp -rule("win.sdk.mfcapp.static") - - -- save local functions - local remove_exists_flags = _rule_remove_exists_flags - local check_is_unicode = _rule_check_is_unicode - - -- after load - after_load(function (target) - - -- set kind: binary - target:set("kind", "binary") - - -- remove some exists flags - remove_exists_flags(target) - - -- add flags - target:add("ldflags", "-subsystem:windows", {force = true}) - target:add("ldflags", "-force", {force = true}) - target:add("ldflags", ifelse(check_is_unicode(target), "-entry:wWinMainCRTStartup", "-entry:WinMainCRTStartup"), {force = true}) - - -- set runtimelibrary - target:add("cxflags", ifelse(is_mode("debug"), "-MTd", "-MT")) - - -- add mfc flags - target:values_set("project.vs.mfc", true) - end) - + end)
\ No newline at end of file |
