diff options
| author | ruki <[email protected]> | 2015-06-07 17:05:40 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2015-06-07 17:05:40 +0800 |
| commit | d6275f9e3ae8989dbdca641bfeb077773df1c217 (patch) | |
| tree | 1fd72544e5f68d863fa5f46817f954d677d1a8d9 /xmake/scripts/tools/gcc.lua | |
| parent | 6e928d29aa3e30b92b6ad5b51edc105ec90b39ad (diff) | |
add gcc
Diffstat (limited to 'xmake/scripts/tools/gcc.lua')
| -rw-r--r-- | xmake/scripts/tools/gcc.lua | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/xmake/scripts/tools/gcc.lua b/xmake/scripts/tools/gcc.lua new file mode 100644 index 000000000..a4b1ce21b --- /dev/null +++ b/xmake/scripts/tools/gcc.lua @@ -0,0 +1,151 @@ +--!The Automatic Cross-platform Build Tool +-- +-- XMake is free software; you can redistribute it and/or modify +-- it under the terms of the GNU Lesser General Public License as published by +-- the Free Software Foundation; either version 2.1 of the License, or +-- (at your option) any later version. +-- +-- XMake is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU Lesser General Public License for more details. +-- +-- You should have received a copy of the GNU Lesser General Public License +-- along with XMake; +-- If not, see <a href="http://www.gnu.org/licenses/"> http://www.gnu.org/licenses/</a> +-- +-- Copyright (C) 2009 - 2015, ruki All rights reserved. +-- +-- @author ruki +-- @file gcc.lua +-- + +-- load modules +local utils = require("base/utils") +local table = require("base/table") +local string = require("base/string") +local config = require("base/config") + +-- define module: gcc +local gcc = gcc or {} + +-- check the given flag +function gcc._check(flag) + + -- this flag has been checked? + gcc._CHECK = gcc._CHECK or {} + if gcc._CHECK[flag] then + return gcc._CHECK[flag] + end + + -- check it + if 0 ~= os.execute(string.format("%s %s -S -o %s -xc %s > %s 2>&1", gcc.name, flag, xmake._NULDEV, xmake._NULDEV, xmake._NULDEV)) then + flag = "" + end + + -- save it + gcc._CHECK[flag] = flag + + -- ok? + return flag +end + +-- the init function +function gcc.init(name) + + -- save name + gcc.name = name or "gcc" + + -- the architecture + local arch = config.get("arch") + assert(arch) + + -- init flags for architecture + local flags_arch = "" + if arch == "x86" then flags_arch = "-m32" + elseif arch == "x64" then flags_arch = "-m64" + else flags_arch = "-arch " .. arch + end + + -- init cxflags + gcc.cxflags = { flags_arch } + + -- init mxflags + gcc.mxflags = { flags_arch + , "-fmessage-length=0" + , "-pipe" + , "-fpascal-strings" + , "\"-DIBOutlet=__attribute__((iboutlet))\"" + , "\"-DIBOutletCollection(ClassName)=__attribute__((iboutletcollection(ClassName)))\"" + , "\"-DIBAction=void)__attribute__((ibaction)\""} + + -- init asflags + gcc.asflags = { flags_arch } + + -- init ldflags + gcc.ldflags = { flags_arch } + + -- init shflags + gcc.shflags = { flags_arch, "-shared -Wl,-soname" } + + -- init flags map + gcc.mapflags = + { + -- others + ["-ftrapv"] = gcc._check + , ["-fsanitize=address"] = gcc._check + } + +end + +-- make the compile command +function gcc.command_compile(srcfile, objfile, flags) + + -- make it + return string.format("%s -c %s -o%s %s", gcc.name, flags, objfile, srcfile) +end + +-- make the link command +function gcc.command_link(objfiles, targetfile, flags) + + -- make it + return string.format("%s %s -o%s %s", gcc.name, flags, targetfile, objfiles) +end + +-- make the define flag +function gcc.flag_define(define) + + -- make it + return "-D" .. define +end + +-- make the includedir flag +function gcc.flag_includedir(includedir) + + -- make it + return "-I" .. includedir +end + +-- make the link flag +function gcc.flag_link(link) + + -- make it + return "-l" .. link +end + +-- make the linkdir flag +function gcc.flag_linkdir(linkdir) + + -- make it + return "-L" .. linkdir +end + +-- the main function +function gcc.main(...) + + -- ok + return true +end + +-- return module: gcc +return gcc |
