Skip to content

Commit 40c4260

Browse files
author
Clement Champetier
committed
CMake: build AvTranscoder
* Same problem with scons about the java binding : need to generate the java files, reconfigure, and build again to generate class files and the jar. Need to find a solution to skip the reconfigure... * Useful flags to configure using CMake: * CMAKE_BUILD_TYPE: Release / Debug * CMAKE_INSTALL_PREFIX: /path/to/install * FFMPEG_INCLUDE_DIR * FFMPEG_LIBRARY_DIR * Name of output librairies: * avtranscoder.a * avtranscoder.so (link + .so with version) * avtranscoder-py.so (without link) * avtranscoder-java.so (without link)
1 parent 18b08d9 commit 40c4260

File tree

2 files changed

+119
-0
lines changed

2 files changed

+119
-0
lines changed

CMakeLists.txt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
cmake_minimum_required(VERSION 2.8)
2+
3+
project(AvTranscoder)
4+
5+
# AvTranscoder version
6+
set(AVTRANSCODER_VERSION_MAJOR 0)
7+
set(AVTRANSCODER_VERSION_MINOR 2)
8+
set(AVTRANSCODER_VERSION_MICRO 1)
9+
set(AVTRANSCODER_VERSION ${AVTRANSCODER_VERSION_MAJOR}.${AVTRANSCODER_VERSION_MINOR}.${AVTRANSCODER_VERSION_MICRO})
10+
11+
# Diplay commands being ran by CMake
12+
set(CMAKE_VERBOSE_MAKEFILE ON)
13+
14+
# Choose compiler
15+
set(CMAKE_CXX_COMPILER "g++")
16+
17+
# CPP flags on debug / release mode
18+
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -fPIC -pg -g")
19+
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fPIC -O3")
20+
21+
add_subdirectory(src)

src/CMakeLists.txt

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
# Load project cmake
2+
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
3+
4+
# Get useful variables
5+
set(AVTRANSCODER_APP_PATH "${PROJECT_SOURCE_DIR}/app" PARENT_SCOPE)
6+
set(AVTRANSCODER_SRC_PATH "${PROJECT_SOURCE_DIR}/src" PARENT_SCOPE)
7+
file(GLOB_RECURSE AVTRANSCODER_SRC_FILES "AvTranscoder/*.cpp" "AvTranscoder/*.hpp")
8+
9+
# Get FFMPEG from parameters
10+
set(FFMPEG_INCLUDE_DIR "/path/to/ffmpeg/include/" CACHE STRING "")
11+
set(FFMPEG_LIBRARY_DIR "/path/to/ffmpeg/lib/" CACHE STRING "")
12+
file(GLOB_RECURSE FFMPEG_LIBS "${FFMPEG_LIBRARY_DIR}/*.so")
13+
14+
# Include AvTranscoder and FFmpeg
15+
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${FFMPEG_INCLUDE_DIR})
16+
17+
# Create 'avtranscoder' static lib
18+
add_library(avtranscoder-static STATIC ${AVTRANSCODER_SRC_FILES})
19+
set_target_properties(avtranscoder-static PROPERTIES LINKER_LANGUAGE CXX)
20+
set_target_properties(avtranscoder-static PROPERTIES OUTPUT_NAME avtranscoder)
21+
target_link_libraries(avtranscoder-static ${FFMPEG_LIBS})
22+
23+
# Create 'avtranscoder' shared lib
24+
add_library(avtranscoder-shared SHARED ${AVTRANSCODER_SRC_FILES})
25+
set_target_properties(avtranscoder-shared PROPERTIES LINKER_LANGUAGE CXX)
26+
set_target_properties(avtranscoder-shared PROPERTIES OUTPUT_NAME avtranscoder)
27+
set_target_properties(avtranscoder-shared PROPERTIES SOVERSION ${AVTRANSCODER_VERSION})
28+
target_link_libraries(avtranscoder-shared ${FFMPEG_LIBS})
29+
30+
### Install AvTranscoder libs and include
31+
install(
32+
DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/AvTranscoder"
33+
DESTINATION "include/"
34+
FILES_MATCHING
35+
PATTERN "*.hpp"
36+
PATTERN "*.i"
37+
PATTERN "Profiles" EXCLUDE
38+
)
39+
set(LIBRARY_OUTPUT_PATH "${PROJECT_BINARY_DIR}/lib")
40+
set(AVTRANSCODER_LIBRARY_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH}")
41+
file(GLOB_RECURSE AVTRANSCODER_OUTPUT_LIBRARIES "${AVTRANSCODER_LIBRARY_OUTPUT_PATH}/*")
42+
install(FILES ${AVTRANSCODER_OUTPUT_LIBRARIES} DESTINATION "lib/")
43+
44+
### SWIG
45+
find_package(SWIG)
46+
if(SWIG_FOUND)
47+
# Load Modules/UseSWIG.cmake
48+
include(${SWIG_USE_FILE})
49+
50+
# Configure Swig
51+
set(CMAKE_SWIG_OUTDIR "${CMAKE_CURRENT_BINARY_DIR}/AvTranscoder")
52+
set(AVTRANSCODER_BINDING_FILE "AvTranscoder/avTranscoder.i")
53+
set_source_files_properties(${AVTRANSCODER_BINDING_FILE} PROPERTIES CPLUSPLUS ON)
54+
55+
### PYTHON BINDING
56+
find_package(PythonLibs)
57+
include_directories(${PYTHON_INCLUDE_PATH})
58+
59+
# Swig flags
60+
set(CMAKE_SWIG_FLAGS -c++ -fcompact)
61+
62+
# Create 'avtranscoder-py' shared lib
63+
swig_add_module(avtranscoder-py python ${AVTRANSCODER_BINDING_FILE})
64+
swig_link_libraries(avtranscoder-py avtranscoder-shared ${PYTHON_LIBRARIES})
65+
66+
# Install python interface
67+
file(GLOB AVTRANSCODER_PYTHON_BINDING_FILE "${CMAKE_SWIG_OUTDIR}/*.py")
68+
install(FILES ${AVTRANSCODER_PYTHON_BINDING_FILE} DESTINATION "lib/python2.7/site-packages/AvTranscoder/")
69+
70+
### JAVA BINDING
71+
set(ENV{JAVA_HOME} "/usr/java/jdk1.6.0_43") # fix find java SDK
72+
find_package(Java REQUIRED)
73+
find_package(JNI REQUIRED)
74+
include(UseJava)
75+
include_directories(${JAVA_INCLUDE_PATH})
76+
include_directories(${JNI_INCLUDE_DIRS})
77+
78+
# Swig flags
79+
set(CMAKE_SWIG_FLAGS -c++ -fcompact -package org.AvTranscoder)
80+
81+
# Create 'avtranscoder-java' shared lib
82+
swig_add_module(avtranscoder-java java ${AVTRANSCODER_BINDING_FILE})
83+
swig_link_libraries(avtranscoder-java avtranscoder-shared)
84+
85+
# Need to generate java files before class files and jar
86+
set(AVTRANSCODER_JAVA_OUTPUT_PATH "${PROJECT_BINARY_DIR}/src/AvTranscoder")
87+
if(EXISTS "${AVTRANSCODER_JAVA_OUTPUT_PATH}/Transcoder.java")
88+
file(GLOB AVTRANSCODER_JAVA_BINDING_FILES "${AVTRANSCODER_JAVA_OUTPUT_PATH}/*.java")
89+
add_jar(avtranscoder-jar ${AVTRANSCODER_JAVA_BINDING_FILES})
90+
91+
# Install jar
92+
install_jar(avtranscoder-jar "share/java/")
93+
endif()
94+
95+
else(SWIG_FOUND)
96+
message("SWIG not found, will not build python and java bindings.")
97+
98+
endif(SWIG_FOUND)

0 commit comments

Comments
 (0)