From 902a7a7e0df1a4feb0c9f6fa884233f2c78e3a4e Mon Sep 17 00:00:00 2001 From: Rafael Kitover Date: Fri, 18 Nov 2016 08:59:27 -0800 Subject: [PATCH] fix 32bit build support Make ASM_CORE, ASM_SCALERS and ENABLE_MMX the defaults for 32bit builds on intel hosts (the host can be AMD64, as long as the target is 32bits.) Move mac nasm search into the mac section of the cmake code and stop defaulting to /usr/bin/nasm, this was screwing up the build on msys2. Fix src/filters/2xSaImmx.asm to compile and link correctly. Add nasm to list of mingw deps for ./installdeps-msys2 . Tested that msys2-built Wx binary runs, including with 2xSaI. Keyboard doesn't work yet on msys2 builds, but that's a completely different issue. --- CMakeLists.txt | 55 +++++++++++++++++++++++++++++----------- installdeps-msys2 | 2 +- src/filters/2xSaImmx.asm | 35 +++++-------------------- 3 files changed, 47 insertions(+), 45 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c335f8a9..11dec405 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,8 +16,26 @@ option( ENABLE_GTK3 "Build the GTK+ GUI" OFF ) option( ENABLE_WX "Build the wxWidgets port" ON ) option( ENABLE_DEBUGGER "Enable the debugger" ON ) option( ENABLE_NLS "Enable translations" ON ) -option( ENABLE_ASM_CORE "Enable x86 ASM CPU cores" OFF ) -option( ENABLE_ASM_SCALERS "Enable x86 ASM graphic filters" OFF ) + +SET(ASM_CORE_DEFAULT OFF) +SET(ASM_SCALERS_DEFAULT OFF) +SET(MMX_DEFAULT OFF) + +# turn asm on by default on 32bit x86 +IF(CMAKE_SYSTEM_PROCESSOR MATCHES "[xX]86|[aA][mM][dD]64|[xX]64" + AND CMAKE_C_SIZEOF_DATA_PTR EQUAL 4) + SET(ASM_CORE_DEFAULT ON) + SET(ASM_SCALERS_DEFAULT ON) + SET(MMX_DEFAULT ON) +ENDIF() + +option( ENABLE_ASM_CORE "Enable x86 ASM CPU cores" ${ASM_CORE_DEFAULT}) +option( ENABLE_ASM_SCALERS "Enable x86 ASM graphic filters" ${ASM_SCALERS_DEFAULT}) + +if(ENABLE_ASM_SCALERS) + option( ENABLE_MMX "Enable MMX" ${MMX_DEFAULT}) +endif(ENABLE_ASM_SCALERS) + option( ENABLE_LINK "Enable GBA linking functionality" ON ) option( ENABLE_LIRC "Enable LIRC support" OFF ) @@ -29,9 +47,6 @@ ENDIF() option(ENABLE_FFMPEG "Enable ffmpeg A/V recording" ${FFMPEG_DEFAULT}) -if(ENABLE_ASM_SCALERS) - option( ENABLE_MMX "Enable MMX" OFF ) -endif(ENABLE_ASM_SCALERS) option( ENABLE_GBA_LOGGING "Enable extended GBA logging" ON ) if( ENABLE_GBA_LOGGING ) ADD_DEFINITIONS (-DGBA_LOGGING ) @@ -98,12 +113,27 @@ IF(APPLE) LINK_DIRECTORIES("/sw/lib") ENDIF() + IF(EXISTS "/usr/local/bin/nasm") + SET(CMAKE_ASM_NASM_COMPILER "/usr/local/bin/nasm") + ELSEIF(EXISTS "/opt/local/bin/nasm") + SET(CMAKE_ASM_NASM_COMPILER "/opt/local/bin/nasm") + ENDIF() + IF(EXISTS /usr/local/bin) SET(CMAKE_PROGRAM_PATH "${CMAKE_PROGRAM_PATH};/usr/local/bin") + IF(EXISTS "/usr/local/bin/nasm") + SET(CMAKE_ASM_NASM_COMPILER "/usr/local/bin/nasm") + ENDIF() ELSEIF(EXISTS /opt/local/bin) SET(CMAKE_PROGRAM_PATH "${CMAKE_PROGRAM_PATH};/opt/local/bin") + IF(EXISTS "/opt/local/bin/nasm") + SET(CMAKE_ASM_NASM_COMPILER "/opt/local/bin/nasm") + ENDIF() ELSEIF(EXISTS /sw/bin) SET(CMAKE_PROGRAM_PATH "${CMAKE_PROGRAM_PATH};/sw/bin") + IF(EXISTS "/sw/bin/nasm") + SET(CMAKE_ASM_NASM_COMPILER "/sw/bin/nasm") + ENDIF() ENDIF() ENDIF(APPLE) @@ -114,17 +144,9 @@ IF((ENABLE_ASM_CORE OR ENABLE_ASM_SCALERS OR ENABLE_MMX) MESSAGE(FATAL_ERROR "The options ASM_CORE, ASM_SCALERS and MMX are not supported on AMD64 yet.") ENDIF() -# Check for nasm -if( ENABLE_ASM_SCALERS ) - IF(EXISTS "/usr/local/bin/nasm") - SET(CMAKE_ASM_NASM_COMPILER "/usr/local/bin/nasm") - ELSEIF(EXISTS "/opt/local/bin/nasm") - SET(CMAKE_ASM_NASM_COMPILER "/opt/local/bin/nasm") - ELSE() - SET(CMAKE_ASM_NASM_COMPILER "/usr/bin/nasm") - ENDIF() +IF(ENABLE_ASM_SCALERS) ENABLE_LANGUAGE(ASM_NASM) -endif( ENABLE_ASM_SCALERS ) +ENDIF(ENABLE_ASM_SCALERS) # Look for some dependencies using CMake scripts FIND_PACKAGE(ZLIB REQUIRED) @@ -474,6 +496,9 @@ SET(SRC_HQ_ASM if( ENABLE_ASM_SCALERS ) SET(SRC_FILTERS ${SRC_FILTERS} ${SRC_HQ_ASM}) + IF(ENABLE_MMX) + SET(SRC_FILTERS ${SRC_FILTERS} src/filters/2xSaImmx.asm) + ENDIF(ENABLE_MMX) else( ENABLE_ASM_SCALERS ) SET(SRC_FILTERS ${SRC_FILTERS} ${SRC_HQ_C}) SET(HDR_FILTERS ${HDR_FILTERS} ${HDR_HQ_C}) diff --git a/installdeps-msys2 b/installdeps-msys2 index 4e28a0a8..fa0bb5dc 100644 --- a/installdeps-msys2 +++ b/installdeps-msys2 @@ -2,7 +2,7 @@ cd "$(dirname $0)" -MINGW_DEPS='SDL2 cairo ffmpeg openal sfml wxWidgets zlib binutils cmake crt-git extra-cmake-modules gcc gcc-libs gdb headers-git make pkg-config tools-git windows-default-manifest libmangle-git' +MINGW_DEPS='SDL2 cairo ffmpeg openal sfml wxWidgets zlib binutils cmake crt-git extra-cmake-modules gcc gcc-libs gdb headers-git make pkg-config tools-git windows-default-manifest libmangle-git nasm' MINGW64_DEPS= MINGW32_DEPS= diff --git a/src/filters/2xSaImmx.asm b/src/filters/2xSaImmx.asm index 931feba3..a4c87fb9 100644 --- a/src/filters/2xSaImmx.asm +++ b/src/filters/2xSaImmx.asm @@ -26,19 +26,12 @@ - BITS 32 -%ifdef __DJGPP__ - GLOBAL __2xSaILine - GLOBAL __2xSaISuperEagleLine - GLOBAL __2xSaISuper2xSaILine - GLOBAL _Init_2xSaIMMX -%else - GLOBAL _2xSaILine - GLOBAL _2xSaISuperEagleLine - GLOBAL _2xSaISuper2xSaILine - GLOBAL Init_2xSaIMMX -%endif - SECTION .text ALIGN = 32 +BITS 32 +GLOBAL __2xSaILine +GLOBAL __2xSaISuperEagleLine +GLOBAL __2xSaISuper2xSaILine +GLOBAL _Init_2xSaIMMX +SECTION .text ALIGN = 32 %ifdef FAR_POINTER ;EXTERN_C void _2xSaILine (uint8 *srcPtr, uint32 srcPitch, uint32 width, @@ -86,11 +79,7 @@ colorA3 equ 4 -%ifdef __DJGPP__ __2xSaISuper2xSaILine: -%else -_2xSaISuper2xSaILine: -%endif ; Store some stuff push ebp mov ebp, esp @@ -825,11 +814,7 @@ _2xSaISuper2xSaILine: -%ifdef __DJGPP__ __2xSaISuperEagleLine: -%else -_2xSaISuperEagleLine: -%endif ; Store some stuff push ebp mov ebp, esp @@ -1405,11 +1390,7 @@ colorN equ 0 colorO equ 2 colorP equ 4 -%ifdef __DJGPP__ __2xSaILine: -%else -_2xSaILine: -%endif ; Store some stuff push ebp mov ebp, esp @@ -1996,11 +1977,7 @@ _2xSaILine: ;------------------------------------------------------------------------- ;------------------------------------------------------------------------- -%ifdef __DJGPP__ _Init_2xSaIMMX: -%else -Init_2xSaIMMX: -%endif ; Store some stuff push ebp mov ebp, esp