precomp-cpp/CMakeLists.txt
Alex Xu (Hello71) 3a84725d31 use __linux/__unix instead of CMAKE_C(XX)_FLAGS
this allows the user-specified CFLAGS/CXXFLAGS to take effect.

assume that all platforms supporting C++ in 2021 also support stdbool.h.
2021-11-20 10:30:19 -05:00

164 lines
7.1 KiB
CMake

cmake_minimum_required(VERSION 3.2)
project(precomp)
set(SRCDIR ${CMAKE_CURRENT_SOURCE_DIR})
set(OBJDIR ${CMAKE_CURRENT_BINARY_DIR})
if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
message(STATUS "Build type: Release")
else()
if (NOT CMAKE_BUILD_TYPE STREQUAL "Release")
message(WARNING "CMake build type is set to ${CMAKE_BUILD_TYPE}! This might result in bad performance!")
else()
message(STATUS "Build type: Release")
endif()
endif()
if (UNIX)
set(CMAKE_C_STANDARD 99)
set(CMAKE_CXX_STANDARD 11)
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
endif()
include_directories(AFTER ${SRCDIR})
function(add_stem2file VAR pattern stem)
set(TMPV ${${VAR}})
foreach(IND ${stem})
string(REGEX REPLACE "^[ ]*([0-9a-zA-Z_%]+)[ ]*$" \\1 IND ${IND})
string(REPLACE "%STEM%" ${IND} NEXT ${pattern})
set(TMPV "${TMPV};${NEXT}")
endforeach()
set(${VAR} "${TMPV}" PARENT_SCOPE)
endfunction()
set(GIF_SRC "")
add_stem2file(GIF_SRC "${SRCDIR}/contrib/giflib/%STEM%.c"
"gifalloc;gif_err;dgif_lib_gcc;egif_lib_gcc")
set(BZIP_SRC "")
add_stem2file(BZIP_SRC "${SRCDIR}/contrib/bzip2/%STEM%.c"
"bzlib;blocksort;crctable;compress;decompress;huffman;randtable")
set(ZLIB_SRC "")
add_stem2file(ZLIB_SRC "${SRCDIR}/contrib/zlib/%STEM%.c"
"adler32;crc32;zutil;trees;inftrees;inffast;inflate;deflate")
set(PACKARI_SRC "")
add_stem2file(PACKARI_SRC "${SRCDIR}/contrib/packjpg/%STEM%.cpp"
"aricoder;bitops")
set(PACKJPG_SRC "")
add_stem2file(PACKJPG_SRC "${SRCDIR}/contrib/packjpg/%STEM%.cpp"
"packjpg")
set(PACKMP3_SRC "")
add_stem2file(PACKMP3_SRC "${SRCDIR}/contrib/packmp3/%STEM%.cpp"
"huffmp3;packmp3")
add_definitions(-DBUILD_LIB)
set(LZMA_SRC "")
add_stem2file(LZMA_SRC "${SRCDIR}/contrib/liblzma/common/%STEM%.c"
"tuklib_physmem;tuklib_cpucores;common;block_util;easy_preset;\
filter_common;hardware_physmem;index;stream_flags_common;\
vli_size;alone_encoder;block_buffer_encoder;block_encoder;\
block_header_encoder;easy_buffer_encoder;easy_encoder;\
easy_encoder_memusage;filter_buffer_encoder;filter_encoder;\
filter_flags_encoder;index_encoder;stream_buffer_encoder;\
stream_encoder;stream_flags_encoder;vli_encoder;\
hardware_cputhreads;outqueue;stream_encoder_mt;alone_decoder;\
auto_decoder;block_buffer_decoder;block_decoder;block_header_decoder;\
easy_decoder_memusage;filter_buffer_decoder;filter_decoder;\
filter_flags_decoder;index_decoder;index_hash;stream_decoder;\
stream_buffer_decoder;stream_flags_decoder;vli_decoder")
add_stem2file(LZMA_SRC "${SRCDIR}/contrib/liblzma/check/%STEM%.c"
"check;crc32_table;crc32_fast;crc64_table;crc64_fast;sha256")
add_stem2file(LZMA_SRC "${SRCDIR}/contrib/liblzma/lz/%STEM%.c"
"lz_encoder;lz_encoder_mf;lz_decoder")
add_stem2file(LZMA_SRC "${SRCDIR}/contrib/liblzma/lzma/%STEM%.c"
"lzma_encoder;lzma_encoder_presets;lzma_encoder_optimum_fast;\
lzma_encoder_optimum_normal;fastpos_table;lzma_decoder;\
lzma2_encoder;lzma2_decoder")
add_stem2file(LZMA_SRC "${SRCDIR}/contrib/liblzma/rangecoder/%STEM%.c"
"price_table")
add_stem2file(LZMA_SRC "${SRCDIR}/contrib/liblzma/delta/%STEM%.c"
"delta_common;delta_encoder;delta_decoder")
add_stem2file(LZMA_SRC "${SRCDIR}/contrib/liblzma/simple/%STEM%.c"
"simple_coder;simple_encoder;simple_decoder;x86;powerpc;ia64;arm;armthumb;sparc")
add_stem2file(LZMA_SRC "${SRCDIR}/contrib/liblzma/%STEM%.cpp"
"compress_easy_mt")
include_directories(AFTER "${SRCDIR}" "${SRCDIR}/contrib/liblzma"
"${SRCDIR}/contrib/liblzma/api" "${SRCDIR}/contrib/liblzma/check"
"${SRCDIR}/contrib/liblzma/common"
"${SRCDIR}/contrib/liblzma/delta" "${SRCDIR}/contrib/liblzma/lz"
"${SRCDIR}/contrib/liblzma/lzma" "${SRCDIR}/contrib/liblzma/rangecoder"
"${SRCDIR}/contrib/liblzma/simple")
add_definitions(-DHAVE_BOOL)
if (MSVC)
include_directories(AFTER "msinttypes")
add_definitions(-D_UNICODE -DUNICODE)
endif (MSVC)
set(BRUNSLI_SRC "")
add_stem2file(BRUNSLI_SRC "${SRCDIR}/contrib/brunsli/c/common/%STEM%.cc"
"ans_params;constants;context;huffman_tree;lehmer_code;platform;\
predict;quant_matrix")
add_stem2file(BRUNSLI_SRC "${SRCDIR}/contrib/brunsli/c/dec/%STEM%.cc"
"ans_decode;bit_reader;brunsli_decode;context_map_decode;histogram_decode;\
huffman_decode;huffman_table;jpeg_data_writer")
add_stem2file(BRUNSLI_SRC "${SRCDIR}/contrib/brunsli/c/enc/%STEM%.cc"
"ans_encode;brunsli_encode;context_map_encode;histogram_encode;jpeg_data_reader;\
jpeg_huffman_decode;write_bits")
include_directories(AFTER "${SRCDIR}/contrib/brunsli/c/common"
"${SRCDIR}/contrib/brunsli/c/dec"
"${SRCDIR}/contrib/brunsli/c/enc"
"${SRCDIR}/contrib/brunsli/c/include")
set(BROTLI_SRC "")
add_stem2file(BROTLI_SRC "${SRCDIR}/contrib/brotli/c/common/%STEM%.c"
"dictionary;transform")
add_stem2file(BROTLI_SRC "${SRCDIR}/contrib/brotli/c/dec/%STEM%.c"
"bit_reader;decode;huffman;state")
add_stem2file(BROTLI_SRC "${SRCDIR}/contrib/brotli/c/enc/%STEM%.c"
"backward_references;backward_references_hq;bit_cost;block_splitter;\
brotli_bit_stream;cluster;compress_fragment;compress_fragment_two_pass;\
dictionary_hash;encode;encoder_dict;entropy_encode;histogram;literal_cost;\
memory;metablock;static_dict;utf8_util")
include_directories(AFTER "${SRCDIR}/contrib/brotli/c/include")
if ("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
add_definitions(-DBIT64)
endif ("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
set(PREFLATE_SRC "")
add_stem2file(PREFLATE_SRC "${SRCDIR}/contrib/preflate/preflate_%STEM%.cpp"
"block_decoder;block_reencoder;block_trees;\
complevel_estimator;constants;decoder;hash_chain;info;\
parameter_estimator;parser_config;predictor_state;reencoder;\
seq_chain;statistical_codec;statistical_model;token;\
token_predictor;tree_predictor")
add_stem2file(PREFLATE_SRC "${SRCDIR}/contrib/preflate/support/%STEM%.cpp"
"arithmetic_coder;array_helper;bit_helper;bitstream;const_division;\
filestream;huffman_decoder;huffman_encoder;huffman_helper;memstream;\
outputcachestream;task_pool")
include_directories(AFTER "${SRCDIR}/contrib/preflate")
set(PRECOMP_SRC "${SRCDIR}/precomp.cpp")
set(PRECOMP_HDR "${SRCDIR}/precomp.h")
add_executable(precomp ${GIF_SRC} ${BZIP_SRC} ${ZLIB_SRC} ${PACKARI_SRC}
${PACKJPG_SRC} ${PACKMP3_SRC} ${LZMA_SRC} ${PREFLATE_SRC}
${BRUNSLI_SRC} ${BROTLI_SRC} ${PRECOMP_SRC} ${PRECOMP_HDR})
if (UNIX)
target_link_libraries(precomp Threads::Threads)
endif()
install(TARGETS precomp DESTINATION bin)