Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ steps:
set -xue
export CMAKE_BUILD_PARALLEL_LEVEL="$(${NPROC_COMMAND:-nproc})"
echo "${CMAKE_BUILD_PARALLEL_LEVEL}"
cmake_args=(-G"${CMAKE_GENERATOR:-Ninja}")
cmake_args=(-G"${CMAKE_GENERATOR:-Ninja}" -DUSE_WERROR=ON)
if [ -n "${TOOLCHAIN_FILE:-}" ]; then
cmake_args+=(-DCMAKE_TOOLCHAIN_FILE="${TOOLCHAIN_FILE}")
fi
Expand Down
13 changes: 13 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,11 @@ option(USE_LTO "Enable link-time optimization" OFF)
# Enabling fast math makes generated images less likely to be reproducible.
# See https://github.com/DaemonEngine/crunch/issues/29
option(USE_FAST_MATH "Enable fast math (generated images are less likely to be reproducible)" OFF)
# Enabling -Werror makes every warnings fatal.
option(USE_WERROR "Tell the compiler to make the build fail when warnings are present" OFF)
# Ignoring known warning from third-party vendored libs makes possible to reduce the scope of
# -Werror on crunch.
option(IGNORE_VENDORED_WARNING "Ignore known warning from vendored lib (not our fault!)" ON)

if (BUILD_STATIC_LIBCRN)
option(INSTALL_STATIC_LIBCRN "Install static libraries" OFF)
Expand All @@ -97,6 +102,10 @@ if (MSVC)
# Enable MSVC parallel compilation.
set_c_cxx_flag("/MP")

if (USE_WERROR)
try_c_cxx_flag(WARNINGS "/WX")
endif()

# MSVC doesn't implement strict aliasing so there is nothing else to do.

# CMake already sets the /O2 flag on Release and RelWithDebInfo build and /O[1-2] already sets the /Oy flag.
Expand All @@ -121,6 +130,10 @@ if (MSVC)
set_linker_flag("/LTCG" MINSIZEREL)
endif()
else()
if (USE_WERROR)
try_c_cxx_flag(WARNINGS "-Werror")
endif()

# As written in crnlib.h and stb_image.h, strict aliasing should always be disabled.
set_c_cxx_flag("-fno-strict-aliasing")

Expand Down
98 changes: 6 additions & 92 deletions crnlib/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/../inc
)

add_subdirectory(lzma)

# Defines the source code for the library
set(CRNLIB_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/crn_arealist.cpp
Expand Down Expand Up @@ -147,102 +149,12 @@ set(CRNLIB_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/../inc/crn_decomp.h
${CMAKE_CURRENT_SOURCE_DIR}/../inc/crnlib.h
${CMAKE_CURRENT_SOURCE_DIR}/../inc/dds_defs.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/7zAlloc.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/7zAlloc.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/7zArcIn.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/7zBuf2.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/7zBuf.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/7zBuf.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/7zCrc.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/7zCrc.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/7zCrcOpt.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/7zDec.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/7zFile.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/7zFile.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/7z.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/7zStream.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/7zTypes.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/7zVersion.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/7zWindows.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Aes.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Aes.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/AesOpt.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Alloc.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Alloc.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Bcj2.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Bcj2Enc.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Bcj2.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Bra86.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Bra.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Bra.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/BraIA64.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Compiler.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/CpuArch.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/CpuArch.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Delta.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Delta.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/DllSecur.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/DllSecur.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/LzFind.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/LzFind.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/LzFindMt.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/LzFindMt.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/LzFindOpt.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/LzHash.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Lzma2Dec.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Lzma2Dec.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Lzma2DecMt.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Lzma2DecMt.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Lzma2Enc.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Lzma2Enc.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Lzma86Dec.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Lzma86Enc.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Lzma86.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/LzmaDec.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/LzmaDec.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/LzmaEnc.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/LzmaEnc.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/LzmaLib.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/LzmaLib.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/MtCoder.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/MtCoder.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/MtDec.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/MtDec.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Ppmd7.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Ppmd7Dec.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Ppmd7Enc.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Ppmd7.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Ppmd.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Precomp.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/RotateDefs.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Sha256.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Sha256.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Sha256Opt.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Sort.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Sort.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/SwapBytes.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/SwapBytes.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Threads.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Threads.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Xz.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/XzCrc64.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/XzCrc64.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/XzCrc64Opt.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/XzDec.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/XzEnc.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/XzEnc.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Xz.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/XzIn.c
)

if(WIN32)
set(CRNLIB_THREAD_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/crn_threading_win32.cpp
${CMAKE_CURRENT_SOURCE_DIR}/crn_threading_win32.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/LzFindMt.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/LzFindMt.h
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Threads.c
${CMAKE_CURRENT_SOURCE_DIR}/lzma/Threads.h
)
else()
set(CRNLIB_THREAD_SRCS
Expand All @@ -265,7 +177,9 @@ else()
set(CRUNCH_OTHER_LIBRARY_SUFFIX -shared)
endif()

add_library(${CRUNCH_LIBRARY_NAME} ${CRUNCH_DEFAULT_LIBRARY_TYPE} $<TARGET_OBJECTS:${CRUNCH_OBJECT_NAME}>)
set(CRUNCH_TARGET_OBJECTS $<TARGET_OBJECTS:${CRUNCH_OBJECT_NAME}> $<TARGET_OBJECTS:${LZMA_OBJECT_NAME}>)

add_library(${CRUNCH_LIBRARY_NAME} ${CRUNCH_DEFAULT_LIBRARY_TYPE} ${CRUNCH_TARGET_OBJECTS})
set_property(TARGET ${CRUNCH_LIBRARY_NAME} PROPERTY POSITION_INDEPENDENT_CODE 1)

if (BUILD_SHARED_LIBS OR (BUILD_STATIC_LIBCRN AND INSTALL_STATIC_LIBCRN))
Expand All @@ -275,7 +189,7 @@ endif()
if ((BUILD_SHARED_LIBS AND BUILD_STATIC_LIBCRN) OR (NOT BUILD_SHARED_LIBS AND BUILD_SHARED_LIBCRN))
set(CRUNCH_OTHER_LIBRARY_NAME ${CRUNCH_LIBRARY_NAME}${CRUNCH_OTHER_LIBRARY_SUFFIX})

add_library(${CRUNCH_OTHER_LIBRARY_NAME} ${CRUNCH_OTHER_LIBRARY_TYPE} $<TARGET_OBJECTS:${CRUNCH_OBJECT_NAME}>)
add_library(${CRUNCH_OTHER_LIBRARY_NAME} ${CRUNCH_OTHER_LIBRARY_TYPE} ${CRUNCH_TARGET_OBJECTS})
set_property(TARGET ${CRUNCH_OTHER_LIBRARY_NAME} PROPERTY POSITION_INDEPENDENT_CODE 1)

if(NOT WIN32)
Expand Down
2 changes: 2 additions & 0 deletions crnlib/crn_core.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@
// Otherwise, we disable exceptions for a small speed boost.
#define _HAS_EXCEPTIONS 0
#endif
#ifndef NOMINMAX
#define NOMINMAX
#endif

#define CRNLIB_USE_WIN32_API 1

Expand Down
115 changes: 115 additions & 0 deletions crnlib/lzma/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
set(LZMA_LIBRARY_NAME "lzma")

# Defines the source code for the library.
set(LZMALIB_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/7zAlloc.c
${CMAKE_CURRENT_SOURCE_DIR}/7zAlloc.h
${CMAKE_CURRENT_SOURCE_DIR}/7zArcIn.c
${CMAKE_CURRENT_SOURCE_DIR}/7zBuf2.c
${CMAKE_CURRENT_SOURCE_DIR}/7zBuf.c
${CMAKE_CURRENT_SOURCE_DIR}/7zBuf.h
${CMAKE_CURRENT_SOURCE_DIR}/7zCrc.c
${CMAKE_CURRENT_SOURCE_DIR}/7zCrc.h
${CMAKE_CURRENT_SOURCE_DIR}/7zCrcOpt.c
${CMAKE_CURRENT_SOURCE_DIR}/7zDec.c
${CMAKE_CURRENT_SOURCE_DIR}/7zFile.c
${CMAKE_CURRENT_SOURCE_DIR}/7zFile.h
${CMAKE_CURRENT_SOURCE_DIR}/7z.h
${CMAKE_CURRENT_SOURCE_DIR}/7zStream.c
${CMAKE_CURRENT_SOURCE_DIR}/7zTypes.h
${CMAKE_CURRENT_SOURCE_DIR}/7zVersion.h
${CMAKE_CURRENT_SOURCE_DIR}/7zWindows.h
${CMAKE_CURRENT_SOURCE_DIR}/Aes.c
${CMAKE_CURRENT_SOURCE_DIR}/Aes.h
${CMAKE_CURRENT_SOURCE_DIR}/AesOpt.c
${CMAKE_CURRENT_SOURCE_DIR}/Alloc.c
${CMAKE_CURRENT_SOURCE_DIR}/Alloc.h
${CMAKE_CURRENT_SOURCE_DIR}/Bcj2.c
${CMAKE_CURRENT_SOURCE_DIR}/Bcj2Enc.c
${CMAKE_CURRENT_SOURCE_DIR}/Bcj2.h
${CMAKE_CURRENT_SOURCE_DIR}/Bra86.c
${CMAKE_CURRENT_SOURCE_DIR}/Bra.c
${CMAKE_CURRENT_SOURCE_DIR}/Bra.h
${CMAKE_CURRENT_SOURCE_DIR}/BraIA64.c
${CMAKE_CURRENT_SOURCE_DIR}/Compiler.h
${CMAKE_CURRENT_SOURCE_DIR}/CpuArch.c
${CMAKE_CURRENT_SOURCE_DIR}/CpuArch.h
${CMAKE_CURRENT_SOURCE_DIR}/Delta.c
${CMAKE_CURRENT_SOURCE_DIR}/Delta.h
${CMAKE_CURRENT_SOURCE_DIR}/DllSecur.c
${CMAKE_CURRENT_SOURCE_DIR}/DllSecur.h
${CMAKE_CURRENT_SOURCE_DIR}/LzFind.c
${CMAKE_CURRENT_SOURCE_DIR}/LzFind.h
${CMAKE_CURRENT_SOURCE_DIR}/LzFindMt.c
${CMAKE_CURRENT_SOURCE_DIR}/LzFindMt.h
${CMAKE_CURRENT_SOURCE_DIR}/LzFindOpt.c
${CMAKE_CURRENT_SOURCE_DIR}/LzHash.h
${CMAKE_CURRENT_SOURCE_DIR}/Lzma2Dec.c
${CMAKE_CURRENT_SOURCE_DIR}/Lzma2Dec.h
${CMAKE_CURRENT_SOURCE_DIR}/Lzma2DecMt.c
${CMAKE_CURRENT_SOURCE_DIR}/Lzma2DecMt.h
${CMAKE_CURRENT_SOURCE_DIR}/Lzma2Enc.c
${CMAKE_CURRENT_SOURCE_DIR}/Lzma2Enc.h
${CMAKE_CURRENT_SOURCE_DIR}/Lzma86Dec.c
${CMAKE_CURRENT_SOURCE_DIR}/Lzma86Enc.c
${CMAKE_CURRENT_SOURCE_DIR}/Lzma86.h
${CMAKE_CURRENT_SOURCE_DIR}/LzmaDec.c
${CMAKE_CURRENT_SOURCE_DIR}/LzmaDec.h
${CMAKE_CURRENT_SOURCE_DIR}/LzmaEnc.c
${CMAKE_CURRENT_SOURCE_DIR}/LzmaEnc.h
${CMAKE_CURRENT_SOURCE_DIR}/LzmaLib.c
${CMAKE_CURRENT_SOURCE_DIR}/LzmaLib.h
${CMAKE_CURRENT_SOURCE_DIR}/MtCoder.c
${CMAKE_CURRENT_SOURCE_DIR}/MtCoder.h
${CMAKE_CURRENT_SOURCE_DIR}/MtDec.c
${CMAKE_CURRENT_SOURCE_DIR}/MtDec.h
${CMAKE_CURRENT_SOURCE_DIR}/Ppmd7.c
${CMAKE_CURRENT_SOURCE_DIR}/Ppmd7Dec.c
${CMAKE_CURRENT_SOURCE_DIR}/Ppmd7Enc.c
${CMAKE_CURRENT_SOURCE_DIR}/Ppmd7.h
${CMAKE_CURRENT_SOURCE_DIR}/Ppmd.h
${CMAKE_CURRENT_SOURCE_DIR}/Precomp.h
${CMAKE_CURRENT_SOURCE_DIR}/RotateDefs.h
${CMAKE_CURRENT_SOURCE_DIR}/Sha256.c
${CMAKE_CURRENT_SOURCE_DIR}/Sha256.h
${CMAKE_CURRENT_SOURCE_DIR}/Sha256Opt.c
${CMAKE_CURRENT_SOURCE_DIR}/Sort.c
${CMAKE_CURRENT_SOURCE_DIR}/Sort.h
${CMAKE_CURRENT_SOURCE_DIR}/SwapBytes.c
${CMAKE_CURRENT_SOURCE_DIR}/SwapBytes.h
${CMAKE_CURRENT_SOURCE_DIR}/Threads.c
${CMAKE_CURRENT_SOURCE_DIR}/Threads.h
${CMAKE_CURRENT_SOURCE_DIR}/Xz.c
${CMAKE_CURRENT_SOURCE_DIR}/XzCrc64.c
${CMAKE_CURRENT_SOURCE_DIR}/XzCrc64.h
${CMAKE_CURRENT_SOURCE_DIR}/XzCrc64Opt.c
${CMAKE_CURRENT_SOURCE_DIR}/XzDec.c
${CMAKE_CURRENT_SOURCE_DIR}/XzEnc.c
${CMAKE_CURRENT_SOURCE_DIR}/XzEnc.h
${CMAKE_CURRENT_SOURCE_DIR}/Xz.h
${CMAKE_CURRENT_SOURCE_DIR}/XzIn.c
)

if (WIN32)
set(LZMALIB_THREAD_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/LzFindMt.c
${CMAKE_CURRENT_SOURCE_DIR}/LzFindMt.h
${CMAKE_CURRENT_SOURCE_DIR}/Threads.c
${CMAKE_CURRENT_SOURCE_DIR}/Threads.h
)
else()
set(LZMALIB_THREAD_SRCS)
endif()

# Build the library as an object.
set(LZMA_OBJECT_NAME ${LZMA_LIBRARY_NAME}-obj)
set(LZMA_OBJECT_NAME ${LZMA_OBJECT_NAME} PARENT_SCOPE)
add_library(${LZMA_OBJECT_NAME} OBJECT ${LZMALIB_SRCS} ${LZMALIB_THREAD_SRCS})
set_property(TARGET ${LZMA_OBJECT_NAME} PROPERTY POSITION_INDEPENDENT_CODE 1)

if (IGNORE_VENDORED_WARNING)
test_c_cxx_flag(WNO_STRINGOP_OVERFLOW "-Wno-stringop-overflow")
if (FLAG_WNO_STRINGOP_OVERFLOW)
target_compile_options(${LZMA_OBJECT_NAME} PRIVATE "-Wno-stringop-overflow")
endif()
endif()
2 changes: 2 additions & 0 deletions example1/example1.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,9 @@
#if defined(_WIN32)
// windows.h is only needed here for GetSystemInfo().
#define WIN32_LEAN_AND_MEAN
#ifndef NOMINMAX
#define NOMINMAX
#endif
#include "windows.h"
#elif defined(__FreeBSD__) || defined(__APPLE__)
#include <unistd.h>
Expand Down
2 changes: 1 addition & 1 deletion inc/crn_decomp.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#ifndef
#ifndef NOMINMAX
#define NOMINMAX
#endif
#include "windows.h" // only for IsDebuggerPresent(), DebugBreak(), and OutputDebugStringA()
Expand Down
Loading