Suport i686 and amd64 assembler builds in CMakeLists.txt.
authorLike Ma <likemartinma@gmail.com>
Mon, 11 Feb 2013 18:41:27 +0000 (02:41 +0800)
committerMark Adler <madler@alumni.caltech.edu>
Sun, 24 Feb 2013 08:02:36 +0000 (00:02 -0800)
 * Use -DASM686=1 to build with i686 asm.
 * Use -DAMD64=1 to build with amd64 asm.

CMakeLists.txt

index 0256437..f6c781a 100644 (file)
@@ -5,6 +5,9 @@ project(zlib C)
 
 set(VERSION "1.2.7")
 
+option(ASM686 "Enable building i686 assembly implementation")
+option(AMD64 "Enable building amd64 assembly implementation")
+
 set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables")
 set(INSTALL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE PATH "Installation directory for libraries")
 set(INSTALL_INC_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "Installation directory for headers")
@@ -126,6 +129,39 @@ if(NOT MINGW)
     )
 endif()
 
+if(CMAKE_COMPILER_IS_GNUCC)
+    if(ASM686)
+        set(ZLIB_ASMS contrib/asm686/match.S)
+    elseif (AMD64)
+        set(ZLIB_ASMS contrib/amd64/amd64-match.S)
+    endif ()
+
+       if(ZLIB_ASMS)
+               add_definitions(-DASMV)
+               set_source_files_properties(${ZLIB_ASMS} PROPERTIES LANGUAGE C COMPILE_FLAGS -DNO_UNDERLINE)
+       endif()
+endif()
+
+if(MSVC)
+    if(ASM686)
+               ENABLE_LANGUAGE(ASM_MASM)
+        set(ZLIB_ASMS
+                       contrib/masmx86/inffas32.asm
+                       contrib/masmx86/match686.asm
+               )
+    elseif (AMD64)
+               ENABLE_LANGUAGE(ASM_MASM)
+        set(ZLIB_ASMS
+                       contrib/masmx64/gvmat64.asm
+                       contrib/masmx64/inffasx64.asm
+               )
+    endif()
+
+       if(ZLIB_ASMS)
+               add_definitions(-DASMV -DASMINF)
+       endif()
+endif()
+
 # parse the full version number from zlib.h and include in ZLIB_FULL_VERSION
 file(READ ${CMAKE_CURRENT_SOURCE_DIR}/zlib.h _zlib_h_contents)
 string(REGEX REPLACE ".*#define[ \t]+ZLIB_VERSION[ \t]+\"([-0-9A-Za-z.]+)\".*"
@@ -147,8 +183,8 @@ if(MINGW)
     set(ZLIB_DLL_SRCS ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj)
 endif(MINGW)
 
-add_library(zlib SHARED ${ZLIB_SRCS} ${ZLIB_DLL_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
-add_library(zlibstatic STATIC ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
+add_library(zlib SHARED ${ZLIB_SRCS} ${ZLIB_ASMS} ${ZLIB_DLL_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
+add_library(zlibstatic STATIC ${ZLIB_SRCS} ${ZLIB_ASMS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
 set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL)
 set_target_properties(zlib PROPERTIES SOVERSION 1)