summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author夕伽 <[email protected]>2018-09-04 13:37:45 +0800
committer夕伽 <[email protected]>2018-09-04 13:37:45 +0800
commit3cb295e071987b72cb78223781a7632d0a41d5cf (patch)
tree84734ff9391d632e206554426b80a78d8d467ccb
parentaa6cba4025f0a255e24072153c6c55f273b8b7eb (diff)
move mfc'rule to mfc/xmake.lua from xmake.lua
-rw-r--r--xmake/rules/winsdk/mfc/mfc.lua140
-rw-r--r--xmake/rules/winsdk/mfc/xmake.lua51
-rw-r--r--xmake/rules/winsdk/xmake.lua123
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