diff options
| author | ruki <[email protected]> | 2021-09-02 18:16:11 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-09-02 18:16:11 +0800 |
| commit | 20c34dcaf9ff92ecf08a1cec7e4d1be9836e6067 (patch) | |
| tree | 69f67a0667475a27ad05178bfbe25746bc060bef /xmake/modules/core/tools/fpc.lua | |
| parent | ce527abaa4e78b5d2d194512f875681e501794ac (diff) | |
| parent | 767219ac1f3fb11f592d5a84b62cc2f199ab893a (diff) | |
Merge pull request #1629 from xmake-io/pascal
Add Pascal language support
Diffstat (limited to 'xmake/modules/core/tools/fpc.lua')
| -rw-r--r-- | xmake/modules/core/tools/fpc.lua | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/xmake/modules/core/tools/fpc.lua b/xmake/modules/core/tools/fpc.lua new file mode 100644 index 000000000..de5b349c6 --- /dev/null +++ b/xmake/modules/core/tools/fpc.lua @@ -0,0 +1,107 @@ +--!A cross-platform build utility based on Lua +-- +-- Licensed 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-present, TBOOX Open Source Group. +-- +-- @author ruki +-- @file fpc.lua +-- + +-- imports +import("core.base.option") +import("core.project.config") +import("core.project.project") + +-- init it +function init(self) +end + +-- make the optimize flag +function nf_optimize(self, level) + local maps = + { + none = "-O-" + , fast = "-O1" + , fastest = "-O3" + , smallest = "-O2" + , aggressive = "-O4" + } + return maps[level] +end + +-- make the strip flag +function nf_strip(self, level) + if level == "all" then + return "-Xs" + end +end + +-- make the symbol flag +function nf_symbol(self, level) + if level == "debug" and self:kind() == "pc" then + if self:plat() == "windows" then + return {"-gw3", "-WN"} + else + return "-gw3" + end + end +end + +-- make the link flag +function nf_link(self, lib) + return "-k-l" .. lib +end + +-- make the syslink flag +function nf_syslink(self, lib) + return nf_link(self, lib) +end + +-- make the linkdir flag +function nf_linkdir(self, dir) + return {"-k-L" .. dir} +end + +-- make the rpathdir flag +function nf_rpathdir(self, dir) + dir = path.translate(dir) + if self:has_flags("-k-rpath=" .. dir, "ldflags") then + return {"-k-rpath=" .. (dir:gsub("@[%w_]+", function (name) + local maps = {["@loader_path"] = "$ORIGIN", ["@executable_path"] = "$ORIGIN"} + return maps[name] + end))} + end +end + +-- make the framework flag +function nf_framework(self, framework) + return {"-k-framework", framework} +end + +-- make the frameworkdir flag +function nf_frameworkdir(self, frameworkdir) + return {"-k-F", path.translate(frameworkdir)} +end + +-- make the build arguments list +function buildargv(self, sourcefiles, targetkind, targetfile, flags) + return self:program(), table.join(flags, "-o" .. targetfile, sourcefiles) +end + +-- build the target file +function build(self, sourcefiles, targetkind, targetfile, flags) + os.mkdir(path.directory(targetfile)) + os.runv(buildargv(self, sourcefiles, targetkind, targetfile, flags)) +end + |
