-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
144 lines (114 loc) · 5.15 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
cmake_minimum_required(VERSION 2.8.12)
if(${CMAKE_CURRENT_BINARY_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
message(FATAL_ERROR "Building in-source is not supported! Create a build dir and remove ${CMAKE_SOURCE_DIR}/CMakeCache.txt")
endif()
project (libswf)
# Directory variables
set(SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/source)
set(TEST_DIR ${CMAKE_CURRENT_SOURCE_DIR}/test)
set(LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libraries)
set(INC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
if (CMAKE_VERSION VERSION_LESS "3.1")
if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGCC OR CMAKE_COMPILER_IS_CLANGCXX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
endif ()
else ()
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
endif ()
### DEPENDENCIES
# https://cmake.org/cmake/help/v3.0/module/FindZLIB.html
find_package(ZLIB REQUIRED)
if( NOT EXISTS ${LIB_DIR}/lzma/Makefile )
message(FATAL_ERROR "Unable to find lzma sdk.")
endif()
if( NOT EXISTS ${LIB_DIR}/lodepng/lodepng/Makefile )
message(FATAL_ERROR "Unable to find lodepng library.")
endif()
# Set Warnings and linking options
if(MSVC)
## For static linking
# set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
# set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
##
## For dynamic linking
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MDd")
##
# Disable secure warnings
add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
if(NOT CMAKE_BUILD_TYPE MATCHES Release)
# Force to always compile with W4
if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
endif()
endif(NOT CMAKE_BUILD_TYPE MATCHES Release)
elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGCC OR CMAKE_COMPILER_IS_CLANGCXX)
if(NOT CMAKE_BUILD_TYPE MATCHES Release)
# Update if necessary
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic -Wmain -Weffc++ -Wswitch-default \
-Wswitch-enum -Wmissing-include-dirs -Wmissing-declarations -Wunreachable-code -Winline \
-Wfloat-equal -Wundef -Wcast-align -Wredundant-decls -Winit-self -Wshadow -Wnon-virtual-dtor \
-Wconversion")
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wzero-as-null-pointer-constant") # -Wuseless-cast
endif()
endif(NOT CMAKE_BUILD_TYPE MATCHES Release)
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
# Coverage
SET(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_DEBUG} --coverage")
SET(CMAKE_EXE_LINKER_FLAGS_COVERAGE "${CMAKE_EXE_LINKER_FLAGS_DEBUG} --coverage")
SET(CMAKE_SHARED_LINKER_FLAGS_COVERAGE "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} --coverage")
endif()
endif()
if(WIN32)
add_compile_definitions(UNICODE _UNICODE)
endif(WIN32)
### BUILD DEPENDENCY LIBRARIES ###
# (Generate the static library from the sources)
# Compile LZMA SDK
add_compile_definitions(_7ZIP_ST)
add_library(lzmasdk STATIC ${LIB_DIR}/lzma/C/LzmaEnc.c ${LIB_DIR}/lzma/C/LzFind.c
${LIB_DIR}/lzma/C/LzmaDec.c ${LIB_DIR}/lzma/C/Lzma2Dec.c)
set_target_properties(lzmasdk PROPERTIES POSITION_INDEPENDENT_CODE ON)
# Compile LodePNG
add_compile_definitions(DLODEPNG_NO_COMPILE_ZLIB LODEPNG_NO_COMPILE_DISK)
add_library(lodepng STATIC ${LIB_DIR}/lodepng/lodepng/lodepng.cpp)
set_target_properties(lodepng PROPERTIES POSITION_INDEPENDENT_CODE ON)
### BUILD LIBSWF ###
#cBring the headers into the project
include_directories( SYSTEM ${INC_DIR} )
include_directories( SYSTEM ${ZLIB_INCLUDE_DIRS} ) # From find_package(zlib)
include_directories( SYSTEM ${LIB_DIR}/lodepng )
include_directories( SYSTEM ${LIB_DIR} ) # LZMA, rlutil
# The file(GLOB...) allows for wildcard additions:
file(GLOB SRC_FILES "${SOURCE_DIR}/*.cpp")
#add_library(libswf ${SRC_FILES})
add_library(libswf_shared SHARED ${SRC_FILES})
add_library(libswf STATIC ${SRC_FILES})
target_link_libraries( libswf_shared lzmasdk ) # LZMA SDK
#target_link_libraries(libswf_shared lzma) # XZ Utils
target_link_libraries( libswf_shared lodepng ) # LodePNG
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGCC OR CMAKE_COMPILER_IS_CLANGCXX)
target_link_libraries( libswf_shared z )
endif()
target_link_libraries( libswf_shared ${ZLIB_LIBRARIES} ) # From find_package(zlib)
IF(CMAKE_BUILD_TYPE MATCHES Coverage)
file(GLOB TEST_SRC_FILES "${TEST_DIR}/*.cpp")
list(APPEND SRC_FILES ${TEST_SRC_FILES})
find_package(Catch2 3 REQUIRED)
add_executable(libswf_test ${SRC_FILES})
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGCC OR CMAKE_COMPILER_IS_CLANGCXX)
target_link_libraries( libswf_test z )
endif()
target_link_libraries( libswf_test ${ZLIB_LIBRARIES} ) # From find_package(zlib)
target_link_libraries( libswf_test lzmasdk ) # LZMA SDK
#target_link_libraries(libswf_test lzma) # XZ Utils
target_link_libraries( libswf_test lodepng ) # LodePNG
target_link_libraries( libswf_test Catch2::Catch2WithMain )
if( MINGW )
set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static")
endif()
ENDIF(CMAKE_BUILD_TYPE MATCHES Coverage)