Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mruby
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Libraries
mruby
Commits
ad11d314
Commit
ad11d314
authored
Mar 14, 2013
by
Yukihiro "Matz" Matsumoto
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #975 from crimsonwoods/modify_build_script
Improve Android platform support.
parents
08a0c9f3
d2f74c7c
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
153 additions
and
17 deletions
+153
-17
Rakefile
Rakefile
+1
-0
tasks/mruby_build.rake
tasks/mruby_build.rake
+8
-0
tasks/mruby_build_commands.rake
tasks/mruby_build_commands.rake
+36
-11
tasks/toolchains/androideabi.rake
tasks/toolchains/androideabi.rake
+108
-6
No files found.
Rakefile
View file @
ad11d314
...
...
@@ -2,6 +2,7 @@
# Build description.
# basic build file for mruby
MRUBY_ROOT
=
File
.
dirname
(
File
.
expand_path
(
__FILE__
))
MRUBY_BUILD_HOST_IS_CYGWIN
=
RUBY_PLATFORM
.
include?
(
'cygwin'
)
# load build systems
load
"
#{
MRUBY_ROOT
}
/tasks/ruby_ext.rake"
...
...
tasks/mruby_build.rake
View file @
ad11d314
...
...
@@ -128,6 +128,14 @@ module MRuby
end
end
def
cygwin_filename
(
name
)
if
name
.
is_a?
(
Array
)
name
.
flatten
.
map
{
|
n
|
cygwin_filename
(
n
)
}
else
'"%s"'
%
`cygpath -w "
#{
filename
(
name
)
}
"`
.
strip
end
end
def
exefile
(
name
)
if
name
.
is_a?
(
Array
)
name
.
flatten
.
map
{
|
n
|
exefile
(
n
)
}
...
...
tasks/mruby_build_commands.rake
View file @
ad11d314
...
...
@@ -4,7 +4,7 @@ module MRuby
class
Command
include
Rake
::
DSL
extend
Forwardable
def_delegators
:@build
,
:filename
,
:objfile
,
:libfile
,
:exefile
def_delegators
:@build
,
:filename
,
:objfile
,
:libfile
,
:exefile
,
:cygwin_filename
attr_accessor
:build
,
:command
def
initialize
(
build
)
...
...
@@ -49,7 +49,11 @@ module MRuby
def
all_flags
(
_defineds
=
[],
_include_paths
=
[],
_flags
=
[])
define_flags
=
[
defines
,
_defineds
].
flatten
.
map
{
|
d
|
option_define
%
d
}
include_path_flags
=
[
include_paths
,
_include_paths
].
flatten
.
map
do
|
f
|
option_include_path
%
filename
(
f
)
if
MRUBY_BUILD_HOST_IS_CYGWIN
option_include_path
%
cygwin_filename
(
f
)
else
option_include_path
%
filename
(
f
)
end
end
[
flags
,
define_flags
,
include_path_flags
,
_flags
].
flatten
.
join
(
' '
)
end
...
...
@@ -61,8 +65,13 @@ module MRuby
option_include_path
%
filename
(
f
)
end
_pp
"CC"
,
infile
.
relative_path
,
outfile
.
relative_path
_run
compile_options
,
{
:flags
=>
all_flags
(
_defineds
,
_include_paths
,
_flags
),
:infile
=>
filename
(
infile
),
:outfile
=>
filename
(
outfile
)
}
if
MRUBY_BUILD_HOST_IS_CYGWIN
_run
compile_options
,
{
:flags
=>
all_flags
(
_defineds
,
_include_paths
,
_flags
),
:infile
=>
cygwin_filename
(
infile
),
:outfile
=>
cygwin_filename
(
outfile
)
}
else
_run
compile_options
,
{
:flags
=>
all_flags
(
_defineds
,
_include_paths
,
_flags
),
:infile
=>
filename
(
infile
),
:outfile
=>
filename
(
outfile
)
}
end
end
def
define_rules
(
build_dir
,
source_dir
=
''
)
...
...
@@ -127,7 +136,11 @@ module MRuby
def
all_flags
(
_library_paths
=
[],
_flags
=
[])
library_path_flags
=
[
library_paths
,
_library_paths
].
flatten
.
map
do
|
f
|
option_library_path
%
filename
(
f
)
if
MRUBY_BUILD_HOST_IS_CYGWIN
option_library_path
%
cygwin_filename
(
f
)
else
option_library_path
%
filename
(
f
)
end
end
[
flags
,
library_path_flags
,
_flags
].
flatten
.
join
(
' '
)
end
...
...
@@ -142,11 +155,19 @@ module MRuby
library_path_flags
=
[
library_paths
,
_library_paths
].
flatten
.
map
{
|
f
|
option_library_path
%
filename
(
f
)
}
_pp
"LD"
,
outfile
.
relative_path
_run
link_options
,
{
:flags
=>
all_flags
(
_library_paths
,
_flags
),
:outfile
=>
filename
(
outfile
)
,
:objs
=>
filename
(
objfiles
).
join
(
' '
),
:flags_before_libraries
=>
[
flags_before_libraries
,
_flags_before_libraries
].
flatten
.
join
(
' '
),
:flags_after_libraries
=>
[
flags_after_libraries
,
_flags_after_libraries
].
flatten
.
join
(
' '
),
:libs
=>
library_flags
.
join
(
' '
)
}
if
MRUBY_BUILD_HOST_IS_CYGWIN
_run
link_options
,
{
:flags
=>
all_flags
(
_library_paths
,
_flags
),
:outfile
=>
cygwin_filename
(
outfile
)
,
:objs
=>
cygwin_filename
(
objfiles
).
join
(
' '
),
:flags_before_libraries
=>
[
flags_before_libraries
,
_flags_before_libraries
].
flatten
.
join
(
' '
),
:flags_after_libraries
=>
[
flags_after_libraries
,
_flags_after_libraries
].
flatten
.
join
(
' '
),
:libs
=>
library_flags
.
join
(
' '
)
}
else
_run
link_options
,
{
:flags
=>
all_flags
(
_library_paths
,
_flags
),
:outfile
=>
filename
(
outfile
)
,
:objs
=>
filename
(
objfiles
).
join
(
' '
),
:flags_before_libraries
=>
[
flags_before_libraries
,
_flags_before_libraries
].
flatten
.
join
(
' '
),
:flags_after_libraries
=>
[
flags_after_libraries
,
_flags_after_libraries
].
flatten
.
join
(
' '
),
:libs
=>
library_flags
.
join
(
' '
)
}
end
end
end
...
...
@@ -162,7 +183,11 @@ module MRuby
def
run
(
outfile
,
objfiles
)
FileUtils
.
mkdir_p
File
.
dirname
(
outfile
)
_pp
"AR"
,
outfile
.
relative_path
_run
archive_options
,
{
:outfile
=>
filename
(
outfile
),
:objs
=>
filename
(
objfiles
).
join
(
' '
)
}
if
MRUBY_BUILD_HOST_IS_CYGWIN
_run
archive_options
,
{
:outfile
=>
cygwin_filename
(
outfile
),
:objs
=>
cygwin_filename
(
objfiles
).
join
(
' '
)
}
else
_run
archive_options
,
{
:outfile
=>
filename
(
outfile
),
:objs
=>
filename
(
objfiles
).
join
(
' '
)
}
end
end
end
...
...
tasks/toolchains/androideabi.rake
View file @
ad11d314
...
...
@@ -11,13 +11,115 @@
MRuby
::
Toolchain
.
new
(
:androideabi
)
do
|
conf
|
toolchain
:gcc
ANDROID_STANDALONE_TOOLCHAIN
=
ENV
[
'ANDROID_STANDALONE_TOOLCHAIN'
]
+
'/bin/arm-linux-androideabi-'
SYSROOT
=
ENV
[
'ANDROID_STANDALONE_TOOLCHAIN'
]
+
'/sysroot'
DEFAULT_ANDROID_TOOLCHAIN
=
'gcc'
DEFAULT_ANDROID_TARGET_ARCH
=
'arm'
DEFAULT_ANDROID_TARGET_ARCH_ABI
=
'armeabi'
DEFAULT_ANDROID_TARGET_PLATFORM
=
'android-14'
DEFAULT_GCC_VERSION
=
'4.6'
DEFAULT_CLANG_VERSION
=
'3.1'
GCC_COMMON_CFLAGS
=
%W(-ffunction-sections -funwind-tables -fstack-protector)
GCC_COMMON_LDFLAGS
=
%W()
# 'ANDROID_STANDALONE_TOOLCHAIN' or 'ANDROID_NDK_HOME' must be set.
ANDROID_STANDALONE_TOOLCHAIN
=
ENV
[
'ANDROID_STANDALONE_TOOLCHAIN'
]
ANDROID_NDK_HOME
=
ENV
[
'ANDROID_NDK_HOME'
]
ANDROID_TARGET_ARCH
=
ENV
[
'ANDROID_TARGET_ARCH'
]
||
DEFAULT_ANDROID_TARGET_ARCH
ANDROID_TARGET_ARCH_ABI
=
ENV
[
'ANDROID_TARGET_ARCH_ABI'
]
||
DEFAULT_ANDROID_TARGET_ARCH_ABI
ANDROID_TOOLCHAIN
=
ENV
[
'ANDROID_TOOLCHAIN'
]
||
DEFAULT_ANDROID_TOOLCHAIN
case
ANDROID_TARGET_ARCH
.
downcase
when
'arch-arm'
,
'arm'
then
toolchain_prefix
=
'arm-linux-androideabi-'
when
'arch-x86'
,
'x86'
then
toolchain_prefix
=
'i686-linux-android-'
when
'arch-mips'
,
'mips'
then
toolchain_prefix
=
'mipsel-linux-android-'
else
# Any other architectures are not supported by Android NDK.
# Notify error.
end
if
ANDROID_STANDALONE_TOOLCHAIN
==
nil
then
if
RUBY_PLATFORM
.
include?
(
'darwin'
)
then
HOST_PLATFORM
=
'darwin-x86'
elsif
RUBY_PLATFORM
.
include?
(
'linux'
)
then
HOST_PLATFORM
=
'linux-x86'
elsif
RUBY_PLATFORM
.
include?
(
'win'
)
then
HOST_PLATFORM
=
'windows'
else
# Unknown host platform.
end
ANDROID_TARGET_PLATFORM
=
ENV
[
'ANDROID_TARGET_PLATFORM'
]
||
DEFAULT_ANDROID_TARGET_PLATFORM
path_to_toolchain
=
ANDROID_NDK_HOME
+
'/toolchains/'
path_to_sysroot
=
ANDROID_NDK_HOME
+
'/platforms/'
+
ANDROID_TARGET_PLATFORM
if
ANDROID_TOOLCHAIN
.
downcase
==
'gcc'
then
case
ANDROID_TARGET_ARCH
.
downcase
when
'arch-arm'
,
'arm'
then
path_to_toolchain
+=
'arm-linux-androideabi-'
path_to_sysroot
+=
'/arch-arm'
when
'arch-x86'
,
'x86'
then
path_to_toolchain
+=
'x86-'
path_to_sysroot
+=
'/arch-x86'
when
'arch-mips'
,
'mips'
then
path_to_toolchain
+=
'mipsel-linux-android-'
path_to_sysroot
+=
'/arch-mips'
else
# Any other architecture are not supported by Android NDK.
end
path_to_toolchain
+=
DEFAULT_GCC_VERSION
+
'/prebuilt/'
+
HOST_PLATFORM
else
path_to_toolchain
+=
'llvm-'
+
DEFAULT_CLANG_VERSION
+
'/prebuilt/'
+
HOST_PLATFORM
end
else
path_to_toolchain
=
ANDROID_STANDALONE_TOOLCHAIN
path_to_sysroot
=
ANDROID_STANDALONE_TOOLCHAIN
+
'/sysroot'
end
SYSROOT
=
path_to_sysroot
case
ANDROID_TARGET_ARCH
.
downcase
when
'arch-arm'
,
'arm'
then
if
ANDROID_TARGET_ARCH_ABI
.
downcase
==
'armeabi-v7a'
then
ARCH_CFLAGS
=
%W(-march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16)
ARCH_LDFLAGS
=
%W(-march=armv7-a -Wl,--fix-cortex-a8)
else
ARCH_CFLAGS
=
%W(-march=armv5te -mtune=xscale -msoft-float)
ARCH_LDFLAGS
=
%W()
end
when
'arch-x86'
,
'x86'
then
ARCH_CFLAGS
=
%W()
ARCH_LDFLAGS
=
%W()
when
'arch-mips'
,
'mips'
then
ARCH_CFLAGS
=
%W(-fpic -fno-strict-aliasing -finline-functions -fmessage-length=0 -fno-inline-functions-called-once -fgcse-after-reload -frerun-cse-after-loop -frename-registers)
ARCH_LDFLAGS
=
%W()
else
# Notify error
end
case
ANDROID_TOOLCHAIN
.
downcase
when
'gcc'
then
ANDROID_CC
=
path_to_toolchain
+
'/bin/'
+
toolchain_prefix
+
'gcc'
ANDROID_LD
=
path_to_toolchain
+
'/bin/'
+
toolchain_prefix
+
'gcc'
ANDROID_AR
=
path_to_toolchain
+
'/bin/'
+
toolchain_prefix
+
'ar'
ANDROID_CFLAGS
=
GCC_COMMON_CFLAGS
+
%W(-mandroid --sysroot="
#{
SYSROOT
}
")
+
ARCH_CFLAGS
ANDROID_LDFLAGS
=
GCC_COMMON_LDFLAGS
+
%W(-mandroid --sysroot="
#{
SYSROOT
}
")
+
ARCH_LDFLAGS
when
'clang'
then
# clang is not supported yet.
when
'clang31'
,
'clang3.1'
then
# clang is not supported yet.
else
# Any other toolchains are not supported by Android NDK.
# Notify error.
end
[
conf
.
cc
,
conf
.
cxx
,
conf
.
objc
,
conf
.
asm
].
each
do
|
cc
|
cc
.
command
=
ENV
[
'CC'
]
||
ANDROID_
STANDALONE_TOOLCHAIN
+
'gcc'
cc
.
flags
=
[
ENV
[
'CFLAGS'
]
||
[
'--sysroot '
+
SYSROOT
]
]
cc
.
command
=
ENV
[
'CC'
]
||
ANDROID_
CC
cc
.
flags
=
[
ENV
[
'CFLAGS'
]
||
ANDROID_CFLAGS
]
end
conf
.
linker
.
command
=
ENV
[
'LD'
]
||
ANDROID_STANDALONE_TOOLCHAIN
+
'gcc'
conf
.
archiver
.
command
=
ENV
[
'AR'
]
||
ANDROID_STANDALONE_TOOLCHAIN
+
'ar'
conf
.
linker
.
command
=
ENV
[
'LD'
]
||
ANDROID_LD
conf
.
linker
.
flags
=
[
ENV
[
'LDFLAGS'
]
||
ANDROID_LDFLAGS
]
conf
.
archiver
.
command
=
ENV
[
'AR'
]
||
ANDROID_AR
end
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment