Add Xcode-iPhoneOS/rakefile which can be used to build SDL.framework from the commandline
This is the rakefile from Andrey Nesterov, but slightly modified. Use the following command: $ rake -f Xcode-iPhoneOS/rakefile The resulting framework is placed in the ./build directory.
This commit is contained in:
parent
2bd415b42a
commit
52f5e85d3b
1 changed files with 219 additions and 0 deletions
219
Xcode-iPhoneOS/rakefile
Normal file
219
Xcode-iPhoneOS/rakefile
Normal file
|
@ -0,0 +1,219 @@
|
|||
# ------------------------------------------------------------------------------
|
||||
# Builds a SDL framework for the iOS
|
||||
# Copyright (c) 2011 Andrey Nesterov
|
||||
# See LICENSE for licensing information
|
||||
# ------------------------------------------------------------------------------
|
||||
#
|
||||
# Creates a pseudo-framework which contains a universal library that can be used
|
||||
# on a iOS and in the iOS simulator
|
||||
#
|
||||
# ------------------------------------------------------------------------------
|
||||
#
|
||||
# To configure the script, define:
|
||||
# Conf configuration, symbol (:release or :debug)
|
||||
# SDK version number of the iOS SDK, symbol (e.g. :"4.3")
|
||||
# Arch architecture for the device's library, symbol (e.g. :armv6 or :armv7)
|
||||
#
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
# --- Configure ----------------------------------------------------------------
|
||||
module Configure
|
||||
Conf = :release
|
||||
SDK = :"4.3"
|
||||
Arch = :armv7
|
||||
end
|
||||
|
||||
# --- Constants ----------------------------------------------------------------
|
||||
module Global
|
||||
RootDir = Dir.pwd
|
||||
SourceDir = "#{RootDir}"
|
||||
BuildDir = "#{RootDir}/build"
|
||||
end
|
||||
|
||||
# --- Common -------------------------------------------------------------------
|
||||
module Builder
|
||||
def get_sources(from, to)
|
||||
refresh_dir to
|
||||
yield from, to
|
||||
end
|
||||
|
||||
def build_library(project, dest, target, conf, sdk, arch)
|
||||
print "\n"
|
||||
dest = library_bundle_path(dest, conf, sdk, arch)
|
||||
sdk, arch = compute_platform(sdk, arch)
|
||||
conf = configuration(conf)
|
||||
|
||||
refresh_dir dest
|
||||
refresh_dir "#{dest}.build"
|
||||
|
||||
proj_dir, proj_fname = File.split project
|
||||
cd proj_dir
|
||||
args = Array.new()
|
||||
args.push("xcodebuild")
|
||||
args.push("-project #{proj_fname}")
|
||||
args.push("-sdk #{sdk}")
|
||||
args.push("-configuration \"#{conf}\"")
|
||||
args.push("-target \"#{target}\"")
|
||||
# NATIVE_ARCH has no effect
|
||||
#args.push("NATIVE_ARCH=#{arch.to_str}")
|
||||
args.push("-arch #{arch.to_str}")
|
||||
args.push("TARGETED_DEVICE_FAMILY=2") # 2 => iPad, 1 => iPhone
|
||||
args.push("BUILT_PRODUCTS_DIR=\"build\"")
|
||||
args.push("CONFIGURATION_BUILD_DIR=\"#{dest}\"")
|
||||
args.push("CONFIGURATION_TEMP_DIR=\"#{dest}.build\"")
|
||||
cmd = args.join(' ')
|
||||
#print "\n"
|
||||
print "#{cmd}\n"
|
||||
`#{cmd}`
|
||||
end
|
||||
|
||||
def build_framework_library(frameworkLib, deviceLib, simulatorLib)
|
||||
print "\n"
|
||||
refresh_dir File.dirname frameworkLib
|
||||
cmd = "lipo -create #{deviceLib} #{simulatorLib} -o #{frameworkLib}"
|
||||
print "#{cmd}\n"
|
||||
`#{cmd}`
|
||||
end
|
||||
|
||||
def build_framework(name, version, identifier, dest, headers, project, target, conf, sdk, arch)
|
||||
libFileName = "lib#{name}.a";
|
||||
libFilePath = "#{dest}/universal-#{conf}/#{libFileName}"
|
||||
|
||||
build_library(project, dest, target, conf, sdk, arch);
|
||||
build_library(project, dest, target, conf, sdk, :i386);
|
||||
|
||||
build_framework_library(
|
||||
libFilePath,
|
||||
"#{library_bundle_path(dest, conf, sdk, arch)}/#{libFileName}",
|
||||
"#{library_bundle_path(dest, conf, sdk, :i386)}/#{libFileName}"
|
||||
)
|
||||
# Static library has version A
|
||||
create_framework(name, "A", identifier, dest, headers, libFilePath)
|
||||
end
|
||||
|
||||
def create_framework(name, version, identifier, dest, headers, lib)
|
||||
print "\n"
|
||||
frameworkVersion = version
|
||||
frameworkBundle = framework_bundle_path(dest, name)
|
||||
|
||||
# creating framework's directories
|
||||
refresh_dir frameworkBundle
|
||||
mkdir "#{frameworkBundle}/Versions"
|
||||
mkdir "#{frameworkBundle}/Versions/#{frameworkVersion}"
|
||||
mkdir "#{frameworkBundle}/Versions/#{frameworkVersion}/Resources"
|
||||
mkdir "#{frameworkBundle}/Versions/#{frameworkVersion}/Headers"
|
||||
mkdir "#{frameworkBundle}/Versions/#{frameworkVersion}/Documentation"
|
||||
|
||||
# creating framework's symlinks
|
||||
`ln -s "#{frameworkVersion}" "#{frameworkBundle}/Versions/Current"`
|
||||
`ln -s "Versions/Current/Headers" "#{frameworkBundle}/Headers"`
|
||||
`ln -s "Versions/Current/Resources" "#{frameworkBundle}/Resources"`
|
||||
`ln -s "Versions/Current/Documentation" "#{frameworkBundle}/Documentation"`
|
||||
`ln -s "Versions/Current/#{File.basename lib}" "#{frameworkBundle}/#{name}"`
|
||||
|
||||
# copying lib
|
||||
cp lib, "#{frameworkBundle}/Versions/#{frameworkVersion}"
|
||||
|
||||
# copying the header files. Copy everything found in the headers directory.
|
||||
FileList["#{headers}/*.h"].each do |source|
|
||||
cp source, "#{frameworkBundle}/Headers"
|
||||
end
|
||||
|
||||
# creating plist
|
||||
File.open("#{frameworkBundle}/Resources/Info.plist", "w") do |f|
|
||||
f.puts '<?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">'
|
||||
f.puts "\
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>#{name}</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>#{identifier}</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>#{version}</string>
|
||||
</dict>
|
||||
</plist>"
|
||||
end
|
||||
end
|
||||
|
||||
def library_bundle_path(path, conf, sdk, arch)
|
||||
sdk, arch = compute_platform(sdk, arch)
|
||||
"#{path}/#{sdk}-#{conf}"
|
||||
end
|
||||
|
||||
def framework_bundle_path(path, name)
|
||||
"#{path}/#{name}.framework"
|
||||
end
|
||||
|
||||
def configuration(conf)
|
||||
conf.to_s
|
||||
end
|
||||
|
||||
def compute_platform(sdk, arch)
|
||||
return [sdk, arch] if arch.class == String
|
||||
[arch == :i386 ? "iphonesimulator" + sdk.to_s : "iphoneos" + sdk.to_s, arch.to_s]
|
||||
end
|
||||
|
||||
def refresh_dir(path)
|
||||
rm_rf path if FileTest.exists? path
|
||||
mkdir_p path
|
||||
end
|
||||
|
||||
private :configuration, :compute_platform, :refresh_dir
|
||||
end
|
||||
|
||||
class InstanceBuilder
|
||||
class Instance
|
||||
extend Builder
|
||||
end
|
||||
|
||||
def InstanceBuilder.message(text)
|
||||
tailSize = 75 - text.length;
|
||||
puts "--- #{text} #{'-' * (tailSize < 0 ? 0 : tailSize)}"
|
||||
end
|
||||
end
|
||||
|
||||
# --- SDL ----------------------------------------------------------------------
|
||||
class SDL < InstanceBuilder
|
||||
SourceDir = "#{Global::SourceDir}"
|
||||
BuildDir = "#{Global::BuildDir}"
|
||||
|
||||
def SDL.build_framework(conf, sdk, arch)
|
||||
message "Building SDL"
|
||||
Instance.build_framework(
|
||||
"SDL",
|
||||
"1.3",
|
||||
"org.libsdl",
|
||||
BuildDir,
|
||||
"#{SourceDir}/include",
|
||||
"#{SourceDir}/Xcode-iPhoneOS/SDL/SDLiPhoneOS.xcodeproj",
|
||||
"libSDL",
|
||||
conf,
|
||||
sdk,
|
||||
arch
|
||||
)
|
||||
end
|
||||
|
||||
def Instance.configuration(conf)
|
||||
case conf
|
||||
when :release
|
||||
"Release"
|
||||
when :debug
|
||||
"Debug"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# --- Tasks --------------------------------------------------------------------
|
||||
task :default do
|
||||
SDL.build_framework Configure::Conf, Configure::SDK, Configure::Arch
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue