summaryrefslogtreecommitdiff
path: root/xmake/platforms/android/xmake.lua
blob: 7595d78c78c97d586c7acac9807d3053393147ef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
--!The Make-like Build Utility based on Lua
-- 
-- 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) 2015 - 2016, ruki All rights reserved.
--
-- @author      ruki
-- @file        xmake.lua
--

-- define platform
platform("android")

    -- set os
    set_os("android")

    -- set hosts
    set_hosts("macosx", "linux", "windows")

    -- set archs
    set_archs("armv5te", "armv6", "armv7-a", "armv8-a", "arm64-v8a")

    -- set checker
    set_checker("checker")

    -- set tooldirs
    set_tooldirs("/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin")

    -- on load
    on_load(function ()

        -- imports
        import("core.project.config")
       
        -- init the file formats
        _g.formats          = {}
        _g.formats.static   = {"lib", ".a"}
        _g.formats.object   = {"",    ".o"}
        _g.formats.shared   = {"lib", ".so"}
        _g.formats.symbol   = {"",    ".sym"}
    
        -- init flags
        local arch = config.get("arch")
        if arch:startswith("arm64") then
            _g.cxflags      = {}
            _g.asflags      = {}
            _g.ldflags      = {"-llog"}
            _g.shflags      = {"-llog"}
            _g.cxxflags     = {}
        else
            _g.cxflags      = { "-march=" .. arch, "-mthumb"}
            _g.asflags      = { "-march=" .. arch, "-mthumb"}
            _g.ldflags      = { "-march=" .. arch, "-llog", "-mthumb"}
            _g.shflags      = { "-march=" .. arch, "-llog", "-mthumb"}
            _g.cxxflags     = {}
        end

        -- add flags for the sdk directory of ndk
        local ndk = config.get("ndk")
        local ndk_sdkver = config.get("ndk_sdkver")
        if ndk and ndk_sdkver then

            -- get ndk sdk directory
            local ndk_sdkdir = path.translate(format("%s/platforms/android-%d", ndk, ndk_sdkver)) 

            -- add sysroot
            if arch:startswith("arm64") then
                insert(_g.cxflags, format("--sysroot=%s/arch-arm64", ndk_sdkdir))
                insert(_g.asflags, format("--sysroot=%s/arch-arm64", ndk_sdkdir))
                insert(_g.ldflags, format("--sysroot=%s/arch-arm64", ndk_sdkdir))
                insert(_g.shflags, format("--sysroot=%s/arch-arm64", ndk_sdkdir))
            else
                insert(_g.cxflags, format("--sysroot=%s/arch-arm", ndk_sdkdir))
                insert(_g.asflags, format("--sysroot=%s/arch-arm", ndk_sdkdir))
                insert(_g.ldflags, format("--sysroot=%s/arch-arm", ndk_sdkdir))
                insert(_g.shflags, format("--sysroot=%s/arch-arm", ndk_sdkdir))
            end

            -- only for c++ stl
            local toolchains_ver = config.get("toolchains_ver")
            if toolchains_ver then

                -- get c++ stl sdk directory
                local cxxstl_sdkdir = path.translate(format("%s/sources/cxx-stl/gnu-libstdc++/%s", ndk, toolchains_ver)) 

                -- the toolchains archs
                local toolchains_archs = 
                {
                    ["armv5te"]     = "armeabi"
                ,   ["armv6"]       = "armeabi"
                ,   ["armv7-a"]     = "armeabi-v7a"
                ,   ["armv8-a"]     = "armeabi-v8a"
                ,   ["arm64-v8a"]   = "arm64-v8a"
                }

                -- add search directories for c++ stl
                insert(_g.cxxflags, format("-I%s/include", cxxstl_sdkdir))
                if toolchains_archs[arch] then
                    insert(_g.cxxflags, format("-I%s/libs/%s/include", cxxstl_sdkdir, toolchains_archs[arch]))
                    insert(_g.ldflags, format("-L%s/libs/%s", cxxstl_sdkdir, toolchains_archs[arch]))
                    insert(_g.shflags, format("-L%s/libs/%s", cxxstl_sdkdir, toolchains_archs[arch]))
                    insert(_g.ldflags, format("-lgnustl_static"))
                    insert(_g.shflags, format("-lgnustl_static"))
                end
            end
        end
    end)

    -- set menu
    set_menu({
                config = 
                {   
                    {}
                ,   {nil, "ndk",            "kv", nil,          "The NDK Directory"             }
                ,   {nil, "ndk_sdkver",     "kv", "auto",       "The SDK Version for NDK"       }
                }

            ,   global = 
                {   
                    {}
                ,   {nil, "ndk",            "kv", nil,          "The NDK Directory"             }
                ,   {nil, "ndk_sdkver",     "kv", "auto",       "The SDK Version for NDK"       }
                }
            })