CMakeLists.txt 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. PROJECT(CMLIBLZMA C)
  2. include(CheckCSourceCompiles)
  3. include(CheckIncludeFile)
  4. include(CheckSymbolExists)
  5. include(CheckTypeSize)
  6. include(TestBigEndian)
  7. CHECK_C_SOURCE_COMPILES(
  8. "int test (void *restrict x);\nint main (void) {return 0;}"
  9. HAVE_RESTRICT)
  10. CHECK_C_SOURCE_COMPILES(
  11. "typedef struct abc *d;\nint test (d __restrict x);\nint main (void) {return 0;}"
  12. HAVE___RESTRICT)
  13. CHECK_C_SOURCE_COMPILES(
  14. "static inline int test (void) {return 0;}\nint main (void) {return test();}"
  15. HAVE_INLINE)
  16. CHECK_C_SOURCE_COMPILES (
  17. "static __inline int test (void) {return 0;}\nint main (void) {return test();}"
  18. HAVE___INLINE)
  19. CHECK_INCLUDE_FILE(byteswap.h HAVE_BYTESWAP_H)
  20. CHECK_INCLUDE_FILE(inttypes.h HAVE_INTTYPES_H)
  21. CHECK_INCLUDE_FILE(limits.h HAVE_LIMITS_H)
  22. CHECK_INCLUDE_FILE(memory.h HAVE_MEMORY_H)
  23. CHECK_INCLUDE_FILE(strings.h HAVE_STRINGS_H)
  24. CHECK_INCLUDE_FILE(string.h HAVE_STRING_H)
  25. CHECK_INCLUDE_FILE(sys/sysctl.h HAVE_SYS_SYSCTL_H)
  26. CHECK_INCLUDE_FILE(stdbool.h HAVE_STDBOOL_H)
  27. if(NOT HAVE_STDBOOL_H)
  28. CHECK_TYPE_SIZE(_Bool _BOOL)
  29. endif()
  30. CHECK_C_SOURCE_COMPILES (
  31. "#include<byteswap.h>\nint main(void){bswap_16(0);return 0;}"
  32. HAVE_BSWAP_16)
  33. CHECK_C_SOURCE_COMPILES (
  34. "#include<byteswap.h>\nint main(void){bswap_32(0);return 0;}"
  35. HAVE_BSWAP_32)
  36. CHECK_C_SOURCE_COMPILES (
  37. "#include<byteswap.h>\nint main(void){bswap_64(0);return 0;}"
  38. HAVE_BSWAP_64)
  39. TEST_BIG_ENDIAN(WORDS_BIGENDIAN)
  40. set(HAVE_CHECK_CRC64 1)
  41. set(HAVE_CHECK_SHA256 1)
  42. set(HAVE_DECODER_ARM 1)
  43. set(HAVE_DECODER_ARMTHUMB 1)
  44. set(HAVE_DECODER_DELTA 1)
  45. set(HAVE_DECODER_IA64 1)
  46. set(HAVE_DECODER_LZMA1 1)
  47. set(HAVE_DECODER_LZMA2 1)
  48. set(HAVE_DECODER_POWERPC 1)
  49. set(HAVE_DECODER_SPARC 1)
  50. set(HAVE_DECODER_X86 1)
  51. set(HAVE_ENCODER_ARM 1)
  52. set(HAVE_ENCODER_ARMTHUMB 1)
  53. set(HAVE_ENCODER_DELTA 1)
  54. set(HAVE_ENCODER_IA64 1)
  55. set(HAVE_ENCODER_LZMA1 1)
  56. set(HAVE_ENCODER_LZMA2 1)
  57. set(HAVE_ENCODER_POWERPC 1)
  58. set(HAVE_ENCODER_SPARC 1)
  59. set(HAVE_ENCODER_X86 1)
  60. set(HAVE_MF_BT2 1)
  61. set(HAVE_MF_BT3 1)
  62. set(HAVE_MF_BT4 1)
  63. set(HAVE_MF_HC3 1)
  64. set(HAVE_MF_HC4 1)
  65. CHECK_TYPE_SIZE(int16_t INT16_T)
  66. CHECK_TYPE_SIZE(int32_t INT32_T)
  67. CHECK_TYPE_SIZE(int64_t INT64_T)
  68. CHECK_TYPE_SIZE(intmax_t INTMAX_T)
  69. CHECK_TYPE_SIZE(uint8_t UINT8_T)
  70. CHECK_TYPE_SIZE(uint16_t UINT16_T)
  71. CHECK_TYPE_SIZE(uint32_t UINT32_T)
  72. CHECK_TYPE_SIZE(uint64_t UINT64_T)
  73. CHECK_TYPE_SIZE(uintmax_t UINTMAX_T)
  74. CHECK_TYPE_SIZE("short" SIZE_OF_SHORT)
  75. CHECK_TYPE_SIZE("int" SIZE_OF_INT)
  76. CHECK_TYPE_SIZE("long" SIZE_OF_LONG)
  77. CHECK_TYPE_SIZE("long long" SIZE_OF_LONG_LONG)
  78. CHECK_TYPE_SIZE("unsigned short" SIZE_OF_UNSIGNED_SHORT)
  79. CHECK_TYPE_SIZE("unsigned" SIZE_OF_UNSIGNED)
  80. CHECK_TYPE_SIZE("unsigned long" SIZE_OF_UNSIGNED_LONG)
  81. CHECK_TYPE_SIZE("unsigned long long" SIZE_OF_UNSIGNED_LONG_LONG)
  82. CHECK_TYPE_SIZE("size_t" SIZE_OF_SIZE_T)
  83. CHECK_TYPE_SIZE("__int64" __INT64)
  84. CHECK_TYPE_SIZE("unsigned __int64" UNSIGNED___INT64)
  85. CHECK_TYPE_SIZE(uintptr_t UINTPTR_T)
  86. IF(NOT HAVE_UINTPTR_T)
  87. IF("${CMAKE_SIZEOF_VOID_P}" EQUAL 8)
  88. SET(uintptr_t "uint64_t")
  89. ELSE()
  90. SET(uintptr_t "uint32_t")
  91. ENDIF()
  92. ENDIF()
  93. SET(LZMA_SRCS
  94. common/sysdefs.h
  95. common/tuklib_integer.h
  96. liblzma/check/check.c
  97. liblzma/check/crc32_fast.c
  98. liblzma/check/crc32_table.c
  99. liblzma/check/crc64_fast.c
  100. liblzma/check/crc64_table.c
  101. liblzma/check/sha256.c
  102. liblzma/common/alone_decoder.c
  103. liblzma/common/alone_encoder.c
  104. liblzma/common/auto_decoder.c
  105. liblzma/common/block_buffer_decoder.c
  106. liblzma/common/block_buffer_encoder.c
  107. liblzma/common/block_decoder.c
  108. liblzma/common/block_encoder.c
  109. liblzma/common/block_header_decoder.c
  110. liblzma/common/block_header_encoder.c
  111. liblzma/common/block_util.c
  112. liblzma/common/common.c
  113. liblzma/common/easy_buffer_encoder.c
  114. liblzma/common/easy_decoder_memusage.c
  115. liblzma/common/easy_encoder.c
  116. liblzma/common/easy_encoder_memusage.c
  117. liblzma/common/easy_preset.c
  118. liblzma/common/filter_buffer_decoder.c
  119. liblzma/common/filter_buffer_encoder.c
  120. liblzma/common/filter_common.c
  121. liblzma/common/filter_decoder.c
  122. liblzma/common/filter_encoder.c
  123. liblzma/common/filter_flags_decoder.c
  124. liblzma/common/filter_flags_encoder.c
  125. liblzma/common/index.c
  126. liblzma/common/index_decoder.c
  127. liblzma/common/index_encoder.c
  128. liblzma/common/index_hash.c
  129. liblzma/common/stream_buffer_decoder.c
  130. liblzma/common/stream_buffer_encoder.c
  131. liblzma/common/stream_decoder.c
  132. liblzma/common/stream_encoder.c
  133. liblzma/common/stream_flags_common.c
  134. liblzma/common/stream_flags_decoder.c
  135. liblzma/common/stream_flags_encoder.c
  136. liblzma/common/vli_decoder.c
  137. liblzma/common/vli_encoder.c
  138. liblzma/common/vli_size.c
  139. liblzma/delta/delta_common.c
  140. liblzma/delta/delta_decoder.c
  141. liblzma/delta/delta_encoder.c
  142. liblzma/lz/lz_decoder.c
  143. liblzma/lz/lz_encoder.c
  144. liblzma/lz/lz_encoder_mf.c
  145. liblzma/lzma/fastpos_table.c
  146. liblzma/lzma/lzma2_decoder.c
  147. liblzma/lzma/lzma2_encoder.c
  148. liblzma/lzma/lzma_decoder.c
  149. liblzma/lzma/lzma_encoder.c
  150. liblzma/lzma/lzma_encoder_optimum_fast.c
  151. liblzma/lzma/lzma_encoder_optimum_normal.c
  152. liblzma/lzma/lzma_encoder_presets.c
  153. liblzma/rangecoder/price_table.c
  154. liblzma/simple/arm.c
  155. liblzma/simple/armthumb.c
  156. liblzma/simple/ia64.c
  157. liblzma/simple/powerpc.c
  158. liblzma/simple/simple_coder.c
  159. liblzma/simple/simple_decoder.c
  160. liblzma/simple/simple_encoder.c
  161. liblzma/simple/sparc.c
  162. liblzma/simple/x86.c
  163. )
  164. CONFIGURE_FILE(config.h.in config.h @ONLY)
  165. INCLUDE_DIRECTORIES(
  166. "${CMLIBLZMA_SOURCE_DIR}/common"
  167. "${CMLIBLZMA_SOURCE_DIR}/liblzma/api"
  168. "${CMLIBLZMA_SOURCE_DIR}/liblzma/check"
  169. "${CMLIBLZMA_SOURCE_DIR}/liblzma/common"
  170. "${CMLIBLZMA_SOURCE_DIR}/liblzma/delta"
  171. "${CMLIBLZMA_SOURCE_DIR}/liblzma/lz"
  172. "${CMLIBLZMA_SOURCE_DIR}/liblzma/lzma"
  173. "${CMLIBLZMA_SOURCE_DIR}/liblzma/rangecoder"
  174. "${CMLIBLZMA_SOURCE_DIR}/liblzma/simple"
  175. "${CMLIBLZMA_BINARY_DIR}"
  176. )
  177. # Disable warnings to avoid changing 3rd party code.
  178. IF(CMAKE_C_COMPILER_ID MATCHES
  179. "^(GNU|Clang|AppleClang|XL|VisualAge|SunPro|MIPSpro|HP|Intel)$")
  180. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w")
  181. ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "PathScale")
  182. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -woffall")
  183. ENDIF()
  184. ADD_LIBRARY(cmliblzma STATIC ${LZMA_SRCS})
  185. IF(CMAKE_C_COMPILER_ID STREQUAL "XL")
  186. # Disable the XL compiler optimizer because it causes crashes
  187. # and other bad behavior in liblzma code.
  188. SET_PROPERTY(TARGET cmliblzma PROPERTY COMPILE_FLAGS "-qnooptimize")
  189. ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "GNU" AND
  190. CMAKE_C_COMPILER_VERSION VERSION_LESS 3.4)
  191. # Disable the old GNU compiler optimizer.
  192. SET_PROPERTY(TARGET cmliblzma PROPERTY COMPILE_FLAGS "-O0")
  193. ENDIF()
  194. INSTALL(FILES COPYING DESTINATION ${CMAKE_DOC_DIR}/cmliblzma)