forked from chemag/liblcvm
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
153 lines (117 loc) · 4.87 KB
/
CMakeLists.txt
File metadata and controls
153 lines (117 loc) · 4.87 KB
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
144
145
146
147
148
149
150
151
152
153
cmake_minimum_required(VERSION 3.12)
project(lcvm VERSION 0.15)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_OSX_ARCHITECTURES "x86_64" CACHE INTERNAL "" FORCE)
# Set compiler flags
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -Wall -Wextra -Wno-unused-parameter -Wshadow -Werror")
message(STATUS "CMAKE_CURRENT_SOURCE_DIR: ${CMAKE_CURRENT_SOURCE_DIR} ")
# add include directories
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib/isobmff/ISOBMFF/include)
# 1. build external libraries
# 1.1. build ISOBMFF library
# add the ISOBMFF submodule
include(ExternalProject)
ExternalProject_Add(
ISOBMFF
SOURCE_DIR ${CMAKE_SOURCE_DIR}/lib/isobmff
BUILD_IN_SOURCE 1
CONFIGURE_COMMAND ""
BUILD_COMMAND make
INSTALL_COMMAND ""
)
# build isobmff library
execute_process(
COMMAND make
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib/isobmff
)
# we do not care about fuzzing either h264nal nor h265nal
set(BUILD_CLANG_FUZZER OFF) # Set the variable here
# 1.2. add h265nal submodule
option(BUILD_PYBINDINGS "Build Python bindings for liblcvm" OFF)
add_subdirectory(${CMAKE_SOURCE_DIR}/lib/h265nal)
if(BUILD_PYBINDINGS)
# Ensure h265nal is built with -fPIC
set_target_properties(h265nal PROPERTIES POSITION_INDEPENDENT_CODE ON)
endif()
# 1.3. add h264nal submodule
add_subdirectory(${CMAKE_SOURCE_DIR}/lib/h264nal)
if(BUILD_PYBINDINGS)
# Ensure h264nal is built with -fPIC
set_target_properties(h264nal PROPERTIES POSITION_INDEPENDENT_CODE ON)
endif()
# 2. build liblcvm library
# Common settings for liblcvm
set(LIBLCVM_SOURCES src/liblcvm.cc)
set(LIBLCVM_INCLUDE_DIRS
${CMAKE_CURRENT_SOURCE_DIR}/lib/isobmff/ISOBMFF/include
${CMAKE_CURRENT_SOURCE_DIR}/lib/h265nal/include
${CMAKE_CURRENT_SOURCE_DIR}/lib/h264nal/include
)
set(LIBLCVM_LINK_LIBRARIES
${CMAKE_CURRENT_SOURCE_DIR}/lib/isobmff/Build/Debug/Products/x86_64/libISOBMFF.a
h265nal
h264nal)
if(BUILD_PYBINDINGS)
# Add Python bindings if requested
message(STATUS "Configuring Liblcvm library with PyBind11 interface")
execute_process(COMMAND python3 -m pybind11 --includes
OUTPUT_VARIABLE PYBIND11_INCLUDE OUTPUT_STRIP_TRAILING_WHITESPACE)
string(REGEX REPLACE "-I" "" PYBIND11_INCLUDE "${PYBIND11_INCLUDE}")
separate_arguments(PYBIND11_INCLUDE)
# Get Python include paths and libraries
execute_process(COMMAND python3-config --includes
OUTPUT_VARIABLE PYTHON_INCLUDE OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND python3-config --ldflags
OUTPUT_VARIABLE PYTHON_LDFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND python3 -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')"
OUTPUT_VARIABLE PYTHON_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
string(REPLACE "-framework CoreFoundation" "" PYTHON_LDFLAGS "${PYTHON_LDFLAGS}")
string(REGEX REPLACE "-I" "" PYTHON_INCLUDE "${PYTHON_INCLUDE}")
separate_arguments(PYTHON_INCLUDE)
separate_arguments(PYTHON_LDFLAGS)
# Combine linker flags, ensuring no duplicates
list(APPEND ALL_LINKER_FLAGS ${PYTHON_LDFLAGS} "-lpython${PYTHON_VERSION}")
list(REMOVE_DUPLICATES ALL_LINKER_FLAGS)
list(APPEND LIBLCVM_SOURCES src/python_bindings.cc)
list(APPEND LIBLCVM_INCLUDE_DIRS ${PYBIND11_INCLUDE} ${PYTHON_INCLUDE})
if(APPLE) # For Mac
list(APPEND LIBLCVM_LINK_LIBRARIES "-framework CoreFoundation" ${ALL_LINKER_FLAGS})
elseif(UNIX AND NOT APPLE) # For Linux
list(APPEND LIBLCVM_LINK_LIBRARIES ${ALL_LINKER_FLAGS})
endif()
add_library(liblcvm SHARED ${LIBLCVM_SOURCES})
# set the output name to ensure the library is named liblcvm.so
set_target_properties(liblcvm PROPERTIES OUTPUT_NAME "lcvm" SUFFIX ".so")
else()
message(STATUS "Configuring Liblcvm library")
# build liblcvm library without pybinding interface
add_library(liblcvm ${LIBLCVM_SOURCES})
# set the output name to ensure the library is named liblcvm.a
set_target_properties(liblcvm PROPERTIES OUTPUT_NAME "lcvm")
endif()
target_include_directories(liblcvm PUBLIC ${LIBLCVM_INCLUDE_DIRS})
target_link_libraries(liblcvm PRIVATE ${LIBLCVM_LINK_LIBRARIES})
# 3. build lcvm executable
add_executable(lcvm tools/lcvm.cc)
target_link_libraries(lcvm liblcvm)
# configure a header file to pass some of the CMake settings
# to the source code
configure_file(
${CMAKE_SOURCE_DIR}/include/config.h.in
${CMAKE_BINARY_DIR}/config.h
)
# Include the directory where config.h is generated
target_include_directories(liblcvm PRIVATE ${CMAKE_BINARY_DIR})
# 4. others
# 4.1. add test target
add_custom_target(test
COMMAND ${CMAKE_BINARY_DIR}/lcvm ${CMAKE_BINARY_DIR}/*MOV -o /tmp/full.csv
)
# 4.2. add lint target
add_custom_target(lint
COMMAND clang-format -i -style=google ${CMAKE_CURRENT_SOURCE_DIR}/include/*h
COMMAND clang-format -i -style=google ${CMAKE_CURRENT_SOURCE_DIR}/src/*cc
COMMAND clang-format -i -style=google ${CMAKE_CURRENT_SOURCE_DIR}/tools/*cc
)