# C library. If a method or class is not documented in Nit, refer to
# the official documentation by the Khronos Group at:
# http://www.khronos.org/registry/egl/sdk/docs/man/xhtml/
- module egl is pkgconfig
+ module egl is
+ pkgconfig
+ ldflags("-lEGL")@android
+ end
+
+ import android::aware
in "C Header" `{
#include <EGL/egl.h>
fun surface_type=(flag: Int) do insert_attrib_with_val(0x3033, flag)
fun surface_type_egl do surface_type = 4
+ # Set which client rendering APIs are supported
+ fun renderable_type=(flag: Int) do insert_attrib_with_val(0x3040, flag)
+
+ # Set EGL as the only supported rendering API
+ fun renderable_type_egl do renderable_type = 4
+
fun blue_size=(size: Int) do insert_attrib_with_val(0x3022, size)
fun green_size=(size: Int) do insert_attrib_with_val(0x3023, size)
fun red_size=(size: Int) do insert_attrib_with_val(0x3024, size)
redef fun compile_module_block(block, ecc, mmodule)
do
if block.is_c_header then
- ecc.header_custom.add( block.location.as_line_pragma )
- ecc.header_custom.add( block.code )
+ ecc.header_custom.add block.location.as_line_pragma
+ ecc.header_custom.add "\n"
+ ecc.header_custom.add block.code
else if block.is_c_body then
- ecc.body_custom.add( block.location.as_line_pragma )
- ecc.body_impl.add( block.code )
+ ecc.body_impl.add block.location.as_line_pragma
+ ecc.body_impl.add "\n"
+ ecc.body_impl.add block.code
end
end
end
redef class MModule
- var cflags = "" is writable
- var ldflags = "" is writable
+ # FIXME make nullable the key of `cflags`, `ldflags` and `cppflags` when
+ # supported by the bootstrap
+
+ # Custom options for the C compiler (CFLAGS)
+ var cflags = new MultiHashMap[String, String]
+
+ # Custom options for the C linker (LDFLAGS)
+ var ldflags = new MultiHashMap[String, String]
# Additional libraries needed for the compilation
# Will be used with pkg-config
class AndroidPlatform
super Platform
+ redef fun name do return "android"
+
redef fun supports_libgc do return true
redef fun supports_libunwind do return false
do
var android_project_root = android_project_root.as(not null)
var project = toolcontext.modelbuilder.android_project_for(compiler.mainmodule)
- var short_project_name = compiler.mainmodule.name
+ var short_project_name = compiler.mainmodule.name.replace("-", "_")
var release = toolcontext.opt_release.value
var app_name = project.name
if app_name == null then app_name = compiler.mainmodule.name
+ if not release then app_name += " Debug"
var app_package = project.java_package
if app_package == null then app_package = "org.nitlanguage.{short_project_name}"
+ if not release then app_package += "_debug"
var app_version = project.version
if app_version == null then app_version = "1.0"
end
end
- ## Generate delagating makefile
+ ## Generate delegating makefile
dir = "{android_project_root}/jni/"
"""
include $(call all-subdir-makefiles)
""".write_to_file("{dir}/Android.mk")
+ # Gather ldflags for Android
+ var ldflags = new Array[String]
+ var platform_name = "android"
+ for mmodule in compiler.mainmodule.in_importation.greaters do
+ if mmodule.ldflags.keys.has(platform_name) then
+ ldflags.add_all mmodule.ldflags[platform_name]
+ end
+ end
+
### generate makefile into "{compile_dir}/Android.mk"
dir = compile_dir
"""
LOCAL_MODULE := main
LOCAL_SRC_FILES := \\
{{{cfiles.join(" \\\n")}}}
- LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv1_CM -lz libgc.a
+ LOCAL_LDLIBS := {{{ldflags.join(" ")}}} libgc.a
LOCAL_STATIC_LIBRARIES := android_native_app_glue png
include $(BUILD_SHARED_LIBRARY)
android:label="@string/app_name"
android:hasCode="true"
android:debuggable="{{{not release}}}"
- {{{icon_declaration}}}>
+ {{{icon_declaration}}}
+ android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation">
<!-- Our activity is the built-in NativeActivity framework class.
This will take care of integrating with our NDK code. -->
redef fun compile_c_code(compiler, compile_dir)
do
var android_project_root = android_project_root.as(not null)
+ var short_project_name = compiler.mainmodule.name.replace("-", "_")
var release = toolcontext.opt_release.value
# Compile C code (and thus Nit)
var outname = outfile(compiler.mainmodule)
if release then
- var apk_path = "{android_project_root}/bin/{compiler.mainmodule.name}-release-unsigned.apk"
+ var apk_path = "{android_project_root}/bin/{short_project_name}-release-unsigned.apk"
# Sign APK
var keystore_path= "KEYSTORE".environ
toolcontext.exec_and_check(args, "Android project error")
else
# Move to the expected output path
- args = ["mv", "{android_project_root}/bin/{compiler.mainmodule.name}-debug.apk", outname]
+ args = ["mv", "{android_project_root}/bin/{short_project_name}-debug.apk", outname]
toolcontext.exec_and_check(args, "Android project error")
end
end