libretro, build fixes for android
authorkub <derkub@gmail.com>
Thu, 16 Jul 2020 17:29:34 +0000 (19:29 +0200)
committerkub <derkub@gmail.com>
Thu, 16 Jul 2020 17:29:34 +0000 (19:29 +0200)
Makefile.libretro
cpu/drc/emit_arm.c
jni/Android.mk
tools/mkoffsets.sh
tools/offsets/generic-ilp32-offsets.h [moved from tools/offsets/generic32-offsets.h with 100% similarity]
tools/offsets/generic-llp64-offsets.h [new file with mode: 0644]
tools/offsets/generic-lp64-offsets.h [moved from tools/offsets/generic64-offsets.h with 100% similarity]
tools/offsets/genericn32-offsets.h [deleted file]
tools/offsets/ios9-offsets.h [deleted symlink]

index 6c63dba..bf7b387 100644 (file)
@@ -299,9 +299,9 @@ endif
 
 ifeq ($(NO_ARM_ASM),1)
 use_cyclone = 0
-use_fame ?= 1
+use_fame = 1
 use_drz80 = 0
-use_cz80 ?= 1
+use_cz80 = 1
 use_svpdrc = 0
 
 asm_memory = 0
index 3f37343..1a6ffc3 100644 (file)
@@ -48,6 +48,9 @@
 #define M6(x,y,z,a,b,c)        (M5(x,y,z,a,b)|M1(c))
 #define M10(a,b,c,d,e,f,g,h,i,j) (M5(a,b,c,d,e)|M5(f,g,h,i,j))
 
+// avoid a warning with clang
+static inline uintptr_t pabs(intptr_t v) { return labs(v); }
+
 // sys_cacheflush always flushes whole pages, and it's rather expensive on ARMs
 // hold a list of pending cache updates and merge requests to reduce cacheflush
 static struct { void *base, *end; } pageflush[4];
@@ -341,13 +344,13 @@ static void emith_flush(void)
 #define EOP_C_AM3_REG(cond,u,l,rn,rd,s,h,rm)       EOP_C_AM3(cond,u,0,l,rn,rd,s,h,rm)
 
 /* ldr and str */
-#define EOP_LDR_IMM2(cond,rd,rn,offset_12)  EOP_C_AM2_IMM(cond,(offset_12) >= 0,0,1,rn,rd,abs(offset_12))
-#define EOP_LDRB_IMM2(cond,rd,rn,offset_12) EOP_C_AM2_IMM(cond,(offset_12) >= 0,1,1,rn,rd,abs(offset_12))
-#define EOP_STR_IMM2(cond,rd,rn,offset_12)  EOP_C_AM2_IMM(cond,(offset_12) >= 0,0,0,rn,rd,abs(offset_12))
+#define EOP_LDR_IMM2(cond,rd,rn,offset_12)  EOP_C_AM2_IMM(cond,(offset_12) >= 0,0,1,rn,rd,pabs(offset_12))
+#define EOP_LDRB_IMM2(cond,rd,rn,offset_12) EOP_C_AM2_IMM(cond,(offset_12) >= 0,1,1,rn,rd,pabs(offset_12))
+#define EOP_STR_IMM2(cond,rd,rn,offset_12)  EOP_C_AM2_IMM(cond,(offset_12) >= 0,0,0,rn,rd,pabs(offset_12))
 
-#define EOP_LDR_IMM(   rd,rn,offset_12) EOP_C_AM2_IMM(A_COND_AL,(offset_12) >= 0,0,1,rn,rd,abs(offset_12))
+#define EOP_LDR_IMM(   rd,rn,offset_12) EOP_C_AM2_IMM(A_COND_AL,(offset_12) >= 0,0,1,rn,rd,pabs(offset_12))
 #define EOP_LDR_SIMPLE(rd,rn)           EOP_C_AM2_IMM(A_COND_AL,1,0,1,rn,rd,0)
-#define EOP_STR_IMM(   rd,rn,offset_12) EOP_C_AM2_IMM(A_COND_AL,(offset_12) >= 0,0,0,rn,rd,abs(offset_12))
+#define EOP_STR_IMM(   rd,rn,offset_12) EOP_C_AM2_IMM(A_COND_AL,(offset_12) >= 0,0,0,rn,rd,pabs(offset_12))
 #define EOP_STR_SIMPLE(rd,rn)           EOP_C_AM2_IMM(A_COND_AL,1,0,0,rn,rd,0)
 
 #define EOP_LDR_REG_LSL(cond,rd,rn,rm,shift_imm) EOP_C_AM2_REG(cond,1,0,1,rn,rd,shift_imm,A_AM1_LSL,rm)
@@ -355,19 +358,19 @@ static void emith_flush(void)
 #define EOP_LDRB_REG_LSL(cond,rd,rn,rm,shift_imm) EOP_C_AM2_REG(cond,1,1,1,rn,rd,shift_imm,A_AM1_LSL,rm)
 #define EOP_STR_REG_LSL_WB(cond,rd,rn,rm,shift_imm) EOP_C_AM2_REG(cond,1,0,2,rn,rd,shift_imm,A_AM1_LSL,rm)
 
-#define EOP_LDRH_IMM2(cond,rd,rn,offset_8)  EOP_C_AM3_IMM(cond,(offset_8) >= 0,1,rn,rd,0,1,abs(offset_8))
+#define EOP_LDRH_IMM2(cond,rd,rn,offset_8)  EOP_C_AM3_IMM(cond,(offset_8) >= 0,1,rn,rd,0,1,pabs(offset_8))
 #define EOP_LDRH_REG2(cond,rd,rn,rm)        EOP_C_AM3_REG(cond,1,1,rn,rd,0,1,rm)
 
-#define EOP_LDRH_IMM(   rd,rn,offset_8)  EOP_C_AM3_IMM(A_COND_AL,(offset_8) >= 0,1,rn,rd,0,1,abs(offset_8))
+#define EOP_LDRH_IMM(   rd,rn,offset_8)  EOP_C_AM3_IMM(A_COND_AL,(offset_8) >= 0,1,rn,rd,0,1,pabs(offset_8))
 #define EOP_LDRH_SIMPLE(rd,rn)           EOP_C_AM3_IMM(A_COND_AL,1,1,rn,rd,0,1,0)
 #define EOP_LDRH_REG(   rd,rn,rm)        EOP_C_AM3_REG(A_COND_AL,1,1,rn,rd,0,1,rm)
-#define EOP_STRH_IMM(   rd,rn,offset_8)  EOP_C_AM3_IMM(A_COND_AL,(offset_8) >= 0,0,rn,rd,0,1,abs(offset_8))
+#define EOP_STRH_IMM(   rd,rn,offset_8)  EOP_C_AM3_IMM(A_COND_AL,(offset_8) >= 0,0,rn,rd,0,1,pabs(offset_8))
 #define EOP_STRH_SIMPLE(rd,rn)           EOP_C_AM3_IMM(A_COND_AL,1,0,rn,rd,0,1,0)
 #define EOP_STRH_REG(   rd,rn,rm)        EOP_C_AM3_REG(A_COND_AL,1,0,rn,rd,0,1,rm)
 
-#define EOP_LDRSB_IMM2(cond,rd,rn,offset_8) EOP_C_AM3_IMM(cond,(offset_8) >= 0,1,rn,rd,1,0,abs(offset_8))
+#define EOP_LDRSB_IMM2(cond,rd,rn,offset_8) EOP_C_AM3_IMM(cond,(offset_8) >= 0,1,rn,rd,1,0,pabs(offset_8))
 #define EOP_LDRSB_REG2(cond,rd,rn,rm)       EOP_C_AM3_REG(cond,1,1,rn,rd,1,0,rm)
-#define EOP_LDRSH_IMM2(cond,rd,rn,offset_8) EOP_C_AM3_IMM(cond,(offset_8) >= 0,1,rn,rd,1,1,abs(offset_8))
+#define EOP_LDRSH_IMM2(cond,rd,rn,offset_8) EOP_C_AM3_IMM(cond,(offset_8) >= 0,1,rn,rd,1,1,pabs(offset_8))
 #define EOP_LDRSH_REG2(cond,rd,rn,rm)       EOP_C_AM3_REG(cond,1,1,rn,rd,1,1,rm)
 
 /* ldm and stm */
index 9252d9f..8ed53ae 100644 (file)
@@ -18,7 +18,6 @@ use_musashi = 0
 use_drz80 = 0
 use_cz80 = 0
 use_sh2drc = 0
-use_sh2mame = 0
 use_svpdrc = 0
 
 asm_memory = 0
@@ -27,6 +26,8 @@ asm_ym2612 = 0
 asm_misc = 0
 asm_cdmemory = 0
 asm_mix = 0
+asm_32xdraw = 0
+asm_32xmemory = 0
 
 ifeq ($(TARGET_ARCH),arm)
   LOCAL_ARM_MODE := arm
@@ -34,21 +35,19 @@ ifeq ($(TARGET_ARCH),arm)
     LOCAL_ARM_NEON := true
   endif
 
-  use_cyclone = 1
-
-  # texrels, -perf ~~8%
-  use_drz80 = 0
-  use_cz80 = 1
-
+#  use_cyclone = 1
+#  use_drz80 = 1
   use_sh2drc = 1
-  use_svpdrc = 1
+#  use_svpdrc = 1
 
-#  asm_memory = 1 # texrels, -perf negligible
-  asm_render = 1
-#  asm_ym2612 = 1 # texrels, -perf ~~4%
-  asm_misc = 1
-#  asm_cdmemory = 1 # texrels
-  asm_mix = 1
+#  asm_memory = 1
+#  asm_render = 1
+#  asm_ym2612 = 1
+#  asm_misc = 1
+#  asm_cdmemory = 1
+#  asm_mix = 1
+#  asm_32xdraw = 1
+#  asm_32xmemory = 1
 
 # for armeabi to build...
 CYCLONE_CONFIG = cyclone_config_armv4.h
@@ -59,7 +58,6 @@ $(cleantarget)::
 else
   use_fame = 1
   use_cz80 = 1
-  use_sh2mame = 1
 endif
 
 # PD is currently not strict aliasing safe
@@ -73,6 +71,7 @@ include $(R)platform/common/common.mak
 
 LOCAL_SRC_FILES += $(SRCS_COMMON)
 LOCAL_SRC_FILES += $(R)platform/libretro/libretro.c
+LOCAL_SRC_FILES += $(R)platform/common/mp3_sync.c
 LOCAL_SRC_FILES += $(R)platform/common/mp3.c
 LOCAL_SRC_FILES += $(R)platform/common/mp3_dummy.c
 
@@ -91,4 +90,12 @@ LOCAL_CFLAGS += -Wall -O2 -ffast-math -DNDEBUG
 LOCAL_CFLAGS += $(addprefix -D,$(DEFINES))
 LOCAL_LDLIBS := -llog
 
+ifneq ($(filter armeabi%, $(TARGET_ARCH_ABI)),)
+$(CORE_DIR)/pico/pico_int_offs.h:
+       cp $(CORE_DIR)/tools/offsets/generic-ilp32-offsets.h $@
+.PHONY: $(CORE_DIR)/pico/pico_int_offs.h
+
+$(filter %.S,$(SRCS_COMMON)): $(CORE_DIR)/pico/pico_int_offs.h
+endif
+
 include $(BUILD_SHARED_LIBRARY)
index 0aa8e96..207ffa2 100755 (executable)
@@ -51,8 +51,8 @@ check_obj ()
                fi
                # find the start line of the .rodata section; read the next line
                ro=$($OBJDUMP -s /tmp/getoffs.o | awk '\
-                 /Contents of section.*(__const|.rodata|.sdata)/ {o=1; next} \
-                 {if(o) { gsub(/  .*/,""); $1=""; gsub(/ /,""); print; o=0}}')
+                 /Contents of section.*(__const|.ro?data|.sdata)/ {o=1; next} \
+                 {if(o) { gsub(/  .*/,""); $1=""; gsub(/ /,""); print; exit}}')
                # no working tool for extracting the ro data; stop here
                if [ -z "$ro" ]; then
                        echo "/* mkoffset.sh: no readelf or not ELF, offset table not created */" >$fn
@@ -79,8 +79,8 @@ compile_rodata ()
        elif [ -n "$OBJDUMP" ]; then
                # find the start line of the .rodata section; read the next line
                ro=$($OBJDUMP -s /tmp/getoffs.o | awk '\
-                 /Contents of section.*(__const|.rodata|.sdata)/ {o=1; next} \
-                 {if(o) { gsub(/  .*/,""); $1=""; gsub(/ /,""); print; o=0}}')
+                 /Contents of section.*(__const|.ro?data|.sdata)/ {o=1; next} \
+                 {if(o) { gsub(/  .*/,""); $1=""; gsub(/ /,""); print; exit}}')
        fi
        if [ "$ENDIAN" = "le" ]; then
                # swap needed for le target
@@ -104,7 +104,7 @@ get_define () # prefix struct member member...
        name=$(echo $* | sed 's/ /_/g')
        echo '#include <stdint.h>' > /tmp/getoffs.c
        echo '#include "pico/pico_int.h"' >> /tmp/getoffs.c
-       echo "static const struct $struct p;" >> /tmp/getoffs.c
+       echo "static struct $struct p;" >> /tmp/getoffs.c
        echo "const int32_t val = (char *)&p.$field - (char*)&p;" >>/tmp/getoffs.c
        compile_rodata
        line=$(printf "#define %-20s 0x%04x" $prefix$name $rodata)
diff --git a/tools/offsets/generic-llp64-offsets.h b/tools/offsets/generic-llp64-offsets.h
new file mode 100644 (file)
index 0000000..71c776b
--- /dev/null
@@ -0,0 +1,39 @@
+/* autogenerated by mkoffset.sh, do not edit */
+/* target endianess: le, compiled with: x86_64-w64-mingw32-gcc */
+#define OFS_Pico_video_reg   0x0000
+#define OFS_Pico_m_rotate    0x0040
+#define OFS_Pico_m_z80Run    0x0041
+#define OFS_Pico_m_dirtyPal  0x0046
+#define OFS_Pico_m_hardware  0x0047
+#define OFS_Pico_m_z80_reset 0x004f
+#define OFS_Pico_m_sram_reg  0x0049
+#define OFS_Pico_sv          0x0090
+#define OFS_Pico_sv_data     0x0090
+#define OFS_Pico_sv_start    0x0098
+#define OFS_Pico_sv_end      0x009c
+#define OFS_Pico_sv_flags    0x00a0
+#define OFS_Pico_rom         0x0588
+#define OFS_Pico_romsize     0x0590
+#define OFS_Pico_est         0x00d8
+#define OFS_EST_DrawScanline 0x0000
+#define OFS_EST_rendstatus   0x0004
+#define OFS_EST_DrawLineDest 0x0008
+#define OFS_EST_HighCol      0x0010
+#define OFS_EST_HighPreSpr   0x0018
+#define OFS_EST_Pico         0x0020
+#define OFS_EST_PicoMem_vram 0x0028
+#define OFS_EST_PicoMem_cram 0x0030
+#define OFS_EST_PicoOpt      0x0038
+#define OFS_EST_Draw2FB      0x0040
+#define OFS_EST_HighPal      0x0048
+#define OFS_PMEM_vram        0x10000
+#define OFS_PMEM_vsram       0x22100
+#define OFS_PMEM32x_pal_native 0x90e00
+#define OFS_SH2_is_slave     0x0a18
+#define OFS_SH2_p_bios       0x0098
+#define OFS_SH2_p_da         0x00a0
+#define OFS_SH2_p_sdram      0x00a8
+#define OFS_SH2_p_rom        0x00b0
+#define OFS_SH2_p_dram       0x00b8
+#define OFS_SH2_p_drcblk_da  0x00c0
+#define OFS_SH2_p_drcblk_ram 0x00c8
diff --git a/tools/offsets/genericn32-offsets.h b/tools/offsets/genericn32-offsets.h
deleted file mode 100644 (file)
index 2ea6419..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* autogenerated by mkoffset.sh, do not edit */
-/* target endianess: le, compiled with: mipsel-linux-gnu-gcc -mabi=n32 */
-#define OFS_Pico_video_reg   0x0000
-#define OFS_Pico_m_rotate    0x0040
-#define OFS_Pico_m_z80Run    0x0041
-#define OFS_Pico_m_dirtyPal  0x0046
-#define OFS_Pico_m_hardware  0x0047
-#define OFS_Pico_m_z80_reset 0x004f
-#define OFS_Pico_m_sram_reg  0x0049
-#define OFS_Pico_sv          0x008c
-#define OFS_Pico_sv_data     0x008c
-#define OFS_Pico_sv_start    0x0090
-#define OFS_Pico_sv_end      0x0094
-#define OFS_Pico_sv_flags    0x0098
-#define OFS_Pico_rom         0x0554
-#define OFS_Pico_romsize     0x0558
-#define OFS_Pico_est         0x00c8
-#define OFS_EST_DrawScanline 0x0000
-#define OFS_EST_rendstatus   0x0004
-#define OFS_EST_DrawLineDest 0x0008
-#define OFS_EST_HighCol      0x000c
-#define OFS_EST_HighPreSpr   0x0010
-#define OFS_EST_Pico         0x0014
-#define OFS_EST_PicoMem_vram 0x0018
-#define OFS_EST_PicoMem_cram 0x001c
-#define OFS_EST_PicoOpt      0x0020
-#define OFS_EST_Draw2FB      0x0024
-#define OFS_EST_HighPal      0x0028
-#define OFS_PMEM_vram        0x10000
-#define OFS_PMEM_vsram       0x22100
-#define OFS_PMEM32x_pal_native 0x90e00
-#define OFS_SH2_is_slave     0x055c
-#define OFS_SH2_p_bios       0x0080
-#define OFS_SH2_p_da         0x0084
-#define OFS_SH2_p_sdram      0x0088
-#define OFS_SH2_p_rom        0x008c
-#define OFS_SH2_p_dram       0x0090
-#define OFS_SH2_p_drcblk_da  0x0094
-#define OFS_SH2_p_drcblk_ram 0x0098
diff --git a/tools/offsets/ios9-offsets.h b/tools/offsets/ios9-offsets.h
deleted file mode 120000 (symlink)
index 5ac5765..0000000
+++ /dev/null
@@ -1 +0,0 @@
-generic32-offsets.h
\ No newline at end of file