X-Git-Url: http://nitlanguage.org diff --git a/src/platform/ios.nit b/src/platform/ios.nit index da9cfda..27979b0 100644 --- a/src/platform/ios.nit +++ b/src/platform/ios.nit @@ -32,7 +32,7 @@ private class IOSPlatform super Platform redef fun supports_libunwind do return false - redef fun supports_libgc do return false + redef fun supports_libgc do return true redef fun toolchain(toolcontext, compiler) do return new IOSToolchain(toolcontext, compiler) end @@ -53,6 +53,8 @@ private class IOSToolchain redef fun default_outname do return "{super}.app" + private var bdwgc_dir: nullable String = null + # Compile C files in `ios_project_root/app_project.name` redef fun compile_dir do @@ -66,6 +68,20 @@ private class IOSToolchain if ios_project_root.file_exists then ios_project_root.rmdir compile_dir.mkdir + # Download the libgc/bdwgc sources + var nit_dir = toolcontext.nit_dir or else "." + var share_dir = (nit_dir/"share").realpath + if not share_dir.file_exists then + print "iOS project error: Nit share directory not found, please use the environment variable NIT_DIR" + exit 1 + end + + var bdwgc_dir = "{share_dir}/android-bdwgc/bdwgc" + self.bdwgc_dir = bdwgc_dir + if not bdwgc_dir.file_exists then + toolcontext.exec_and_check(["{share_dir}/android-bdwgc/setup.sh"], "iOS project error") + end + super end @@ -151,6 +167,20 @@ private class IOSToolchain pbx.add_file new PbxFile(file.filename.basename) end + # GC + if compiler.target_platform.supports_libgc then + var bdwgc_dir = bdwgc_dir + assert bdwgc_dir != null + + pbx.cflags = "-I '{bdwgc_dir}/include/' -I '{bdwgc_dir}/libatomic_ops/src' -fno-strict-aliasing " + + "-DWITH_LIBGC -DNO_EXECUTE_PERMISSION -DALL_INTERIOR_POINTERS -DGC_NO_THREADS_DISCOVERY -DNO_DYLD_BIND_FULLY_IMAGE " + + "-DGC_DISABLE_INCREMENTAL -DGC_THREADS -DUSE_MMAP -DUSE_MUNMAP -DGC_GCJ_SUPPORT -DJAVA_FINALIZATION " + + var gc_file = new PbxFile("{bdwgc_dir}/extra/gc.c") + gc_file.cflags = "-Wno-tautological-pointer-compare" + pbx.add_file gc_file + end + # Basic storyboard, mainly to have the right screen size var launch_screen_storyboard = new LaunchScreenStoryboardTemplate launch_screen_storyboard.title = app_project.name