Add CHD dependencies to Makefiles and namespace mednafen's md5 implementation to avoid conflicts

This commit is contained in:
Build 2017-09-01 11:25:39 +02:00
parent 052a22cd8c
commit a44baaefa8
7 changed files with 102 additions and 36 deletions

View File

@ -4,6 +4,7 @@ HAVE_OPENGL = 0
HAVE_VULKAN = 0
HAVE_JIT = 0
HAVE_CDROM_NEW = 0
HAVE_CHD = 1
CORE_DIR := .
HAVE_GRIFFIN = 0

View File

@ -111,6 +111,15 @@ ifeq ($(NEED_CD), 1)
FLAGS += -DNEED_CD
endif
ifeq ($(HAVE_CHD), 1)
FLAGS += -DHAVE_CHD -D_7ZIP_ST -DPACKAGE_VERSION=\"1.3.2\" -DFLAC_API_EXPORTS -DFLAC__HAS_OGG=0 -DHAVE_LROUND -DHAVE_STDINT_H -DHAVE_STDLIB_H -DHAVE_SYS_PARAM_H
INCFLAGS += -I$(DEPS_DIR)/crypto -I$(DEPS_DIR)/flac-1.3.2/include -I$(DEPS_DIR)/flac-1.3.2/src/libFLAC/include -I$(DEPS_DIR)/lzma-16.04/C -I$(DEPS_DIR)/libchdr
ifeq ($(platform), win)
FLAGS += -DHAVE_FSEEKO
endif
endif
ifeq ($(NEED_TREMOR), 1)
FLAGS += -DNEED_TREMOR
endif
@ -251,6 +260,8 @@ SOURCES_C += $(LIBKIRK_DIR)/aes.c \
$(LIBKIRK_DIR)/kirk_engine.c \
$(LIBKIRK_DIR)/sha1.c
SOURCES_C += $(LIBRETRO_DIR)/file/file_path.c
SOURCES_C += $(CORE_DIR)/pgxp/pgxp_cpu.c \
@ -260,3 +271,54 @@ SOURCES_C += $(CORE_DIR)/pgxp/pgxp_cpu.c \
$(CORE_DIR)/pgxp/pgxp_main.c \
$(CORE_DIR)/pgxp/pgxp_mem.c \
$(CORE_DIR)/pgxp/pgxp_value.c
ifeq ($(HAVE_CHD), 1)
SOURCES_C += \
$(DEPS_DIR)/crypto/md5.c \
$(DEPS_DIR)/crypto/sha1.c \
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/bitmath.c \
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/bitreader.c \
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/cpu.c \
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/crc.c \
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/fixed.c \
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/fixed_intrin_sse2.c \
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/fixed_intrin_ssse3.c \
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/float.c \
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/format.c \
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/lpc.c \
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/lpc_intrin_avx2.c \
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/lpc_intrin_sse2.c \
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/lpc_intrin_sse41.c \
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/lpc_intrin_sse.c \
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/md5.c \
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/memory.c \
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/metadata_iterators.c \
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/metadata_object.c \
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/stream_decoder.c \
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/window.c \
$(DEPS_DIR)/lzma-16.04/C/Alloc.c \
$(DEPS_DIR)/lzma-16.04/C/Bra86.c \
$(DEPS_DIR)/lzma-16.04/C/Bra.c \
$(DEPS_DIR)/lzma-16.04/C/BraIA64.c \
$(DEPS_DIR)/lzma-16.04/C/CpuArch.c \
$(DEPS_DIR)/lzma-16.04/C/Delta.c \
$(DEPS_DIR)/lzma-16.04/C/LzFind.c \
$(DEPS_DIR)/lzma-16.04/C/Lzma86Dec.c \
$(DEPS_DIR)/lzma-16.04/C/Lzma86Enc.c \
$(DEPS_DIR)/lzma-16.04/C/LzmaDec.c \
$(DEPS_DIR)/lzma-16.04/C/LzmaEnc.c \
$(DEPS_DIR)/lzma-16.04/C/LzmaLib.c \
$(DEPS_DIR)/lzma-16.04/C/Sort.c \
$(DEPS_DIR)/libchdr/bitstream.c \
$(DEPS_DIR)/libchdr/cdrom.c \
$(DEPS_DIR)/libchdr/chd.c \
$(DEPS_DIR)/libchdr/flac.c \
$(DEPS_DIR)/libchdr/huffman.c
ifeq ($(platform), win)
SOURCES_C += $(DEPS_DIR)/flac-1.3.2/src/libFLAC/windows_unicode_filenames.c
endif
SOURCES_CXX += \
$(CDROM_DIR)/CDAccess_CHD.cpp
endif

View File

@ -2331,13 +2331,13 @@ static bool disk_set_image_index(unsigned index)
// Mednafen PSX really doesn't support adding disk images on the fly ...
// Hack around this.
static void update_md5_checksum(CDIF *iface)
static void mednafen_update_md5_checksum(CDIF *iface)
{
uint8 LayoutMD5[16];
md5_context layout_md5;
TOC toc;
md5_starts(&layout_md5);
mednafen_md5_starts(&layout_md5);
#ifndef HAVE_CDROM_NEW
TOC_Clear(&toc);
@ -2345,20 +2345,20 @@ static void update_md5_checksum(CDIF *iface)
iface->ReadTOC(&toc);
md5_update_u32_as_lsb(&layout_md5, toc.first_track);
md5_update_u32_as_lsb(&layout_md5, toc.last_track);
md5_update_u32_as_lsb(&layout_md5, toc.tracks[100].lba);
mednafen_md5_update_u32_as_lsb(&layout_md5, toc.first_track);
mednafen_md5_update_u32_as_lsb(&layout_md5, toc.last_track);
mednafen_md5_update_u32_as_lsb(&layout_md5, toc.tracks[100].lba);
for (uint32 track = toc.first_track; track <= toc.last_track; track++)
{
md5_update_u32_as_lsb(&layout_md5, toc.tracks[track].lba);
md5_update_u32_as_lsb(&layout_md5, toc.tracks[track].control & 0x4);
mednafen_md5_update_u32_as_lsb(&layout_md5, toc.tracks[track].lba);
mednafen_md5_update_u32_as_lsb(&layout_md5, toc.tracks[track].control & 0x4);
}
md5_finish(&layout_md5, LayoutMD5);
mednafen_md5_finish(&layout_md5, LayoutMD5);
memcpy(MDFNGameInfo->MD5, LayoutMD5, 16);
char *md5 = md5_asciistr(MDFNGameInfo->MD5);
char *md5 = mednafen_md5_asciistr(MDFNGameInfo->MD5);
log_cb(RETRO_LOG_INFO, "[Mednafen]: Updated md5 checksum: %s.\n", md5);
}
@ -2398,7 +2398,7 @@ static bool disk_replace_image_index(unsigned index, const struct retro_game_inf
/* If we replace, we want the "swap disk manually effect". */
extract_basename(retro_cd_base_name, info->path, sizeof(retro_cd_base_name));
/* Ugly, but needed to get proper disk swapping effect. */
update_md5_checksum(iface);
mednafen_update_md5_checksum(iface);
return true;
}
@ -3037,7 +3037,7 @@ static MDFNGI *MDFNI_LoadCD(const char *devicename)
{
md5_context layout_md5;
md5_starts(&layout_md5);
mednafen_md5_starts(&layout_md5);
for(unsigned i = 0; i < CDInterfaces.size(); i++)
{
@ -3048,18 +3048,18 @@ static MDFNGI *MDFNI_LoadCD(const char *devicename)
#endif
CDInterfaces[i]->ReadTOC(&toc);
md5_update_u32_as_lsb(&layout_md5, toc.first_track);
md5_update_u32_as_lsb(&layout_md5, toc.last_track);
md5_update_u32_as_lsb(&layout_md5, toc.tracks[100].lba);
mednafen_md5_update_u32_as_lsb(&layout_md5, toc.first_track);
mednafen_md5_update_u32_as_lsb(&layout_md5, toc.last_track);
mednafen_md5_update_u32_as_lsb(&layout_md5, toc.tracks[100].lba);
for(uint32 track = toc.first_track; track <= toc.last_track; track++)
{
md5_update_u32_as_lsb(&layout_md5, toc.tracks[track].lba);
md5_update_u32_as_lsb(&layout_md5, toc.tracks[track].control & 0x4);
mednafen_md5_update_u32_as_lsb(&layout_md5, toc.tracks[track].lba);
mednafen_md5_update_u32_as_lsb(&layout_md5, toc.tracks[track].control & 0x4);
}
}
md5_finish(&layout_md5, LayoutMD5);
mednafen_md5_finish(&layout_md5, LayoutMD5);
}
if (MDFNGameInfo == NULL)

View File

@ -28,8 +28,12 @@
#include "CDAccess.h"
#include "CDAccess_Image.h"
#include "CDAccess_CCD.h"
#ifdef HAVE_PBP
#include "CDAccess_PBP.h"
#endif
#ifdef HAVE_CHD
#include "CDAccess_CHD.h"
#endif
CDAccess::CDAccess()
{
@ -49,8 +53,9 @@ CDAccess *cdaccess_open_image(bool *success, const char *path, bool image_memcac
else if(strlen(path) >= 4 && !strcasecmp(path + strlen(path) - 4, ".pbp"))
return new CDAccess_PBP(path, image_memcache);
#endif
#ifdef HAVE_CHD
else if (strlen(path) >= 4 && !strcasecmp(path + strlen(path) - 4, ".chd"))
return new CDAccess_CHD(path, image_memcache);
#endif
return new CDAccess_Image(success, path, image_memcache);
}

View File

@ -42,8 +42,6 @@ class CDAccess_CHD : public CDAccess
int LoadSBI(const char* sbi_path);
void Cleanup(void);
bool Read_CHD_Hunk_RAW(uint8_t *buf, int32_t lba, CDRFILE_TRACK_INFO* track);
CDRFILE_TRACK_INFO Tracks[100]; // Track #0(HMM?) through 99
struct cpp11_array_doodad
{

View File

@ -30,7 +30,7 @@
(b)[(i) + 3] = (uint8_t)((n) >> 24); \
}
void md5_starts(struct md5_context *ctx)
void mednafen_md5_starts(struct md5_context *ctx)
{
ctx->total[0] = 0;
ctx->total[1] = 0;
@ -40,7 +40,7 @@ void md5_starts(struct md5_context *ctx)
ctx->state[3] = 0x10325476;
}
void md5_process(struct md5_context *ctx, uint8_t data[64])
void mednafen_md5_process(struct md5_context *ctx, uint8_t data[64])
{
uint32_t A, B, C, D, X[16];
@ -163,7 +163,7 @@ void md5_process(struct md5_context *ctx, uint8_t data[64])
ctx->state[3] += D;
}
void md5_update(struct md5_context *ctx, uint8_t *input, uint32_t length)
void mednafen_md5_update(struct md5_context *ctx, uint8_t *input, uint32_t length)
{
uint32_t left, fill;
@ -182,7 +182,7 @@ void md5_update(struct md5_context *ctx, uint8_t *input, uint32_t length)
if (left && length >= fill)
{
memcpy((void*)(ctx->buffer + left), (void*)input, fill);
md5_process(ctx, ctx->buffer);
mednafen_md5_process(ctx, ctx->buffer);
length -= fill;
input += fill;
left = 0;
@ -190,7 +190,7 @@ void md5_update(struct md5_context *ctx, uint8_t *input, uint32_t length)
while (length >= 64)
{
md5_process(ctx, input);
mednafen_md5_process(ctx, input);
length -= 64;
input += 64;
}
@ -199,7 +199,7 @@ void md5_update(struct md5_context *ctx, uint8_t *input, uint32_t length)
memcpy((void*)(ctx->buffer + left), (void*)input, length);
}
void md5_update_u32_as_lsb(struct md5_context *ctx, uint32_t input)
void mednafen_md5_update_u32_as_lsb(struct md5_context *ctx, uint32_t input)
{
uint8_t buf[4];
@ -208,7 +208,7 @@ void md5_update_u32_as_lsb(struct md5_context *ctx, uint32_t input)
buf[2] = input >> 16;
buf[3] = input >> 24;
md5_update(ctx, buf, 4);
mednafen_md5_update(ctx, buf, 4);
}
static uint8_t md5_padding[64] =
@ -219,7 +219,7 @@ static uint8_t md5_padding[64] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
void md5_finish(struct md5_context *ctx, uint8_t digest[16])
void mednafen_md5_finish(struct md5_context *ctx, uint8_t digest[16])
{
uint32_t last, padn;
uint8_t msglen[8];
@ -230,8 +230,8 @@ void md5_finish(struct md5_context *ctx, uint8_t digest[16])
last = (ctx->total[0] >> 3) & 0x3F;
padn = (last < 56) ? (56 - last) : (120 - last);
md5_update(ctx, md5_padding, padn);
md5_update(ctx, msglen, 8);
mednafen_md5_update(ctx, md5_padding, padn);
mednafen_md5_update(ctx, msglen, 8);
PUT_UINT32(ctx->state[0], digest, 0);
PUT_UINT32(ctx->state[1], digest, 4);
@ -241,7 +241,7 @@ void md5_finish(struct md5_context *ctx, uint8_t digest[16])
/* Uses a static buffer, so beware of how it's used. */
char *md5_asciistr(uint8_t digest[16])
char *mednafen_md5_asciistr(uint8_t digest[16])
{
static char str[33];
static char trans[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

View File

@ -14,13 +14,13 @@ struct md5_context
uint8_t buffer[64];
};
void md5_starts(struct md5_context *ctx);
void md5_update_u32_as_lsb(struct md5_context *ctx, uint32_t input);
void md5_update(struct md5_context *ctx, uint8_t *input, uint32_t length);
void md5_finish(struct md5_context *ctx, uint8_t digest[16]);
void mednafen_md5_starts(struct md5_context *ctx);
void mednafen_md5_update_u32_as_lsb(struct md5_context *ctx, uint32_t input);
void mednafen_md5_update(struct md5_context *ctx, uint8_t *input, uint32_t length);
void mednafen_md5_finish(struct md5_context *ctx, uint8_t digest[16]);
/* Uses a static buffer, so beware of how it's used. */
char *md5_asciistr(uint8_t digest[16]);
char *mednafen_md5_asciistr(uint8_t digest[16]);
#ifdef __cplusplus
}