diff --git a/packages/bzip2-sys-android.1.0.6/url b/packages/bzip2-sys-android.1.0.6/url index 0318d4f..0d7afa5 100644 --- a/packages/bzip2-sys-android.1.0.6/url +++ b/packages/bzip2-sys-android.1.0.6/url @@ -1,2 +1,2 @@ -archive: "http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz" +archive: "https://download.seaiq.com/resources/other/bzip2-1.0.6.tar.gz" checksum: "00b516f4704d4a7cb50a1d97e6e8e15b" diff --git a/packages/freetype-sys-android.2.7.0/url b/packages/freetype-sys-android.2.7.0/url deleted file mode 100644 index 33f3b55..0000000 --- a/packages/freetype-sys-android.2.7.0/url +++ /dev/null @@ -1,2 +0,0 @@ -archive: "http://download.savannah.gnu.org/releases/freetype/freetype-2.7.tar.bz2" -checksum: "be4601619827b7935e1d861745923a68" diff --git a/packages/freetype-sys-android.2.7.0/files/freetype-sys-android.config.in b/packages/freetype-sys-android.2.9.1/files/freetype-sys-android.config.in similarity index 100% rename from packages/freetype-sys-android.2.7.0/files/freetype-sys-android.config.in rename to packages/freetype-sys-android.2.9.1/files/freetype-sys-android.config.in diff --git a/packages/freetype-sys-android.2.7.0/opam b/packages/freetype-sys-android.2.9.1/opam similarity index 100% rename from packages/freetype-sys-android.2.7.0/opam rename to packages/freetype-sys-android.2.9.1/opam diff --git a/packages/freetype-sys-android.2.9.1/url b/packages/freetype-sys-android.2.9.1/url new file mode 100644 index 0000000..b5fb166 --- /dev/null +++ b/packages/freetype-sys-android.2.9.1/url @@ -0,0 +1,2 @@ +archive: "http://download.savannah.gnu.org/releases/freetype/freetype-2.9.1.tar.bz2" +checksum: "60ef7d8160cd4bf8cb118ee9d65367ca" diff --git a/packages/libpng-sys-android.1.6.27/url b/packages/libpng-sys-android.1.6.27/url deleted file mode 100644 index dbdc235..0000000 --- a/packages/libpng-sys-android.1.6.27/url +++ /dev/null @@ -1,2 +0,0 @@ -archive: "ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng16/libpng-1.6.27.tar.gz" -checksum: "58698519e9f6126c1caeefc28dbcbd5f" diff --git a/packages/libpng-sys-android.1.6.27/files/libpng-sys-android.config.in b/packages/libpng-sys-android.1.6.35/files/libpng-sys-android.config.in similarity index 100% rename from packages/libpng-sys-android.1.6.27/files/libpng-sys-android.config.in rename to packages/libpng-sys-android.1.6.35/files/libpng-sys-android.config.in diff --git a/packages/libpng-sys-android.1.6.27/opam b/packages/libpng-sys-android.1.6.35/opam similarity index 100% rename from packages/libpng-sys-android.1.6.27/opam rename to packages/libpng-sys-android.1.6.35/opam diff --git a/packages/libpng-sys-android.1.6.35/url b/packages/libpng-sys-android.1.6.35/url new file mode 100644 index 0000000..9c9242c --- /dev/null +++ b/packages/libpng-sys-android.1.6.35/url @@ -0,0 +1,2 @@ +archive: "http://prdownloads.sourceforge.net/libpng/libpng-1.6.35.tar.gz" +checksum: "d94d9587c421ac42316b6ab8f64f1b85" diff --git a/packages/ocaml-android.4.04.0/opam b/packages/ocaml-android.4.04.0/opam index 8d52555..e9bfcf6 100644 --- a/packages/ocaml-android.4.04.0/opam +++ b/packages/ocaml-android.4.04.0/opam @@ -1,3 +1,5 @@ opam-version: "1" maintainer: "whitequark@whitequark.org" -depends: [ "ocaml-android32" {= "4.04.0"} ] +depends: [ + ( "ocaml-android32" {= "4.04.0"} | "ocaml-android64" {= "4.04.0"} ) +] diff --git a/packages/ocaml-android32.4.04.0/files/config/Makefile.in b/packages/ocaml-android32.4.04.0/files/config/Makefile.in index 7f9a0eb..e668fe3 100644 --- a/packages/ocaml-android32.4.04.0/files/config/Makefile.in +++ b/packages/ocaml-android32.4.04.0/files/config/Makefile.in @@ -28,7 +28,7 @@ X11_LINK=not found TK_DEFS= TK_LINK= LIBBFD_LINK= -BYTECC=%{conf-android:toolpref}%gcc %{conf-android:cflags}% -O2 +BYTECC=%{conf-android:toolpref}%gcc %{conf-android:cflags}% -O2 -fPIC BYTECCCOMPOPTS=-fno-defer-pop -Wall -D_FILE_OFFSET_BITS=64 -D_REENTRANT BYTECCDBGCOMPOPTS=-g NAME_OBJ_FLAG=-o diff --git a/packages/ocaml-android32.4.04.0/files/patches/arm_s.patch b/packages/ocaml-android32.4.04.0/files/patches/arm_s.patch new file mode 100644 index 0000000..9020ca7 --- /dev/null +++ b/packages/ocaml-android32.4.04.0/files/patches/arm_s.patch @@ -0,0 +1,383 @@ +--- orig/asmrun/arm.S 2016-11-04 12:08:24.000000000 -0400 ++++ patch/asmrun/arm.S 2018-11-14 01:46:38.000000000 -0500 +@@ -14,6 +14,74 @@ + /* */ + /**************************************************************************/ + ++#if defined(__PIC__) ++ ++// YUCK: r3 is not used in any of the ADDRGLOBAL ++#define TMP2 r3 ++ ++/* ++ ldr r2, .L3 ++.LPIC0: ++ add r2, pc, r2 ++ ldr r3, .L3+4 ++ ldr r3, [r2, r3] ++ ldr r3, [r3] ++ mov r0, r3 ++ sub sp, fp, #0 ++ @ sp needed ++ ldr fp, [sp], #4 ++ bx lr ++.L4: ++ .align 2 ++.L3: ++ .word _GLOBAL_OFFSET_TABLE_-(.LPIC0+8) ++ .word something(GOT) ++*/ ++#define ADDRGLOBALFULL(reg,_symb,_symb1,_key) \ ++ push {TMP2}; \ ++ ldr TMP2, .LPIC1##_symb1##_key; \ ++.LPIC0##_symb1##_key: \ ++ add TMP2, pc, TMP2; \ ++ ldr reg, .LPIC1##_symb1##_key+4; \ ++ ldr reg, [TMP2, reg]; \ ++ pop {TMP2} ++ ++//#undef TMP2 ++ ++#define TABLEGLOBALFULL(_reg_ignore,_symb,_symb1,_key) \ ++ .align 2; \ ++.LPIC1##_symb1##_key: \ ++ .word _GLOBAL_OFFSET_TABLE_-(.LPIC0##_symb1##_key+8); \ ++ .word _symb(GOT) ++ ++#else ++ ++#define ADDRGLOBALFULL(reg,_symb,_symb1,_key) \ ++ ldr reg, =_symb ++ ++#define TABLEGLOBALFULL(_reg_ignore,_symb,_symb1,_key) \ ++ /* Nop */ ++ ++#endif ++ ++#define ADDRGLOBAL(reg,_symb,_key) \ ++ ADDRGLOBALFULL(reg,_symb,_symb,_key) ++ ++#define TABLEGLOBAL(_reg_ignore, _symb,_key) \ ++ TABLEGLOBALFULL(_reg_ignore,_symb,_symb,_key) ++ ++#if 0 ++/* Not used. ++ */ ++#define LOADGLOBAL(reg,symb) \ ++ ADDRGLOBAL(TMP2,symb); \ ++ ldr reg, [TMP2] ++ ++#define STOREGLOBAL(reg,symb) \ ++ ADDRGLOBAL(TMP2,symb); \ ++ str reg, [TMP2] ++#endif ++ + /* Asm part of the runtime system, ARM processor */ + /* Must be preprocessed by cpp */ + +@@ -116,11 +184,11 @@ + CFI_STARTPROC + PROFILE + /* Record return address */ +- ldr r12, =caml_last_return_address ++ ADDRGLOBAL(r12, caml_last_return_address, 0) + str lr, [r12] + .Lcaml_call_gc: + /* Record lowest stack address */ +- ldr r12, =caml_bottom_of_stack ++ ADDRGLOBAL(r12, caml_bottom_of_stack, 0) + str sp, [r12] + #if defined(SYS_linux_eabihf) || defined(SYS_netbsd) + /* Save caller floating-point registers on the stack */ +@@ -129,13 +197,13 @@ + /* Save integer registers and return address on the stack */ + push {r0-r7,r12,lr}; CFI_ADJUST(40) + /* Store pointer to saved integer registers in caml_gc_regs */ +- ldr r12, =caml_gc_regs ++ ADDRGLOBAL(r12, caml_gc_regs, 2) + str sp, [r12] + /* Save current allocation pointer for debugging purposes */ +- ldr alloc_limit, =caml_young_ptr ++ ADDRGLOBAL(alloc_limit, caml_young_ptr, 0) + str alloc_ptr, [alloc_limit] + /* Save trap pointer in case an exception is raised during GC */ +- ldr r12, =caml_exception_pointer ++ ADDRGLOBAL(r12, caml_exception_pointer, 0) + str trap_ptr, [r12] + /* Call the garbage collector */ + bl caml_garbage_collection +@@ -147,7 +215,7 @@ + #endif + /* Reload new allocation pointer and limit */ + /* alloc_limit still points to caml_young_ptr */ +- ldr r12, =caml_young_limit ++ ADDRGLOBAL(r12, caml_young_limit, 0) + ldr alloc_ptr, [alloc_limit] + ldr alloc_limit, [r12] + /* Return to caller */ +@@ -167,7 +235,7 @@ + bcc 1f + bx lr + 1: /* Record return address */ +- ldr r7, =caml_last_return_address ++ ADDRGLOBAL(r7, caml_last_return_address, 1) + str lr, [r7] + /* Call GC (preserves r7) */ + bl .Lcaml_call_gc +@@ -190,7 +258,7 @@ + bcc 1f + bx lr + 1: /* Record return address */ +- ldr r7, =caml_last_return_address ++ ADDRGLOBAL(r7, caml_last_return_address, 2) + str lr, [r7] + /* Call GC (preserves r7) */ + bl .Lcaml_call_gc +@@ -214,7 +282,7 @@ + bcc 1f + bx lr + 1: /* Record return address */ +- ldr r7, =caml_last_return_address ++ ADDRGLOBAL(r7, caml_last_return_address, 3) + str lr, [r7] + /* Call GC (preserves r7) */ + bl .Lcaml_call_gc +@@ -237,12 +305,12 @@ + bcc 1f + bx lr + 1: /* Record return address */ +- ldr r12, =caml_last_return_address ++ ADDRGLOBAL(r12, caml_last_return_address, 4) + str lr, [r12] + /* Call GC (preserves r7) */ + bl .Lcaml_call_gc + /* Restore return address */ +- ldr r12, =caml_last_return_address ++ ADDRGLOBAL(r12, caml_last_return_address, 5) + ldr lr, [r12] + /* Try again */ + b .Lcaml_allocN +@@ -259,21 +327,21 @@ + CFI_STARTPROC + PROFILE + /* Record lowest stack address and return address */ +- ldr r5, =caml_last_return_address +- ldr r6, =caml_bottom_of_stack ++ ADDRGLOBAL(r5, caml_last_return_address, 6) ++ ADDRGLOBAL(r6, caml_bottom_of_stack, 1) + str lr, [r5] + str sp, [r6] + /* Preserve return address in callee-save register r4 */ + mov r4, lr + /* Make the exception handler alloc ptr available to the C code */ +- ldr r5, =caml_young_ptr +- ldr r6, =caml_exception_pointer ++ ADDRGLOBAL(r5, caml_young_ptr, 1) ++ ADDRGLOBAL(r6, caml_exception_pointer, 1) + str alloc_ptr, [r5] + str trap_ptr, [r6] + /* Call the function */ + blx r7 + /* Reload alloc ptr and alloc limit */ +- ldr r6, =caml_young_limit ++ ADDRGLOBAL(r6, caml_young_limit, 1) + ldr alloc_ptr, [r5] /* r5 still points to caml_young_ptr */ + ldr alloc_limit, [r6] + /* Return */ +@@ -289,8 +357,8 @@ + caml_start_program: + CFI_STARTPROC + PROFILE +- ldr r12, =caml_program +- ++ ADDRGLOBAL(r12, caml_program, 0) ++ + /* Code shared with caml_callback* */ + /* Address of OCaml code to call is in r12 */ + /* Arguments to the OCaml code are in r0...r3 */ +@@ -304,9 +372,9 @@ + push {r4-r8,r10,r11,lr}; CFI_ADJUST(32) /* 8-byte alignment */ + /* Setup a callback link on the stack */ + sub sp, sp, 16; CFI_ADJUST(16) /* 8-byte alignment */ +- ldr r4, =caml_bottom_of_stack +- ldr r5, =caml_last_return_address +- ldr r6, =caml_gc_regs ++ ADDRGLOBAL(r4, caml_bottom_of_stack, 2) ++ ADDRGLOBAL(r5, caml_last_return_address, 7) ++ ADDRGLOBAL(r6, caml_gc_regs, 0) + ldr r4, [r4] + ldr r5, [r5] + ldr r6, [r6] +@@ -315,39 +383,39 @@ + str r6, [sp, 8] + /* Setup a trap frame to catch exceptions escaping the OCaml code */ + sub sp, sp, 8; CFI_ADJUST(8) +- ldr r6, =caml_exception_pointer +- ldr r5, =.Ltrap_handler ++ ADDRGLOBAL(r6, caml_exception_pointer, 2) ++ ADDRGLOBALFULL(r5, .Ltrap_handler, Ltrap_handler, 0) + ldr r4, [r6] + str r4, [sp, 0] + str r5, [sp, 4] + mov trap_ptr, sp + /* Reload allocation pointers */ +- ldr r4, =caml_young_ptr ++ ADDRGLOBAL(r4, caml_young_ptr, 2) + ldr alloc_ptr, [r4] +- ldr r4, =caml_young_limit ++ ADDRGLOBAL(r4, caml_young_limit, 2) + ldr alloc_limit, [r4] + /* Call the OCaml code */ + blx r12 + .Lcaml_retaddr: + /* Pop the trap frame, restoring caml_exception_pointer */ +- ldr r4, =caml_exception_pointer ++ ADDRGLOBAL(r4, caml_exception_pointer, 3) + ldr r5, [sp, 0] + str r5, [r4] + add sp, sp, 8; CFI_ADJUST(-8) + /* Pop the callback link, restoring the global variables */ + .Lreturn_result: +- ldr r4, =caml_bottom_of_stack ++ ADDRGLOBAL(r4, caml_bottom_of_stack, 3) + ldr r5, [sp, 0] + str r5, [r4] +- ldr r4, =caml_last_return_address ++ ADDRGLOBAL(r4, caml_last_return_address, 8) + ldr r5, [sp, 4] + str r5, [r4] +- ldr r4, =caml_gc_regs ++ ADDRGLOBAL(r4, caml_gc_regs, 1) + ldr r5, [sp, 8] + str r5, [r4] + add sp, sp, 16; CFI_ADJUST(-16) + /* Update allocation pointer */ +- ldr r4, =caml_young_ptr ++ ADDRGLOBAL(r4, caml_young_ptr, 3) + str alloc_ptr, [r4] + /* Reload callee-save registers and return address */ + pop {r4-r8,r10,r11,lr}; CFI_ADJUST(-32) +@@ -368,7 +436,7 @@ + .Ltrap_handler: + CFI_STARTPROC + /* Save exception pointer */ +- ldr r12, =caml_exception_pointer ++ ADDRGLOBAL(r12, caml_exception_pointer, 4) + str trap_ptr, [r12] + /* Encode exception bucket as an exception result */ + orr r0, r0, 2 +@@ -386,7 +454,7 @@ + CFI_STARTPROC + PROFILE + /* Test if backtrace is active */ +- ldr r1, =caml_backtrace_active ++ ADDRGLOBAL(r1, caml_backtrace_active, 0) + ldr r1, [r1] + cbz r1, 1f + /* Preserve exception bucket in callee-save register r4 */ +@@ -414,21 +482,21 @@ + CFI_STARTPROC + PROFILE + /* Reload trap ptr, alloc ptr and alloc limit */ +- ldr trap_ptr, =caml_exception_pointer +- ldr alloc_ptr, =caml_young_ptr +- ldr alloc_limit, =caml_young_limit ++ ADDRGLOBAL(trap_ptr, caml_exception_pointer, 5) ++ ADDRGLOBAL(alloc_ptr, caml_young_ptr, 4) ++ ADDRGLOBAL(alloc_limit, caml_young_limit, 3) + ldr trap_ptr, [trap_ptr] + ldr alloc_ptr, [alloc_ptr] + ldr alloc_limit, [alloc_limit] + /* Test if backtrace is active */ +- ldr r1, =caml_backtrace_active ++ ADDRGLOBAL(r1, caml_backtrace_active, 1) + ldr r1, [r1] + cbz r1, 1f + /* Preserve exception bucket in callee-save register r4 */ + mov r4, r0 +- ldr r1, =caml_last_return_address /* arg2: pc of raise */ ++ ADDRGLOBAL(r1, caml_last_return_address, 9) /* arg2: pc of raise */ + ldr r1, [r1] +- ldr r2, =caml_bottom_of_stack /* arg3: sp of raise */ ++ ADDRGLOBAL(r2, caml_bottom_of_stack, 4) /* arg3: sp of raise */ + ldr r2, [r2] + mov r3, trap_ptr /* arg4: sp of handler */ + bl caml_stash_backtrace +@@ -469,7 +537,7 @@ + mov r0, r1 /* r0 = first arg */ + mov r1, r2 /* r1 = second arg */ + mov r2, r12 /* r2 = closure environment */ +- ldr r12, =caml_apply2 ++ ADDRGLOBAL(r12, caml_apply2, 0) + b .Ljump_to_caml + CFI_ENDPROC + .type caml_callback2_exn, %function +@@ -487,7 +555,7 @@ + mov r1, r2 /* r1 = second arg */ + mov r2, r3 /* r2 = third arg */ + mov r3, r12 /* r3 = closure environment */ +- ldr r12, =caml_apply3 ++ ADDRGLOBAL(r12, caml_apply3, 0) + b .Ljump_to_caml + CFI_ENDPROC + .type caml_callback3_exn, %function +@@ -499,16 +567,58 @@ + CFI_STARTPROC + PROFILE + /* Load address of [caml_array_bound_error] in r7 */ +- ldr r7, =caml_array_bound_error ++ ADDRGLOBAL(r7, caml_array_bound_error, 0) + /* Call that function */ + b caml_c_call + CFI_ENDPROC + .type caml_ml_array_bound_error, %function + .size caml_ml_array_bound_error, .-caml_ml_array_bound_error + ++ TABLEGLOBAL(r12, caml_last_return_address, 0) ++ TABLEGLOBAL(r12, caml_bottom_of_stack, 0) ++ TABLEGLOBAL(r12, caml_gc_regs, 2) ++ TABLEGLOBAL(alloc_limit, caml_young_ptr, 0) ++ TABLEGLOBAL(r12, caml_exception_pointer, 0) ++ TABLEGLOBAL(r12, caml_young_limit, 0) ++ TABLEGLOBAL(r7, caml_last_return_address, 1) ++ TABLEGLOBAL(r7, caml_last_return_address, 2) ++ TABLEGLOBAL(r7, caml_last_return_address, 3) ++ TABLEGLOBAL(r12, caml_last_return_address, 4) ++ TABLEGLOBAL(r12, caml_last_return_address, 5) ++ TABLEGLOBAL(r5, caml_last_return_address, 6) ++ TABLEGLOBAL(r6, caml_bottom_of_stack, 1) ++ TABLEGLOBAL(r5, caml_young_ptr, 1) ++ TABLEGLOBAL(r6, caml_exception_pointer, 1) ++ TABLEGLOBAL(r6, caml_young_limit, 1) ++ TABLEGLOBAL(r12, caml_program, 0) ++ TABLEGLOBAL(r4, caml_bottom_of_stack, 2) ++ TABLEGLOBAL(r5, caml_last_return_address, 7) ++ TABLEGLOBAL(r6, caml_gc_regs, 0) ++ TABLEGLOBAL(r6, caml_exception_pointer, 2) ++ TABLEGLOBAL(r4, caml_young_ptr, 2) ++ TABLEGLOBAL(r4, caml_young_limit, 2) ++ TABLEGLOBAL(r4, caml_exception_pointer, 3) ++ TABLEGLOBAL(r4, caml_bottom_of_stack, 3) ++ TABLEGLOBAL(r4, caml_last_return_address, 8) ++ TABLEGLOBAL(r4, caml_gc_regs, 1) ++ TABLEGLOBAL(r4, caml_young_ptr, 3) ++ TABLEGLOBAL(r12, caml_exception_pointer, 4) ++ TABLEGLOBAL(r1, caml_backtrace_active, 0) ++ TABLEGLOBAL(trap_ptr, caml_exception_pointer, 5) ++ TABLEGLOBAL(alloc_ptr, caml_young_ptr, 4) ++ TABLEGLOBAL(alloc_limit, caml_young_limit, 3) ++ TABLEGLOBAL(r1, caml_backtrace_active, 1) ++ TABLEGLOBAL(r1, caml_last_return_address, 9) ++ TABLEGLOBAL(r2, caml_bottom_of_stack, 4) ++ TABLEGLOBAL(r12, caml_apply2, 0) ++ TABLEGLOBAL(r12, caml_apply3, 0) ++ TABLEGLOBAL(r7, caml_array_bound_error, 0) ++ TABLEGLOBALFULL(r5, .Ltrap_handler, Ltrap_handler, 0) ++ + .globl caml_system__code_end + caml_system__code_end: + ++ + /* GC roots for callback */ + + .data diff --git a/packages/ocaml-android32.4.04.0/files/patches/pic.patch b/packages/ocaml-android32.4.04.0/files/patches/pic.patch new file mode 100644 index 0000000..06aa150 --- /dev/null +++ b/packages/ocaml-android32.4.04.0/files/patches/pic.patch @@ -0,0 +1,11 @@ +--- orig/utils/clflags.ml 2016-11-04 12:08:24.000000000 -0400 ++++ patch/utils/clflags.ml 2018-11-11 22:25:40.000000000 -0500 +@@ -147,7 +147,7 @@ + + let pic_code = ref (match Config.architecture with (* -fPIC *) + | "amd64" -> true +- | _ -> false) ++ | _ -> true) + + let runtime_variant = ref "";; (* -runtime-variant *) + diff --git a/packages/ocaml-android32.4.04.0/opam b/packages/ocaml-android32.4.04.0/opam index 7c57089..36165de 100644 --- a/packages/ocaml-android32.4.04.0/opam +++ b/packages/ocaml-android32.4.04.0/opam @@ -3,6 +3,8 @@ maintainer: "whitequark@whitequark.org" patches: [ "patches/ocamlmklib.patch" "patches/arm_const_islands.patch" + "patches/pic.patch" + "patches/arm_s.patch" ] substs: ["android.conf" "config/Makefile"] build: [ diff --git a/packages/ocaml-android64.4.04.0/descr b/packages/ocaml-android64.4.04.0/descr new file mode 100644 index 0000000..148cb0e --- /dev/null +++ b/packages/ocaml-android64.4.04.0/descr @@ -0,0 +1 @@ +OCaml cross-compiler for 64-bit Android targets diff --git a/packages/ocaml-android64.4.04.0/files/android.conf.in b/packages/ocaml-android64.4.04.0/files/android.conf.in new file mode 100644 index 0000000..ce49624 --- /dev/null +++ b/packages/ocaml-android64.4.04.0/files/android.conf.in @@ -0,0 +1,10 @@ +path(android) = "%{prefix}%/android-sysroot/lib" +destdir(android) = "%{prefix}%/android-sysroot/lib" +stdlib(android) = "%{prefix}%/android-sysroot/lib/ocaml" +ocamlc(android) = "%{prefix}%/android-sysroot/bin/ocamlc" +ocamlopt(android) = "%{prefix}%/android-sysroot/bin/ocamlopt" +ocamlcp(android) = "%{prefix}%/android-sysroot/bin/ocamlcp" +ocamlmklib(android) = "%{prefix}%/android-sysroot/bin/ocamlmklib" +ocamlmktop(android) = "%{prefix}%/android-sysroot/bin/ocamlmktop" +ocamldoc(android) = "%{prefix}%/android-sysroot/bin/ocamldoc" +ocamldep(android) = "%{prefix}%/android-sysroot/bin/ocamldep" diff --git a/packages/ocaml-android64.4.04.0/files/config/Makefile.in b/packages/ocaml-android64.4.04.0/files/config/Makefile.in new file mode 100644 index 0000000..e668fe3 --- /dev/null +++ b/packages/ocaml-android64.4.04.0/files/config/Makefile.in @@ -0,0 +1,93 @@ +BINDIR=%{prefix}%/android-sysroot/bin +LIBDIR=%{prefix}%/android-sysroot/lib/ocaml +STUBLIBDIR=$(LIBDIR)/stublibs +MANDIR=%{prefix}%/android-sysroot/man +MANEXT=1 +CAMLRUN=%{bin}%/ocamlrun +CAMLYACC=%{bin}%/ocamlyacc +RANLIB=%{conf-android:toolpref}%ranlib +RANLIBCMD=%{conf-android:toolpref}%ranlib +ARCMD=%{conf-android:toolpref}%ar +HASHBANGSCRIPTS=true +UNIX_OR_WIN32=unix +UNIXLIB=unix +GRAPHLIB=graph +FLAMBDA=%{conf-flambda-android:installed?true:false}% +WITH_SPACETIME=false +LIBUNWIND_AVAILABLE=false +LIBUNWIND_LINK_FLAGS= +PROFINFO_WIDTH=26 +SAFE_STRING=false + +BNG_ARCH=generic +BNG_ASM_LEVEL=0 +PTHREAD_LINK= +PTHREAD_CAML_LINK= +X11_INCLUDES=not found +X11_LINK=not found +TK_DEFS= +TK_LINK= +LIBBFD_LINK= +BYTECC=%{conf-android:toolpref}%gcc %{conf-android:cflags}% -O2 -fPIC +BYTECCCOMPOPTS=-fno-defer-pop -Wall -D_FILE_OFFSET_BITS=64 -D_REENTRANT +BYTECCDBGCOMPOPTS=-g +NAME_OBJ_FLAG=-o +BYTECCLINKOPTS= -Wl,-E +BYTECCLIBS= -lm -ldl +BYTECCRPATH=-Wl,-rpath, +EXE= +SUPPORTS_SHARED_LIBRARIES=true +SHAREDCCCOMPOPTS=-fPIC +MKSHAREDLIBRPATH=-Wl,-rpath, +NATDYNLINKOPTS=-Wl,-E +SYSLIB=-l$(1) +#ml let syslib x = "-l"^x;; + +### How to build a static library +MKLIB=%{conf-android:toolpref}%ar rc $(1) $(2); %{conf-android:toolpref}%ranlib $(1) +#ml let mklib out files opts = Printf.sprintf "%{conf-android:toolpref}%ar rc %s %s %s; %{conf-android:toolpref}%ranlib %s" out opts files out;; +ARCH=%{conf-android:arch}% +MODEL=%{conf-android:subarch}% +SYSTEM=%{conf-android:system}% +NATIVECC=$(BYTECC) +NATIVECCCOMPOPTS=-Wall -D_FILE_OFFSET_BITS=64 -D_REENTRANT +NATIVECCPROFOPTS=-Wall -D_FILE_OFFSET_BITS=64 -D_REENTRANT +NATIVECCLINKOPTS= +NATIVECCRPATH=-Wl,-rpath, +NATIVECCLIBS= -lm -ldl +ASM=%{conf-android:toolpref}%as +ASPP=$(BYTECC) -c +ASPPPROFFLAGS=-DPROFILING +PROFILING=prof +DYNLINKOPTS= -ldl +OTHERLIBRARIES=unix str num dynlink bigarray systhreads +DEBUGGER=ocamldebugger +CC_PROFILE=-pg +SYSTHREAD_SUPPORT=true +PARTIALLD=%{conf-android:toolpref}%ld %{conf-android:ldflags}% -r +PACKLD=$(PARTIALLD) $(NATIVECCLINKOPTS) -o +DLLCCCOMPOPTS= +IFLEXDIR= +O=o +A=a +SO=so +EXT_OBJ=.o +EXT_ASM=.s +EXT_LIB=.a +EXT_DLL=.so +EXTRALIBS= +CCOMPTYPE=cc +TOOLCHAIN=cc +NATDYNLINK=false +CMXS=cmxa +MKEXE=$(BYTECC) +MKEXEDEBUGFLAG=-g +MKDLL=$(BYTECC) -shared +MKMAINDLL=$(BYTECC) -shared +RUNTIMED=runtimed +SHARED=shared +WITH_DEBUGGER=ocamldebugger +WITH_OCAMLDOC=ocamldoc +ASM_CFI_SUPPORTED=false +WITH_FRAME_POINTERS=false +TARGET=%{conf-android:triple}% diff --git a/packages/ocaml-android64.4.04.0/files/config/m.h b/packages/ocaml-android64.4.04.0/files/config/m.h new file mode 100644 index 0000000..ae1a765 --- /dev/null +++ b/packages/ocaml-android64.4.04.0/files/config/m.h @@ -0,0 +1,15 @@ +#define ARCH_SIXTYFOUR +#define SIZEOF_INT 4 +#define SIZEOF_LONG 8 +#define SIZEOF_PTR 8 +#define SIZEOF_SHORT 2 +#define SIZEOF_LONGLONG 8 +#define ARCH_INT64_TYPE long long +#define ARCH_UINT64_TYPE unsigned long long +#define ARCH_INT64_PRINTF_FORMAT "I64" +#undef ARCH_BIG_ENDIAN +#undef ARCH_ALIGN_DOUBLE +#undef ARCH_ALIGN_INT64 +#undef NONSTANDARD_DIV_MOD +#undef ASM_CFI_SUPPORTED +#define PROFINFO_WIDTH 26 diff --git a/packages/ocaml-android64.4.04.0/files/config/s.h b/packages/ocaml-android64.4.04.0/files/config/s.h new file mode 100644 index 0000000..4a37424 --- /dev/null +++ b/packages/ocaml-android64.4.04.0/files/config/s.h @@ -0,0 +1,51 @@ +#define OCAML_OS_TYPE "Unix" +#define OCAML_STDLIB_DIR "." +#define POSIX_SIGNALS +#define HAS_C99_FLOAT_OPS +#define HAS_GETRUSAGE +#define HAS_TIMES +#define HAS_SOCKETS +#define HAS_SOCKLEN_T +#define HAS_INET_ATON +#define HAS_IPV6 +#define HAS_STDINT_H +#define HAS_UNISTD +#define HAS_OFF_T +#define HAS_DIRENT +#define HAS_REWINDDIR +#define HAS_LOCKF +// #define HAS_MKFIFO +#define HAS_GETCWD +#define HAS_GETWD +#define HAS_GETPRIORITY +#define HAS_UTIME +#define HAS_UTIMES +#define HAS_DUP2 +#define HAS_FCHMOD +#define HAS_TRUNCATE +#define HAS_SYS_SELECT_H +#define HAS_SELECT +#define HAS_SYMLINK +#define HAS_WAITPID +#define HAS_WAIT4 +#define HAS_GETGROUPS +#define HAS_SETGROUPS +#define HAS_INITGROUPS +#define HAS_TERMIOS +#define HAS_ASYNC_IO +#define HAS_SETITIMER +#define HAS_GETHOSTNAME +#define HAS_UNAME +#define HAS_GETTIMEOFDAY +#define HAS_MKTIME +#define HAS_SETSID +#define HAS_PUTENV +#define HAS_LOCALE +#define SUPPORT_DYNAMIC_LINKING +#define HAS_MMAP +#define HAS_PWRITE +#define HAS_GETHOSTBYNAME_R 6 +// #define HAS_GETHOSTBYADDR_R 8 +#define HAS_MKSTEMP +#define HAS_NICE +#define HAS_SIGWAIT diff --git a/packages/ocaml-android64.4.04.0/files/install.sh b/packages/ocaml-android64.4.04.0/files/install.sh new file mode 100755 index 0000000..2298069 --- /dev/null +++ b/packages/ocaml-android64.4.04.0/files/install.sh @@ -0,0 +1,12 @@ +#!/bin/sh -e + +PREFIX="$1" + +for pkg in bigarray bytes compiler-libs dynlink findlib num num-top stdlib str threads unix; do + cp -r "${PREFIX}/lib/${pkg}" "${PREFIX}/android-sysroot/lib/" +done + +mkdir -p "${PREFIX}/lib/findlib.conf.d" +cp android.conf "${PREFIX}/lib/findlib.conf.d" + +(cd "${PREFIX}/android-sysroot/bin/" && ln -sf ocamlc.byte ocamlc) diff --git a/packages/ocaml-android64.4.04.0/files/patches/arm_const_islands.patch b/packages/ocaml-android64.4.04.0/files/patches/arm_const_islands.patch new file mode 100644 index 0000000..1a23137 --- /dev/null +++ b/packages/ocaml-android64.4.04.0/files/patches/arm_const_islands.patch @@ -0,0 +1,116 @@ +From 937d7a6a7e37dc101aee3a7ca32c69550967ae3b Mon Sep 17 00:00:00 2001 +From: whitequark +Date: Fri, 30 Dec 2016 13:24:37 +0000 +Subject: [PATCH] ARM: fix excessive immediate values for pc-relative ldr. + +ARM does not have an instruction with a 32-bit immediate. Therefore, +on ARM, to load arbitrary 32-bit constants, there are two main +strategies: load the halves of the constant one by one (in Thumb, +this would be done with movw/movt), or periodically emit +the so-called constant islands, that is, small chunks of data inside +executable code that are jumped around. + +Note that when loading constant islands, care must be taken to avoid +the same problem as what they are solving: the ldr instruction only +has a 12-bit offset, and so there may not be more than 4K of code +between the load and the constant island it refers to. + +The OCaml ARM backend opts for the constant islands. It implements +it as follows: after emitting an instruction, it checks whether, +if the first instruction it has emitted since emitting a previous +constant island, can still address the last constant it is going +to emit. + +This works in most cases, but not when emitting Lswitch. Consider +that a switch can have an arbitrarily large jump table. If the jump +table is larger than 4K, then, by the time we have emitted it, +all ldr instructions prior to the switch are irreparably broken. + +This commit changes the constant island emission logic to first +calculate the size of an Lswitch, then consider emitting a constant +island, and only afterwards emitting Lswitch. For all other +instructions the logic is unchanged. + +To do this in a fully rigorous way, arguably it would be better to +have a separate function that returns the size of an instruction, +and a separate one that emits an instruction. However, emit_instr +has quite a bit of logic, which can affect the size of +the instruction, and so I have opted against duplicating that logic, +on the grounds that this will make maintenance much trickier. +--- + asmcomp/arm/emit.mlp | 28 +++++++++++++++++++++++++--- + testsuite/tests/asmcomp/Makefile | 2 +- + 2 files changed, 26 insertions(+), 4 deletions(-) + +diff --git a/asmcomp/arm/emit.mlp b/asmcomp/arm/emit.mlp +index de61da57d..579c68c06 100644 +--- a/asmcomp/arm/emit.mlp ++++ b/asmcomp/arm/emit.mlp +@@ -802,26 +802,48 @@ let emit_instr i = + + (* Emission of an instruction sequence *) + ++(* consider the degenerate case where a single literal is followed by ++ a jump table longer than 4KB; we have to emit the constant pool ++ before the jump table or it will be too late *) ++let emit_instr_before_pool i = ++ match i.desc with ++ | Lswitch jumptbl -> 2 + Array.length jumptbl ++ | _ -> emit_instr i ++ ++let emit_instr_after_pool i = ++ match i.desc with ++ | Lswitch _ -> ignore (emit_instr i); () ++ | _ -> () ++ + let rec emit_all ninstr i = + if i.desc = Lend then () else begin +- let n = emit_instr i in ++ let n = emit_instr_before_pool i in + let ninstr' = ninstr + n in + (* fldd can address up to +/-1KB, ldr can address up to +/-4KB *) + let limit = (if !fpu >= VFPv2 && !float_literals <> [] + then 127 + else 511) in + let limit = limit - !num_literals in +- if ninstr' >= limit - 64 && not(has_fallthrough i.desc) then begin ++ let fallthrough = ++ match i.desc with ++ | Lswitch _ -> true (* not emitted yet *) ++ | desc -> has_fallthrough desc ++ in ++ if ninstr' >= limit - 64 && not(fallthrough) then begin + emit_literals(); ++ emit_instr_after_pool i; + emit_all 0 i.next + end else if !num_literals != 0 && ninstr' >= limit then begin + let lbl = new_label() in + ` b {emit_label lbl}\n`; + emit_literals(); + `{emit_label lbl}:\n`; ++ emit_instr_after_pool i; + emit_all 0 i.next +- end else ++ end else begin ++ emit_instr_after_pool i; + emit_all ninstr' i.next ++ end + end + + (* Emission of the profiling prelude *) +diff --git a/testsuite/tests/asmcomp/Makefile b/testsuite/tests/asmcomp/Makefile +index abcb87296..7b714c897 100644 +--- a/testsuite/tests/asmcomp/Makefile ++++ b/testsuite/tests/asmcomp/Makefile +@@ -49,7 +49,7 @@ lexcmm.ml: lexcmm.mll + @$(OCAMLLEX) -q lexcmm.mll + + MLCASES=optargs staticalloc bind_tuples is_static register_typing \ +- register_typing_switch ++ register_typing_switch large_switch + ARGS_is_static=-I $(OTOPDIR)/byterun is_in_static_data.c + MLCASES_FLAMBDA=is_static_flambda unrolling_flambda unrolling_flambda2 \ + static_float_array_flambda static_float_array_flambda_opaque +-- +2.11.0 + diff --git a/packages/ocaml-android64.4.04.0/files/patches/ocamlmklib.patch b/packages/ocaml-android64.4.04.0/files/patches/ocamlmklib.patch new file mode 100644 index 0000000..f60b4ab --- /dev/null +++ b/packages/ocaml-android64.4.04.0/files/patches/ocamlmklib.patch @@ -0,0 +1,12 @@ +diff --git a/tools/ocamlmklib.ml b/tools/ocamlmklib.ml +index 23a273e..f3fc0fd 100644 +--- a/tools/ocamlmklib.ml ++++ b/tools/ocamlmklib.ml +@@ -293,6 +293,6 @@ let build_libs () = + let _ = + try +- parse_arguments Sys.argv; ++ parse_arguments (Array.append Sys.argv (Array.of_list (try String.split_on_char ',' (Sys.getenv "OCAMLMKLIBPARAM" ) with Not_found -> []))); + build_libs() + with + | Bad_argument "" -> diff --git a/packages/ocaml-android64.4.04.0/files/patches/pic.patch b/packages/ocaml-android64.4.04.0/files/patches/pic.patch new file mode 100644 index 0000000..06aa150 --- /dev/null +++ b/packages/ocaml-android64.4.04.0/files/patches/pic.patch @@ -0,0 +1,11 @@ +--- orig/utils/clflags.ml 2016-11-04 12:08:24.000000000 -0400 ++++ patch/utils/clflags.ml 2018-11-11 22:25:40.000000000 -0500 +@@ -147,7 +147,7 @@ + + let pic_code = ref (match Config.architecture with (* -fPIC *) + | "amd64" -> true +- | _ -> false) ++ | _ -> true) + + let runtime_variant = ref "";; (* -runtime-variant *) + diff --git a/packages/ocaml-android64.4.04.0/files/remove.sh b/packages/ocaml-android64.4.04.0/files/remove.sh new file mode 100755 index 0000000..17e9d0b --- /dev/null +++ b/packages/ocaml-android64.4.04.0/files/remove.sh @@ -0,0 +1,10 @@ +#!/bin/sh -e + +PREFIX="$1" + +for bin in ocaml ocamlc ocamlcp ocamldebug ocamldep ocamldoc ocamllex ocamlmklib ocamlmktop ocamlobjinfo ocamlopt ocamloptp ocamlprof ocamlrun ocamlyacc; do + rm -f "${PREFIX}/android-sysroot/bin/${bin}" +done + +rm -rf "${PREFIX}/android-sysroot/lib/ocaml" +rm -rf "${PREFIX}/lib/findlib.conf.d/android.conf" diff --git a/packages/ocaml-android64.4.04.0/opam b/packages/ocaml-android64.4.04.0/opam new file mode 100644 index 0000000..affe275 --- /dev/null +++ b/packages/ocaml-android64.4.04.0/opam @@ -0,0 +1,25 @@ +opam-version: "1" +maintainer: "whitequark@whitequark.org" +patches: [ + "patches/ocamlmklib.patch" + "patches/pic.patch" +] +substs: ["android.conf" "config/Makefile"] +build: [ + [make "world" "opt" "install"] + ["./install.sh" "%{prefix}%"] +] +remove: [ + ["./remove.sh" "%{prefix}%"] +] +depends: [ + "conf-android" + "ocamlfind" {>= "1.5.4"} +] +depopts: [ + "conf-flambda-android" +] +conflicts: [ + "ocaml-android32" +] +available: [ (ocaml-version = "4.04.0" & arch = "amd64") | compiler = "4.04.0" ] diff --git a/packages/ocaml-android64.4.04.0/url b/packages/ocaml-android64.4.04.0/url new file mode 100644 index 0000000..e3e0d37 --- /dev/null +++ b/packages/ocaml-android64.4.04.0/url @@ -0,0 +1,2 @@ +archive: "https://github.com/ocaml/ocaml/archive/4.04.0.tar.gz" +checksum: "dbf5f869bf0621d2922547b671b36566"