summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2020-04-04 15:27:24 +0800
committerruki <[email protected]>2020-04-04 15:27:24 +0800
commitdd8d60cd3a0ebde713fea7010926ab034243f884 (patch)
tree8e61580c5783afaef8fd2a37b5be8e07408fc0d7
parentdadee422f340ce6e96a7adbd64aa3941a2d31707 (diff)
improve xcode.framework rule
-rw-r--r--tests/projects/objc/application/src/main.m10
-rw-r--r--tests/projects/objc/application/xmake.lua5
-rw-r--r--tests/projects/objc/bundle/xmake.lua24
-rw-r--r--tests/projects/objc/framework/src/Info.plist24
-rw-r--r--tests/projects/objc/framework/xmake.lua12
-rw-r--r--xmake/rules/xcode/application/xmake.lua28
-rw-r--r--xmake/rules/xcode/bundle/xmake.lua28
-rw-r--r--xmake/rules/xcode/framework/xmake.lua107
8 files changed, 213 insertions, 25 deletions
diff --git a/tests/projects/objc/application/src/main.m b/tests/projects/objc/application/src/main.m
new file mode 100644
index 000000000..47ac6bdc2
--- /dev/null
+++ b/tests/projects/objc/application/src/main.m
@@ -0,0 +1,10 @@
+#import <Foundation/Foundation.h>
+
+int main(int argc, char** argv)
+{
+ @autoreleasepool
+ {
+ NSLog(@"hello xmake!");
+ }
+ return 0;
+}
diff --git a/tests/projects/objc/application/xmake.lua b/tests/projects/objc/application/xmake.lua
new file mode 100644
index 000000000..83522c669
--- /dev/null
+++ b/tests/projects/objc/application/xmake.lua
@@ -0,0 +1,5 @@
+add_rules("mode.debug", "mode.release")
+
+target("demo")
+ add_rules("xcode.application")
+ add_files("src/main.m")
diff --git a/tests/projects/objc/bundle/xmake.lua b/tests/projects/objc/bundle/xmake.lua
index 5073b3b0f..e8d0738ce 100644
--- a/tests/projects/objc/bundle/xmake.lua
+++ b/tests/projects/objc/bundle/xmake.lua
@@ -1,22 +1,10 @@
--- add rules
add_rules("mode.debug", "mode.release")
--- add frameworks
-add_frameworks("Foundation", "CoreFoundation")
+target("test")
+ add_rules("xcode.bundle")
+ add_files("src/test.m")
--- for macosx or ios
-if is_os("macosx", "ios") then
-
- -- enable arc?
- add_mxflags("-fobjc-arc")
-end
-
--- add target
-target("console_objc")
-
- -- set kind
+target("demo")
set_kind("binary")
-
- -- add files
- add_files("src/*.m")
-
+ add_deps("test")
+ add_files("src/main.m")
diff --git a/tests/projects/objc/framework/src/Info.plist b/tests/projects/objc/framework/src/Info.plist
new file mode 100644
index 000000000..20608314e
--- /dev/null
+++ b/tests/projects/objc/framework/src/Info.plist
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>$(DEVELOPMENT_LANGUAGE)</string>
+ <key>CFBundleExecutable</key>
+ <string>$(EXECUTABLE_NAME)</string>
+ <key>CFBundleIdentifier</key>
+ <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>$(PRODUCT_NAME)</string>
+ <key>CFBundlePackageType</key>
+ <string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.0</string>
+ <key>CFBundleVersion</key>
+ <string>$(CURRENT_PROJECT_VERSION)</string>
+ <key>NSHumanReadableCopyright</key>
+ <string>Copyright © 2020 tboox. All rights reserved.</string>
+</dict>
+</plist>
diff --git a/tests/projects/objc/framework/xmake.lua b/tests/projects/objc/framework/xmake.lua
index 2e1de864c..683b2ea7d 100644
--- a/tests/projects/objc/framework/xmake.lua
+++ b/tests/projects/objc/framework/xmake.lua
@@ -1,15 +1,13 @@
add_rules("mode.debug", "mode.release")
-add_frameworks("Foundation", "CoreFoundation")
-
-if is_os("macosx", "ios") then
- add_mxflags("-fobjc-arc")
-end
target("test")
- set_kind("shared")
+ add_rules("xcode.framework")
add_files("src/test.m")
+ add_headerfiles("src/*.h")
+ add_installfiles("src/Info.plist")
+ --[[
target("demo")
set_kind("binary")
add_deps("test")
- add_files("src/main.m")
+ add_files("src/main.m")]]
diff --git a/xmake/rules/xcode/application/xmake.lua b/xmake/rules/xcode/application/xmake.lua
new file mode 100644
index 000000000..91ec7dbda
--- /dev/null
+++ b/xmake/rules/xcode/application/xmake.lua
@@ -0,0 +1,28 @@
+--!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-2020, TBOOX Open Source Group.
+--
+-- @author ruki
+-- @file xmake.lua
+--
+
+-- define rule: xcode application
+rule("xcode.application")
+
+ -- we must set kind before target.on_load(), may we will use target in on_load()
+ before_load(function (target)
+ target:set("kind", "binary")
+ end)
+
diff --git a/xmake/rules/xcode/bundle/xmake.lua b/xmake/rules/xcode/bundle/xmake.lua
new file mode 100644
index 000000000..e3b146c69
--- /dev/null
+++ b/xmake/rules/xcode/bundle/xmake.lua
@@ -0,0 +1,28 @@
+--!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-2020, TBOOX Open Source Group.
+--
+-- @author ruki
+-- @file xmake.lua
+--
+
+-- define rule: xcode bundle
+rule("xcode.bundle")
+
+ -- we must set kind before target.on_load(), may we will use target in on_load()
+ before_load(function (target)
+ target:set("kind", "shared")
+ end)
+
diff --git a/xmake/rules/xcode/framework/xmake.lua b/xmake/rules/xcode/framework/xmake.lua
new file mode 100644
index 000000000..fb61a25af
--- /dev/null
+++ b/xmake/rules/xcode/framework/xmake.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-2020, TBOOX Open Source Group.
+--
+-- @author ruki
+-- @file xmake.lua
+--
+
+-- define rule: xcode framework
+rule("xcode.framework")
+
+ -- we must set kind before target.on_load(), may we will use target in on_load()
+ before_load(function (target)
+ local frameworkdir = path.join(target:targetdir(), target:basename() .. ".framework")
+ target:set("kind", "shared")
+ target:set("filename", target:basename())
+ target:set("targetdir", path.join(frameworkdir, "Versions", "A"))
+ target:data_set("xcode.frameworkdir", frameworkdir)
+ target:add("cleanfiles", frameworkdir)
+ end)
+
+ after_build(function (target)
+
+ -- get framework directory
+ local frameworkdir = path.absolute(target:data("xcode.frameworkdir"))
+ local headersdir = path.join(frameworkdir, "Versions", "A", "Headers")
+ local resourcesdir = path.join(frameworkdir, "Versions", "A", "Resources")
+
+ -- copy header files to the framework directory
+ local srcheaders, dstheaders = target:headerfiles(headersdir)
+ if srcheaders and dstheaders then
+ local i = 1
+ for _, srcheader in ipairs(srcheaders) do
+ local dstheader = dstheaders[i]
+ if dstheader then
+ os.vcp(srcheader, dstheader)
+ end
+ i = i + 1
+ end
+ end
+ if not os.isdir(headersdir) then
+ os.mkdir(headersdir)
+ end
+
+ -- copy resource files to the framework directory
+ local srcfiles, dstfiles = target:installfiles(resourcesdir)
+ if srcfiles and dstfiles then
+ local i = 1
+ for _, srcfile in ipairs(srcfiles) do
+ local dstfile = dstfiles[i]
+ if dstfile then
+ os.vcp(srcfile, dstfile)
+ end
+ i = i + 1
+ end
+ end
+ if not os.isdir(resourcesdir) then
+ os.mkdir(resourcesdir)
+ end
+
+ -- link Versions/Current -> Versions/A
+ local oldir = os.cd(path.join(frameworkdir, "Versions"))
+ os.tryrm("Current")
+ os.ln("A", "Current")
+
+ -- link frameworkdir/* -> Versions/Current/*
+ local target_filename = path.filename(target:targetfile())
+ os.cd(frameworkdir)
+ os.tryrm("Headers")
+ os.tryrm("Resources")
+ os.tryrm(target_filename)
+ os.ln("Versions/Current/Headers", "Headers")
+ os.ln("Versions/Current/Resources", "Resources")
+ os.ln(path.join("Versions/Current", target_filename), target_filename)
+ os.cd(oldir)
+ end)
+
+ on_install(function (target)
+ local frameworkdir = path.absolute(target:data("xcode.frameworkdir"))
+ local installdir = target:installdir()
+ if not os.isdir(installdir) then
+ os.mkdir(installdir)
+ end
+ os.vcp(frameworkdir, installdir)
+ end)
+
+ on_uninstall(function (target)
+ local frameworkdir = path.absolute(target:data("xcode.frameworkdir"))
+ local installdir = target:installdir()
+ os.tryrm(path.join(installdir, path.filename(frameworkdir)))
+ end)
+
+ -- disable package
+ on_package(function (target) end)
+