From 22b6a339a7561086e4f556b9e26b3bbde3b43a65 Mon Sep 17 00:00:00 2001 From: JX-Master Date: Thu, 3 Apr 2025 12:06:48 +0800 Subject: Add new native xcode generator (xcode2). --- xmake/plugins/project/xcode2/get_xcode_info.lua | 240 ++++++++++++++++++++++++ 1 file changed, 240 insertions(+) create mode 100644 xmake/plugins/project/xcode2/get_xcode_info.lua (limited to 'xmake/plugins/project/xcode2/get_xcode_info.lua') diff --git a/xmake/plugins/project/xcode2/get_xcode_info.lua b/xmake/plugins/project/xcode2/get_xcode_info.lua new file mode 100644 index 000000000..388b273bf --- /dev/null +++ b/xmake/plugins/project/xcode2/get_xcode_info.lua @@ -0,0 +1,240 @@ +--!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 JXMaster +-- @file get_xcode_info.lua +-- + +-- imports +import("core.base.option") +import("core.project.config") +import("core.project.project") + +function _get_project_modes() + local ret_modes = {} + local modes = option.get("modes") + if modes then + if not modes:find("\"") then + modes = modes:gsub(",", path.envsep()) + end + for _, mode in ipairs(path.splitenv(modes)) do + table.insert(ret_modes, mode:trim()) + end + else + ret_modes = project.modes() + end + return ret_modes +end + +function _add_PBXFileReference(xcinfo, file_info) + local obj = {} + obj.explicitFileType = file_info.explicitFileType + obj.lastKnownFileType = file_info.lastKnownFileType + obj.name = file_info.name + obj.path = file_info.path + obj.sourceTree = file_info.sourceTree + obj.includeInIndex = file_info.includeInIndex + local uuid = xcinfo:gen_uuid() + xcinfo.sections.PBXFileReference = xcinfo.sections.PBXFileReference or {} + xcinfo.sections.PBXFileReference[uuid] = obj + return uuid +end + +function _add_PBXGroup(xcinfo, name, sourceTree) + local obj = {} + obj.name = name + obj.sourceTree = sourceTree + obj.children = {} + local uuid = xcinfo:gen_uuid() + xcinfo.sections.PBXGroup = xcinfo.sections.PBXGroup or {} + xcinfo.sections.PBXGroup[uuid] = obj + return uuid +end + +function _add_XCBuildConfiguration(xcinfo, mode) + local obj = {} + obj.name = mode + obj.buildSettings = {} + -- This allows scripts to read/write files that are not in the Input/Output list of + -- the phase. + obj.buildSettings.ENABLE_USER_SCRIPT_SANDBOXING = false + local uuid = xcinfo:gen_uuid() + xcinfo.sections.XCBuildConfiguration = xcinfo.sections.XCBuildConfiguration or {} + xcinfo.sections.XCBuildConfiguration[uuid] = obj + return uuid +end + +function _add_XCConfigurationList(xcinfo) + local obj = {} + local modes = _get_project_modes() + obj.buildConfigurations = {} + for _, mode in ipairs(modes) do + table.insert(obj.buildConfigurations, _add_XCBuildConfiguration(xcinfo, mode)) + end + local uuid = xcinfo:gen_uuid() + xcinfo.sections.XCConfigurationList = xcinfo.sections.XCConfigurationList or {} + xcinfo.sections.XCConfigurationList[uuid] = obj + return uuid +end + +function _add_PBXShellScriptBuildPhase(xcinfo, target) + local obj = {} + obj.shellScript = [[ +cd \"]] .. os.projectdir() .. [[\" +XMAKE_BIN=\"]] .. os.programfile() .. [[\" +# Running xmake scripts. +${XMAKE_BIN} f -y -m ${CONFIGURATION} -p ${PLATFORM_NAME} -a ${NATIVE_ARCH} -o ${BUILD_DIR} +${XMAKE_BIN} build ${TARGET_NAME}\n# Running xmake install scripts. +${XMAKE_BIN} install -o ${CONFIGURATION_TEMP_DIR}/Install ${TARGET_NAME} +# Copy files to build path. +if test -e ${CONFIGURATION_TEMP_DIR}/Install/bin +then + cp -r ${CONFIGURATION_TEMP_DIR}/Install/bin/* ${CONFIGURATION_BUILD_DIR} +fi +if test -e ${CONFIGURATION_TEMP_DIR}/Install/lib +then + cp -r ${CONFIGURATION_TEMP_DIR}/Install/lib/* ${CONFIGURATION_BUILD_DIR} +fi +cp -r ${CONFIGURATION_TEMP_DIR}/Install/*.app ${CONFIGURATION_BUILD_DIR} +# Remove install dir. +rm -r ${CONFIGURATION_TEMP_DIR}/Install\n\n +]] + local uuid = xcinfo:gen_uuid() + xcinfo.sections.PBXShellScriptBuildPhase = xcinfo.sections.PBXShellScriptBuildPhase or {} + xcinfo.sections.PBXShellScriptBuildPhase[uuid] = obj + return uuid +end + +function _add_target_files(xcinfo, group, files) + for _, v in table.orderpairs(files) do + local file_info = {} + file_info.name = path.filename(v) + file_info.path = path.join(project.directory(), v) + file_info.sourceTree = "\"\"" + local ext = path.extension(v) + if ext == ".h" then + file_info.lastKnownFileType = "sourcecode.c.h" + elseif ext == ".c" then + file_info.lastKnownFileType = "sourcecode.c.c" + elseif ext == ".m" then + file_info.lastKnownFileType = "sourcecode.c.objc" + elseif ext == ".hpp" then + file_info.lastKnownFileType = "sourcecode.cpp.h" + elseif ext == ".cpp" then + file_info.lastKnownFileType = "sourcecode.cpp.cpp" + elseif ext == ".mm" then + file_info.lastKnownFileType = "sourcecode.cpp.objcpp" + end + table.insert(group.children, _add_PBXFileReference(xcinfo, file_info)) + end +end + +function _add_PBXNativeTarget(xcinfo, target_name, target) + local obj = {} + obj.name = target_name + obj.productName = target_name + -- Add product file. + local product_file = {} + if target:kind() == "static" then + product_file.explicitFileType = "com.apple.product-type.library.static" + elseif target:kind() == "shared" then + product_file.explicitFileType = "com.apple.product-type.library.dynamic" + elseif target:kind() == "binary" then + product_file.explicitFileType = "com.apple.product-type.tool" + end + product_file.path = target:filename() + product_file.sourceTree = "BUILT_PRODUCTS_DIR" + product_file.includeInIndex = 0 + obj.productReference = _add_PBXFileReference(xcinfo, product_file) + obj.productType = product_file.explicitFileType + -- Add product file to product group. + local project_obj = xcinfo.sections.PBXProject[xcinfo.root_object] + local product_group = xcinfo.sections.PBXGroup[project_obj.productRefGroup] + table.insert(product_group.children, obj.productReference) + + -- Add files. + local headerfiles = target:headerfiles() + local sourcefiles = target:sourcefiles() + obj.headerFileGroup = _add_PBXGroup(xcinfo, "Header Files", "") + obj.sourceFileGroup = _add_PBXGroup(xcinfo, "Source Files", "") + local header_group = xcinfo.sections.PBXGroup[obj.headerFileGroup] + local source_group = xcinfo.sections.PBXGroup[obj.sourceFileGroup] + _add_target_files(xcinfo, header_group, headerfiles) + _add_target_files(xcinfo, source_group, sourcefiles) + obj.mainGroup = _add_PBXGroup(xcinfo, obj.productName, "") + local main_group = xcinfo.sections.PBXGroup[obj.mainGroup] + table.insert(main_group.children, obj.headerFileGroup) + table.insert(main_group.children, obj.sourceFileGroup) + -- Add configuration list for target. + obj.buildConfigurationList = _add_XCConfigurationList(xcinfo) + -- Add build phases. + obj.buildPhases = {} + table.insert(obj.buildPhases, _add_PBXShellScriptBuildPhase(xcinfo, target)) + local uuid = xcinfo:gen_uuid() + xcinfo.sections.PBXNativeTarget = xcinfo.sections.PBXNativeTarget or {} + xcinfo.sections.PBXNativeTarget[uuid] = obj + return uuid +end + +function main(outputdir) + local xcinfo = {} + + xcinfo.project_dir = outputdir + xcinfo.project_bundle = (project.name() or path.filename(project.directory())) .. ".xcodeproj" + xcinfo.project_dir_uuid = string.upper(hash.strhash32(xcinfo.project_dir)) + xcinfo.project_bundle_uuid = string.upper(hash.strhash32(xcinfo.project_bundle)) + xcinfo.uuid_counter = 0 + xcinfo.gen_uuid = function(self) + local counter = self.uuid_counter + self.uuid_counter = self.uuid_counter + 1 + return self.project_dir_uuid .. self.project_bundle_uuid .. string.format("%08X", counter) + end + + -- Used to collect Xcode nodes. + -- nodes are grouped by their types. For example, all PBXFileReference + -- nodes will be in xcinfo.sections.PBXFileReference, indexed by their UUIDs. + xcinfo.sections = {} + + -- Add project node + local sections = xcinfo.sections + sections.PBXProject = {} + local project_uuid = xcinfo:gen_uuid() + xcinfo.root_object = project_uuid + sections.PBXProject[project_uuid] = {} + local project_obj = sections.PBXProject[project_uuid] + + -- collect buildConfigurationList + project_obj.buildConfigurationList = _add_XCConfigurationList(xcinfo) + + -- collect main group + project_obj.mainGroup = _add_PBXGroup(xcinfo, nil, "") + local main_group = xcinfo.sections.PBXGroup[project_obj.mainGroup] + + -- collect product ref group + project_obj.productRefGroup = _add_PBXGroup(xcinfo, "Products", ""); + + -- collect targets. + project_obj.targets = {} + for target_name, target in table.orderpairs(project.targets()) do + local target = _add_PBXNativeTarget(xcinfo, target_name, target) + table.insert(project_obj.targets, target) + local target_obj = xcinfo.sections.PBXNativeTarget[target] + table.insert(main_group.children, target_obj.mainGroup) + end + table.insert(main_group.children, project_obj.productRefGroup) + + return xcinfo +end \ No newline at end of file -- cgit v1.3.1 From 8b48aee3110ea81162a66c6909ec07de24ba3e90 Mon Sep 17 00:00:00 2001 From: JX-Master Date: Mon, 28 Apr 2025 11:33:38 +0800 Subject: Add macOS application bundle (.app) generation support. --- xmake/plugins/project/xcode2/get_xcode_info.lua | 62 ++++++++++++++++++------- xmake/plugins/project/xcode2/pbxproj.lua | 42 +++++++++++++++-- 2 files changed, 83 insertions(+), 21 deletions(-) (limited to 'xmake/plugins/project/xcode2/get_xcode_info.lua') diff --git a/xmake/plugins/project/xcode2/get_xcode_info.lua b/xmake/plugins/project/xcode2/get_xcode_info.lua index 388b273bf..d95834998 100644 --- a/xmake/plugins/project/xcode2/get_xcode_info.lua +++ b/xmake/plugins/project/xcode2/get_xcode_info.lua @@ -64,25 +64,38 @@ function _add_PBXGroup(xcinfo, name, sourceTree) return uuid end -function _add_XCBuildConfiguration(xcinfo, mode) +-- target may be nil. +function _add_XCBuildConfiguration(xcinfo, mode, target) local obj = {} obj.name = mode obj.buildSettings = {} -- This allows scripts to read/write files that are not in the Input/Output list of -- the phase. obj.buildSettings.ENABLE_USER_SCRIPT_SANDBOXING = false + if target then + local rules = target:rules() + local is_app_bundle = false + if rules["xcode.application"] ~= nil then + is_app_bundle = true + end + if is_app_bundle then + obj.buildSettings.GENERATE_INFOPLIST_FILE = true + obj.buildSettings.PRODUCT_NAME = "$(TARGET_NAME)" + end + end local uuid = xcinfo:gen_uuid() xcinfo.sections.XCBuildConfiguration = xcinfo.sections.XCBuildConfiguration or {} xcinfo.sections.XCBuildConfiguration[uuid] = obj return uuid end -function _add_XCConfigurationList(xcinfo) +-- target may be nil. +function _add_XCConfigurationList(xcinfo, target) local obj = {} local modes = _get_project_modes() obj.buildConfigurations = {} for _, mode in ipairs(modes) do - table.insert(obj.buildConfigurations, _add_XCBuildConfiguration(xcinfo, mode)) + table.insert(obj.buildConfigurations, _add_XCBuildConfiguration(xcinfo, mode, target)) end local uuid = xcinfo:gen_uuid() xcinfo.sections.XCConfigurationList = xcinfo.sections.XCConfigurationList or {} @@ -98,19 +111,16 @@ XMAKE_BIN=\"]] .. os.programfile() .. [[\" # Running xmake scripts. ${XMAKE_BIN} f -y -m ${CONFIGURATION} -p ${PLATFORM_NAME} -a ${NATIVE_ARCH} -o ${BUILD_DIR} ${XMAKE_BIN} build ${TARGET_NAME}\n# Running xmake install scripts. -${XMAKE_BIN} install -o ${CONFIGURATION_TEMP_DIR}/Install ${TARGET_NAME} +XMAKE_BUILD_DIR=${BUILD_DIR}/${PLATFORM_NAME}/${NATIVE_ARCH}/${CONFIGURATION} # Copy files to build path. -if test -e ${CONFIGURATION_TEMP_DIR}/Install/bin +if test -e ${CONFIGURATION_BUILD_DIR} then - cp -r ${CONFIGURATION_TEMP_DIR}/Install/bin/* ${CONFIGURATION_BUILD_DIR} + rm -r ${CONFIGURATION_BUILD_DIR}/* fi -if test -e ${CONFIGURATION_TEMP_DIR}/Install/lib +if test -e ${XMAKE_BUILD_DIR} then - cp -r ${CONFIGURATION_TEMP_DIR}/Install/lib/* ${CONFIGURATION_BUILD_DIR} + cp -r ${XMAKE_BUILD_DIR}/* ${CONFIGURATION_BUILD_DIR} fi -cp -r ${CONFIGURATION_TEMP_DIR}/Install/*.app ${CONFIGURATION_BUILD_DIR} -# Remove install dir. -rm -r ${CONFIGURATION_TEMP_DIR}/Install\n\n ]] local uuid = xcinfo:gen_uuid() xcinfo.sections.PBXShellScriptBuildPhase = xcinfo.sections.PBXShellScriptBuildPhase or {} @@ -137,6 +147,8 @@ function _add_target_files(xcinfo, group, files) file_info.lastKnownFileType = "sourcecode.cpp.cpp" elseif ext == ".mm" then file_info.lastKnownFileType = "sourcecode.cpp.objcpp" + elseif ext == ".plist" then + file_info.lastKnownFileType = "text.plist" end table.insert(group.children, _add_PBXFileReference(xcinfo, file_info)) end @@ -146,6 +158,11 @@ function _add_PBXNativeTarget(xcinfo, target_name, target) local obj = {} obj.name = target_name obj.productName = target_name + local rules = target:rules() + local is_app_bundle = false + if rules["xcode.application"] ~= nil then + is_app_bundle = true + end -- Add product file. local product_file = {} if target:kind() == "static" then @@ -153,14 +170,27 @@ function _add_PBXNativeTarget(xcinfo, target_name, target) elseif target:kind() == "shared" then product_file.explicitFileType = "com.apple.product-type.library.dynamic" elseif target:kind() == "binary" then - product_file.explicitFileType = "com.apple.product-type.tool" + if is_app_bundle then + product_file.explicitFileType = "wrapper.application" + else + product_file.explicitFileType = "com.apple.product-type.tool" + end end - product_file.path = target:filename() + if is_app_bundle then + product_file.name = target:filename() .. ".app" + else + product_file.name = target:filename() + end + product_file.path = product_file.name product_file.sourceTree = "BUILT_PRODUCTS_DIR" product_file.includeInIndex = 0 obj.productReference = _add_PBXFileReference(xcinfo, product_file) - obj.productType = product_file.explicitFileType - -- Add product file to product group. + if is_app_bundle then + obj.productType = "com.apple.product-type.application" + else + obj.productType = product_file.explicitFileType + end + -- Add product file to product group. local project_obj = xcinfo.sections.PBXProject[xcinfo.root_object] local product_group = xcinfo.sections.PBXGroup[project_obj.productRefGroup] table.insert(product_group.children, obj.productReference) @@ -179,7 +209,7 @@ function _add_PBXNativeTarget(xcinfo, target_name, target) table.insert(main_group.children, obj.headerFileGroup) table.insert(main_group.children, obj.sourceFileGroup) -- Add configuration list for target. - obj.buildConfigurationList = _add_XCConfigurationList(xcinfo) + obj.buildConfigurationList = _add_XCConfigurationList(xcinfo, target) -- Add build phases. obj.buildPhases = {} table.insert(obj.buildPhases, _add_PBXShellScriptBuildPhase(xcinfo, target)) diff --git a/xmake/plugins/project/xcode2/pbxproj.lua b/xmake/plugins/project/xcode2/pbxproj.lua index d7f5a559a..3f66bcd20 100644 --- a/xmake/plugins/project/xcode2/pbxproj.lua +++ b/xmake/plugins/project/xcode2/pbxproj.lua @@ -70,7 +70,18 @@ function _write_section_PBXGroup(info, lines) end table.insert(lines, "\t\t\tchildren = (") for _, child in ipairs(obj.children) do - table.insert(lines, "\t\t\t\t" .. child .. ",") + local child_obj = info.sections.PBXFileReference[child] + if child_obj == nil then + child_obj = info.sections.PBXGroup[child] + end + local child_name + if child_obj then + child_name = child_obj.name + end + if child_name == nil then + child_name = "" + end + table.insert(lines, "\t\t\t\t" .. child .. " /* " .. child_name .. " */,") end table.insert(lines, "\t\t\t);") table.insert(lines, "\t\t\tsourceTree = \"" .. obj.sourceTree .. "\";") @@ -98,7 +109,15 @@ function _write_section_PBXNativeTarget(info, lines) table.insert(lines, "\t\t\tpackageProductDependencies = (") table.insert(lines, "\t\t\t);") table.insert(lines, "\t\t\tproductName = " .. obj.productName .. ";") - table.insert(lines, "\t\t\tproductReference = " .. obj.productReference .. ";") + local product_reference_name + local product_reference_obj = info.sections.PBXFileReference[obj.productReference] + if product_reference_obj then + product_reference_name = product_reference_obj.name + end + if product_reference_name == nil then + product_reference_name = "" + end + table.insert(lines, "\t\t\tproductReference = " .. obj.productReference .. " /* " .. product_reference_name .. " */;") table.insert(lines, "\t\t\tproductType = " .. obj.productType .. ";") table.insert(lines, "\t\t};") end @@ -173,9 +192,22 @@ function _write_section_XCBuildConfiguration(info, lines) table.insert(lines, "\t\t" .. uuid .. " /* " .. obj.name .. " */ = {") table.insert(lines, [[ isa = XCBuildConfiguration; - buildSettings = { - ENABLE_USER_SCRIPT_SANDBOXING = NO; - }; + buildSettings = {]]) + for k, v in pairs(obj.buildSettings) do + local string_value = "" + if v == true then + string_value = "YES" + elseif v == false then + string_value = "NO" + elseif type(v) == "string" then + string_value = "\"" .. v .. "\"" + elseif type(v) == "number" then + string_value = tostring(v) + end + table.insert(lines, "\t\t\t\t" .. k .. " = " .. string_value .. ";") + end + table.insert(lines, [[ + }; name = ]] .. obj.name .. ";") table.insert(lines, "\t\t};") end -- cgit v1.3.1 From 5659468ff81b1c80576a03a88b0402483b436172 Mon Sep 17 00:00:00 2001 From: JX-Master Date: Fri, 27 Jun 2025 12:00:04 +0800 Subject: Fix product name issue. Add SDKROOT build settings. --- xmake/plugins/project/xcode2/get_xcode_info.lua | 9 ++++++++- xmake/plugins/project/xcode2/pbxproj.lua | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) (limited to 'xmake/plugins/project/xcode2/get_xcode_info.lua') diff --git a/xmake/plugins/project/xcode2/get_xcode_info.lua b/xmake/plugins/project/xcode2/get_xcode_info.lua index d95834998..05fe21895 100644 --- a/xmake/plugins/project/xcode2/get_xcode_info.lua +++ b/xmake/plugins/project/xcode2/get_xcode_info.lua @@ -80,8 +80,15 @@ function _add_XCBuildConfiguration(xcinfo, mode, target) end if is_app_bundle then obj.buildSettings.GENERATE_INFOPLIST_FILE = true - obj.buildSettings.PRODUCT_NAME = "$(TARGET_NAME)" + obj.buildSettings.PRODUCT_NAME = "\"$(TARGET_NAME)\"" end + else + -- This is for root project. + obj.buildSettings.SUPPORTED_PLATFORMS = "\"macosx iphoneos\"" + obj.buildSettings.SDKROOT = "macosx" + obj.buildSettings["\"SDKROOT[sdk=macosx*]\""] = "macosx" + obj.buildSettings["\"SDKROOT[sdk=iphoneos]\""] = "iphoneos" + end local uuid = xcinfo:gen_uuid() xcinfo.sections.XCBuildConfiguration = xcinfo.sections.XCBuildConfiguration or {} diff --git a/xmake/plugins/project/xcode2/pbxproj.lua b/xmake/plugins/project/xcode2/pbxproj.lua index 3f66bcd20..b9cddd3ae 100644 --- a/xmake/plugins/project/xcode2/pbxproj.lua +++ b/xmake/plugins/project/xcode2/pbxproj.lua @@ -200,7 +200,7 @@ function _write_section_XCBuildConfiguration(info, lines) elseif v == false then string_value = "NO" elseif type(v) == "string" then - string_value = "\"" .. v .. "\"" + string_value = v elseif type(v) == "number" then string_value = tostring(v) end -- cgit v1.3.1 From 5cbbc97e495e58cfb37994939a24aa6c6b0b4267 Mon Sep 17 00:00:00 2001 From: ruki Date: Wed, 2 Jul 2025 10:02:42 +0800 Subject: Update get_xcode_info.lua --- xmake/plugins/project/xcode2/get_xcode_info.lua | 49 ++++++++++++++++++------- 1 file changed, 36 insertions(+), 13 deletions(-) (limited to 'xmake/plugins/project/xcode2/get_xcode_info.lua') diff --git a/xmake/plugins/project/xcode2/get_xcode_info.lua b/xmake/plugins/project/xcode2/get_xcode_info.lua index 05fe21895..d8d6d3b6f 100644 --- a/xmake/plugins/project/xcode2/get_xcode_info.lua +++ b/xmake/plugins/project/xcode2/get_xcode_info.lua @@ -39,6 +39,22 @@ function _get_project_modes() return ret_modes end +-- tranlate path +function _translate_path(filepath, outputdir) + filepath = path.translate(filepath) + if filepath == "" then + return "" + end + if path.is_absolute(filepath) then + if filepath:startswith(project.directory()) then + return path.relative(filepath, outputdir) + end + return filepath + else + return path.relative(path.absolute(filepath), outputdir) + end +end + function _add_PBXFileReference(xcinfo, file_info) local obj = {} obj.explicitFileType = file_info.explicitFileType @@ -112,23 +128,30 @@ end function _add_PBXShellScriptBuildPhase(xcinfo, target) local obj = {} - obj.shellScript = [[ -cd \"]] .. os.projectdir() .. [[\" -XMAKE_BIN=\"]] .. os.programfile() .. [[\" + local shellscript = {} + local projectdir = _translate_path(os.projectdir(), xcinfo.project_dir) + if projectdir ~= "." then + table.insert(shellscript, "cd " .. projectdir) + end + table.insert(shellscript, [[ +export XMAKE_PROGRAM_FILE=\"]] .. os.programfile() .. [[\" +export XMAKE_PROGRAM_DIR=\"]] .. os.programdir() .. [[\" +export XMAKE_COLORTERM=\"nocolor\" + # Running xmake scripts. -${XMAKE_BIN} f -y -m ${CONFIGURATION} -p ${PLATFORM_NAME} -a ${NATIVE_ARCH} -o ${BUILD_DIR} -${XMAKE_BIN} build ${TARGET_NAME}\n# Running xmake install scripts. -XMAKE_BUILD_DIR=${BUILD_DIR}/${PLATFORM_NAME}/${NATIVE_ARCH}/${CONFIGURATION} +${XMAKE_PROGRAM_FILE} f -y -m ${CONFIGURATION} -p ${PLATFORM_NAME} -a ${NATIVE_ARCH} -o ${BUILD_DIR} || exit -1 +${XMAKE_PROGRAM_FILE} build ${TARGET_NAME} || exit -1 + # Copy files to build path. -if test -e ${CONFIGURATION_BUILD_DIR} -then +XMAKE_BUILD_DIR=${BUILD_DIR}/${PLATFORM_NAME}/${NATIVE_ARCH}/${CONFIGURATION} +if test -e ${CONFIGURATION_BUILD_DIR}; then rm -r ${CONFIGURATION_BUILD_DIR}/* fi -if test -e ${XMAKE_BUILD_DIR} -then +if test -e ${XMAKE_BUILD_DIR}; then cp -r ${XMAKE_BUILD_DIR}/* ${CONFIGURATION_BUILD_DIR} fi -]] +]]) + obj.shellScript = table.concat(shellscript, "\n") local uuid = xcinfo:gen_uuid() xcinfo.sections.PBXShellScriptBuildPhase = xcinfo.sections.PBXShellScriptBuildPhase or {} xcinfo.sections.PBXShellScriptBuildPhase[uuid] = obj @@ -181,7 +204,7 @@ function _add_PBXNativeTarget(xcinfo, target_name, target) product_file.explicitFileType = "wrapper.application" else product_file.explicitFileType = "com.apple.product-type.tool" - end + end end if is_app_bundle then product_file.name = target:filename() .. ".app" @@ -274,4 +297,4 @@ function main(outputdir) table.insert(main_group.children, project_obj.productRefGroup) return xcinfo -end \ No newline at end of file +end -- cgit v1.3.1