summaryrefslogtreecommitdiff
path: root/xmake/platforms/iphoneos/xmake.lua
blob: d7dd5b3ff4d4c58e3b2796c918f00dd281a253bd (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
140
141
142
143
--!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) 2015 - 2016, ruki All rights reserved.
--
-- @author      ruki
-- @file        xmake.lua
--

-- define platform
platform("iphoneos")

    -- set os
    set_os("ios")

    -- set hosts
    set_hosts("macosx")

    -- set archs
    set_archs("armv7", "armv7s", "arm64", "i386", "x86_64")

    -- 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", ".dylib"}

        -- iphoneos or iphonesimulator?
        local arch = config.get("arch")
        if arch == "i386" or arch == "x86_64" then

            -- init flags for architecture
            local target_minver = config.get("target_minver")
            _g.cxflags = { "-arch " .. arch, "-mios-simulator-version-min=" .. target_minver }
            _g.mxflags = { "-arch " .. arch, "-mios-simulator-version-min=" .. target_minver }
            _g.asflags = { "-arch " .. arch, "-mios-simulator-version-min=" .. target_minver }
            _g.ldflags = { "-arch " .. arch, "-ObjC", "-lstdc++", "-fobjc-link-runtime", "-mios-simulator-version-min=" .. target_minver }
            _g.shflags = { "-arch " .. arch, "-ObjC", "-lstdc++", "-fobjc-link-runtime", "-mios-simulator-version-min=" .. target_minver }
            _g.ldflags = { "-arch " .. arch, "-Xlinker -objc_abi_version", "-Xlinker 2 -stdlib=libc++", "-Xlinker -no_implicit_dylibs", "-fobjc-link-runtime", "-mios-simulator-version-min=" .. target_minver }
            _g.shflags = { "-arch " .. arch, "-Xlinker -objc_abi_version", "-Xlinker 2 -stdlib=libc++", "-Xlinker -no_implicit_dylibs", "-fobjc-link-runtime", "-mios-simulator-version-min=" .. target_minver }
            _g.scflags = { format("-target %s-apple-ios%s", arch, target_minver) }

            -- init flags for the xcode sdk directory
            local xcode_dir     = config.get("xcode_dir")
            local xcode_sdkver  = config.get("xcode_sdkver")
            local xcode_sdkdir  = xcode_dir .. "/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator" .. xcode_sdkver .. ".sdk"
            insert(_g.cxflags, "-isysroot " .. xcode_sdkdir)
            insert(_g.asflags, "-isysroot " .. xcode_sdkdir)
            insert(_g.mxflags, "-isysroot " .. xcode_sdkdir)
            insert(_g.ldflags, "-isysroot " .. xcode_sdkdir)
            insert(_g.shflags, "-isysroot " .. xcode_sdkdir)
            insert(_g.scflags, "-sdk " .. xcode_sdkdir)

            -- save swift link directory for tools
            config.set("__swift_linkdirs", xcode_dir .. "/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphonesimulator")
        else

            -- init flags for architecture
            local target_minver = config.get("target_minver")
            _g.cxflags = { "-arch " .. arch, "-miphoneos-version-min=" .. target_minver }
            _g.mxflags = { "-arch " .. arch, "-miphoneos-version-min=" .. target_minver }
            _g.asflags = { "-arch " .. arch, "-miphoneos-version-min=" .. target_minver }
            _g.ldflags = { "-arch " .. arch, "-ObjC", "-lstdc++", "-fobjc-link-runtime", "-miphoneos-version-min=" .. target_minver }
            _g.shflags = { "-arch " .. arch, "-ObjC", "-lstdc++", "-fobjc-link-runtime", "-miphoneos-version-min=" .. target_minver }
            _g.scflags = { format("-target %s-apple-ios%s", arch, target_minver) }

            -- init flags for the xcode sdk directory
            local xcode_dir     = config.get("xcode_dir")
            local xcode_sdkver  = config.get("xcode_sdkver")
            local xcode_sdkdir  = xcode_dir .. "/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS" .. xcode_sdkver .. ".sdk"
            insert(_g.cxflags, "-isysroot " .. xcode_sdkdir)
            insert(_g.asflags, "-isysroot " .. xcode_sdkdir)
            insert(_g.mxflags, "-isysroot " .. xcode_sdkdir)
            insert(_g.ldflags, "-isysroot " .. xcode_sdkdir)
            insert(_g.shflags, "-isysroot " .. xcode_sdkdir)
            insert(_g.scflags, "-sdk " .. xcode_sdkdir)

            -- save swift link directory for tools
            config.set("__swift_linkdirs", xcode_dir .. "/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos")
        end
    end)

    -- set menu
    set_menu({
                config = 
                {   
                    {}   
                ,   {nil, "mm",             "kv", nil,          "the objc compiler"                 }
                ,   {nil, "mxx",            "kv", nil,          "the objc++ compiler"               }
                ,   {nil, "mflags",         "kv", nil,          "the objc compiler flags"           }
                ,   {nil, "mxflags",        "kv", nil,          "the objc/c++ compiler flags"       }
                ,   {nil, "mxxflags",       "kv", nil,          "the objc++ compiler flags"         }
                ,   {}
                ,   {nil, "xcode_dir",      "kv", "auto",       "the xcode application directory"   }
                ,   {nil, "xcode_sdkver",   "kv", "auto",       "the sdk version for xcode"         }
                ,   {nil, "target_minver",  "kv", "auto",       "the target minimal version"        }
                ,   {}
                ,   {nil, "mobileprovision","kv", "auto",       "The Provisioning Profile File"     }
                ,   {nil, "codesign",       "kv", "auto",       "The Code Signing Indentity"        }
                ,   {nil, "entitlements",   "kv", "auto",       "The Code Signing Entitlements"     }
                }

            ,   global = 
                {   
                    {}
                ,   {nil, "xcode_dir",      "kv", "auto",       "the xcode application directory"   }
                ,   {}
                ,   {nil, "mobileprovision","kv", "auto",       "The Provisioning Profile File"     }
                ,   {nil, "codesign",       "kv", "auto",       "The Code Signing Indentity"        }
                ,   {nil, "entitlements",   "kv", "auto",       "The Code Signing Entitlements"     }
                }
            })