Last active
September 19, 2016 14:09
-
-
Save aferrero2707/2ae108dd19bba4a9406c8cd3167a4d2a to your computer and use it in GitHub Desktop.
Experimental CMake build configuration for G'MIC
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
cmake_minimum_required(VERSION 2.8.9) | |
project(gmic CXX C) | |
find_package(PkgConfig) | |
# options controlling the build process | |
option(BUILD_LIB "Build the GMIC shared library" ON) | |
option(BUILD_CLI "Build the CLI interface" ON) | |
option(BUILD_PLUGIN "Build the GIMP plug-in" ON) | |
option(ENABLE_X "Add support for X11" ON) | |
option(ENABLE_FFMPEG "Add support for X11" ON) | |
option(ENABLE_FFTW "Add support for X11" ON) | |
option(ENABLE_GRAPHICSMAGICK "Add support for X11" ON) | |
option(ENABLE_JPEG "Add support for X11" ON) | |
option(ENABLE_OPENCV "Add support for X11" ON) | |
option(ENABLE_OPENEXR "Add support for X11" ON) | |
option(ENABLE_OPENMP "Add support for X11" ON) | |
option(ENABLE_PNG "Add support for X11" ON) | |
option(ENABLE_TIFF "Add support for X11" ON) | |
option(ENABLE_ZLIB "Add support for X11" ON) | |
# compile flags | |
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/modules) | |
set(CMAKE_POSITION_INDEPENDENT_CODE True) | |
set(COMPILE_FLAGS " -Dgmic_build -Dcimg_use_vt100 -Dgmic_is_parallel -Dcimg_use_abort ") | |
IF(MINGW) | |
SET(COMPILE_FLAGS " ${COMPILE_FLAGS} -std=gnu++11") | |
ELSEIF(APPLE) | |
SET(COMPILE_FLAGS " ${COMPILE_FLAGS} -mmacosx-version-min=10.8 -std=c++11 -stdlib=libc++ -Wno-error=c++11-narrowing -Wc++11-extensions -fpermissive") | |
ELSE(MINGW) | |
SET(COMPILE_FLAGS " ${COMPILE_FLAGS} -std=gnu++11 -Wno-error=narrowing -fno-ipa-sra -fpermissive") | |
ENDIF(MINGW) | |
IF(NOT "${PRERELEASE_TAG}" STREQUAL "") | |
SET(COMPILE_FLAGS "${COMPILE_FLAGS} -Dgmic_prerelease=\"${PRERELEASE_TAG}\"") | |
ENDIF(NOT "${PRERELEASE_TAG}" STREQUAL "") | |
set(EXTRA_LIBRARIES) | |
# OpenMP support | |
if(ENABLE_OPENMP) | |
if(NOT APPLE) | |
set(COMPILE_FLAGS " ${COMPILE_FLAGS} -fopenmp -Dcimg_use_openmp ") | |
set(EXTRA_LIBRARIES "-lgomp ${EXTRA_LIBRARIES}") | |
endif(NOT APPLE) | |
endif(ENABLE_OPENMP) | |
# Zlib support | |
if(ENABLE_ZLIB) | |
find_package (ZLIB) | |
endif(ENABLE_ZLIB) | |
if(ZLIB_FOUND) | |
set(COMPILE_FLAGS " ${COMPILE_FLAGS} -Dcimg_use_zlib ") | |
include_directories(${ZLIB_INCLUDE_DIRS}) | |
link_directories(${ZLIB_LIBRARY_DIRS}) | |
endif(ZLIB_FOUND) | |
#X11 support | |
if(ENABLE_X) | |
find_package (X11) | |
endif(ENABLE_X) | |
if(X11_FOUND) | |
set(COMPILE_FLAGS " ${COMPILE_FLAGS} -Dcimg_display=1 -Dcimg_appname=\\\"gmic\\\" ") | |
include_directories(${X11_INCLUDE_DIR}) | |
include_directories(${X11_INCLUDE_DIRS}) | |
link_directories(${X11_LIBRARY_DIR}) | |
link_directories(${X11_LIBRARY_DIRS}) | |
else(X11_FOUND) | |
set(COMPILE_FLAGS " ${COMPILE_FLAGS} -Dcimg_display=0 -Dcimg_appname=\\\"gmic\\\" ") | |
endif(X11_FOUND) | |
message( "X11_INCLUDE_DIR: " ${X11_INCLUDE_DIR} ) | |
message( "X11_INCLUDE_DIRs: " ${X11_INCLUDE_DIRs} ) | |
message( "X11_LIBRARY_DIR: " ${X11_LIBRARY_DIR} ) | |
message( "X11_LIBRARY_DIRS: " ${X11_LIBRARY_DIRS} ) | |
if(X11_XShm_FOUND) | |
set(COMPILE_FLAGS " ${COMPILE_FLAGS} -Dcimg_use_xshm ") | |
endif(X11_XShm_FOUND) | |
if(ENABLE_FFTW) | |
pkg_check_modules(FFTW3 fftw3>=3.0) | |
endif(ENABLE_FFTW) | |
if(FFTW3_FOUND) | |
set(COMPILE_FLAGS " ${COMPILE_FLAGS} -Dcimg_use_fftw3 ") | |
include_directories(${FFTW3_INCLUDE_DIRS}) | |
link_directories(${FFTW3_LIBRARY_DIRS}) | |
if(APPLE) | |
set(COMPILE_FLAGS " ${COMPILE_FLAGS} -Dcimg_use_fftw3_singlethread") | |
else(APPLE) | |
set(EXTRA_LIBRARIES "${EXTRA_LIBRARIES} -lfftw3_threads") | |
endif(APPLE) | |
endif(FFTW3_FOUND) | |
if(ENABLE_OPENCV) | |
pkg_check_modules(OPENCV opencv) | |
endif(ENABLE_OPENCV) | |
if(OPENCV_FOUND) | |
set(COMPILE_FLAGS " ${COMPILE_FLAGS} -Dcimg_use_opencv ") | |
include_directories(${OPENCV_INCLUDE_DIRS}) | |
link_directories(${OPENCV_LIBRARY_DIRS}) | |
endif(OPENCV_FOUND) | |
if(ENABLE_GRAPHICSMAGICK) | |
pkg_check_modules(GRAPHICSMAGICK GraphicsMagick++) | |
endif(ENABLE_GRAPHICSMAGICK) | |
if(GRAPHICSMAGICK_FOUND) | |
set(COMPILE_FLAGS " ${COMPILE_FLAGS} -Dcimg_use_magick ") | |
include_directories(${GRAPHICSMAGICK_INCLUDE_DIRS}) | |
link_directories(${GRAPHICSMAGICK_LIBRARY_DIRS}) | |
endif(GRAPHICSMAGICK_FOUND) | |
if(ENABLE_TIFF) | |
find_package (TIFF) | |
endif(ENABLE_TIFF) | |
if(TIFF_FOUND) | |
set(COMPILE_FLAGS " ${COMPILE_FLAGS} -Dcimg_use_tiff ") | |
include_directories(${TIFF_INCLUDE_DIRS}) | |
link_directories(${TIFF_LIBRARY_DIRS}) | |
endif(TIFF_FOUND) | |
if(ENABLE_PNG) | |
find_package (PNG) | |
endif(ENABLE_PNG) | |
if(PNG_FOUND) | |
set(COMPILE_FLAGS " ${COMPILE_FLAGS} -Dcimg_use_png ") | |
include_directories(${PNG_INCLUDE_DIRS}) | |
link_directories(${PNG_LIBRARY_DIRS}) | |
endif(PNG_FOUND) | |
if(ENABLE_JPEG) | |
find_package (JPEG) | |
endif(ENABLE_JPEG) | |
if(JPEG_FOUND) | |
set(COMPILE_FLAGS " ${COMPILE_FLAGS} -Dcimg_use_jpeg ") | |
include_directories(${JPEG_INCLUDE_DIRS}) | |
link_directories(${JPEG_LIBRARY_DIRS}) | |
endif(JPEG_FOUND) | |
if(ENABLE_OPENEXR) | |
pkg_check_modules(OPENEXR OpenEXR) | |
endif(ENABLE_OPENEXR) | |
if(OPENEXR_FOUND) | |
set(COMPILE_FLAGS " ${COMPILE_FLAGS} -Dcimg_use_openexr ") | |
include_directories(${OPENEXR_INCLUDE_DIRS}) | |
link_directories(${OPENEXR_LIBRARY_DIRS}) | |
endif(OPENEXR_FOUND) | |
# CImg.h header | |
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/CImg_download.cmake "file(DOWNLOAD https://github.com/dtschump/CImg/blob/master/CImg.h?raw=true ${CMAKE_SOURCE_DIR}/src/CImg.h)") | |
add_custom_command( | |
OUTPUT ${CMAKE_SOURCE_DIR}/src/CImg.h | |
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/CImg_download.cmake | |
#COMMAND ${WGET_EXECUTABLE} https://github.com/dtschump/CImg/blob/master/CImg.h?raw=true -O ${CMAKE_SOURCE_DIR}/src/CImg.h | |
COMMAND touch ${CMAKE_SOURCE_DIR}/src/CImg.h | |
) | |
add_custom_target(CImg_download ALL DEPENDS ${CMAKE_SOURCE_DIR}/src/CImg.h) | |
# gmic_stdlib.h header | |
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/gmic_stdlib_download.cmake "file(DOWNLOAD http://gmic.eu/gmic_stdlib.h ${CMAKE_SOURCE_DIR}/src/gmic_stdlib.h)") | |
add_custom_command( | |
OUTPUT ${CMAKE_SOURCE_DIR}/src/gmic_stdlib.h | |
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/gmic_stdlib_download.cmake | |
#COMMAND ${WGET_EXECUTABLE} http://gmic.eu/gmic_stdlib.h -O ${CMAKE_SOURCE_DIR}/src/gmic_stdlib.h | |
COMMAND touch ${CMAKE_SOURCE_DIR}/src/gmic_stdlib.h | |
) | |
add_custom_target(gmic_stdlib_download ALL DEPENDS ${CMAKE_SOURCE_DIR}/src/gmic_stdlib.h) | |
add_custom_target(gmic_extra_headers DEPENDS CImg_download gmic_stdlib_download) | |
if(NOT CMAKE_BUILD_TYPE) | |
set(CMAKE_BUILD_TYPE "Release" CACHE STRING | |
"Choose the type of build, options are: Debug Release RelWithDebInfo." | |
FORCE) | |
endif(NOT CMAKE_BUILD_TYPE) | |
SET(CMAKE_CXX_FLAGS_DEBUG " -O0 -g -ansi -pedantic -Dcimg_verbosity=3 ${COMPILE_FLAGS}") | |
SET(CMAKE_CXX_FLAGS_RELEASE " -O3 -mtune=generic ${COMPILE_FLAGS}") | |
SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO " -O3 -g -mtune=generic ${COMPILE_FLAGS}") | |
# source files | |
SET(CLI_Includes ./src/gmic.h) #${CMAKE_BINARY_DIR}/gmic_stdlib.h ${CMAKE_BINARY_DIR}/CImg.h) | |
SET(CLI_Sources ./src/gmic.cpp) | |
IF(MINGW) | |
IF("${EXTRA_LIBRARIES}" STREQUAL "") | |
SET(EXTRA_LIBRARIES "-Wl,--stack,16777216") | |
ELSE("${EXTRA_LIBRARIES}" STREQUAL "") | |
SET(EXTRA_LIBRARIES "-Wl,--stack,16777216 ${EXTRA_LIBRARIES}") | |
ENDIF("${EXTRA_LIBRARIES}" STREQUAL "") | |
ELSEIF(APPLE) | |
IF("${EXTRA_LIBRARIES}" STREQUAL "") | |
SET(EXTRA_LIBRARIES "-lpthread") | |
ELSE("${EXTRA_LIBRARIES}" STREQUAL "") | |
SET(EXTRA_LIBRARIES "-lpthread ${EXTRA_LIBRARIES}") | |
ENDIF("${EXTRA_LIBRARIES}" STREQUAL "") | |
ELSE(MINGW) | |
IF("${EXTRA_LIBRARIES}" STREQUAL "") | |
SET(EXTRA_LIBRARIES "-lpthread") | |
ELSE("${EXTRA_LIBRARIES}" STREQUAL "") | |
SET(EXTRA_LIBRARIES "-lpthread ${EXTRA_LIBRARIES}") | |
ENDIF("${EXTRA_LIBRARIES}" STREQUAL "") | |
ENDIF(MINGW) | |
if(BUILD_LIB) | |
add_library(libgmic SHARED ${CLI_Includes} ${CLI_Sources}) | |
add_dependencies(libgmic gmic_extra_headers) | |
set_target_properties(libgmic PROPERTIES OUTPUT_NAME "gmic") | |
IF(NOT APPLE) | |
set_target_properties(libgmic PROPERTIES LINK_FLAGS "-Wl,-soname,libgmic.so.1") | |
ENDIF(NOT APPLE) | |
target_link_libraries(libgmic | |
${X11_LIBRARIES} | |
${TIFF_LIBRARIES} | |
${PNG_LIBRARIES} | |
${JPEG_LIBRARIES} | |
${GRAPHICSMAGICK_LIBRARIES} | |
${OPENEXR_LIBRARIES} | |
${OPENCV_LIBRARIES} | |
${ZLIB_LIBRARIES} | |
${FFTW3_LIBRARIES} | |
${EXTRA_LIBRARIES} | |
) | |
add_library(libgmicstatic STATIC ${CLI_Includes} ${CLI_Sources}) | |
add_dependencies(libgmicstatic gmic_extra_headers) | |
set_target_properties(libgmicstatic PROPERTIES OUTPUT_NAME "gmic") | |
target_link_libraries(libgmicstatic | |
${X11_LIBRARIES} | |
${TIFF_LIBRARIES} | |
${PNG_LIBRARIES} | |
${JPEG_LIBRARIES} | |
${GRAPHICSMAGICK_LIBRARIES} | |
${OPENEXR_LIBRARIES} | |
${OPENCV_LIBRARIES} | |
${ZLIB_LIBRARIES} | |
${FFTW3_LIBRARIES} | |
${EXTRA_LIBRARIES} | |
) | |
INSTALL(TARGETS libgmic LIBRARY DESTINATION lib) | |
INSTALL(TARGETS libgmicstatic ARCHIVE DESTINATION lib) | |
INSTALL(FILES src/gmic.h DESTINATION include) | |
endif(BUILD_LIB) | |
if(BUILD_CLI) | |
add_executable(gmic ${CLI_Includes} ${CLI_Sources}) | |
add_dependencies(gmic gmic_extra_headers) | |
set_target_properties(gmic PROPERTIES COMPILE_FLAGS " -Dgmic_main ") | |
target_link_libraries(gmic | |
${X11_LIBRARIES} | |
${TIFF_LIBRARIES} | |
${PNG_LIBRARIES} | |
${JPEG_LIBRARIES} | |
${GRAPHICSMAGICK_LIBRARIES} | |
${OPENEXR_LIBRARIES} | |
${OPENCV_LIBRARIES} | |
${ZLIB_LIBRARIES} | |
${FFTW3_LIBRARIES} | |
${EXTRA_LIBRARIES} | |
) | |
INSTALL(TARGETS gmic RUNTIME DESTINATION bin) | |
endif(BUILD_CLI) | |
# GIMP plug-in | |
if(BUILD_PLUGIN) | |
pkg_check_modules(GIMP gimp-2.0) | |
if (GIMP_FOUND) | |
pkg_check_modules(GIMPUI gimpui-2.0) | |
if (GIMPUI_FOUND) | |
include_directories(${GIMP_INCLUDE_DIRS}) | |
link_directories(${GIMP_LIBRARY_DIRS}) | |
include_directories(${GIMPUI_INCLUDE_DIRS}) | |
link_directories(${GIMPUI_LIBRARY_DIRS}) | |
add_executable(gmic_gimp ${CLI_Includes} ${CLI_Sources} ./src/gmic_gimp.cpp) | |
add_dependencies(gmic_gimp gmic_extra_headers) | |
set_target_properties(gmic_gimp PROPERTIES COMPILE_FLAGS " -Dgmic_gimp") | |
target_link_libraries(gmic_gimp | |
${X11_LIBRARIES} | |
${TIFF_LIBRARIES} | |
${PNG_LIBRARIES} | |
${JPEG_LIBRARIES} | |
${GRAPHICSMAGICK_LIBRARIES} | |
${OPENEXR_LIBRARIES} | |
${OPENCV_LIBRARIES} | |
${ZLIB_LIBRARIES} | |
${FFTW3_LIBRARIES} | |
${GIMP_LIBRARIES} | |
${GIMPUI_LIBRARIES} | |
${EXTRA_LIBRARIES} | |
) | |
INSTALL(TARGETS gmic_gimp RUNTIME DESTINATION ${GIMP_PREFIX}/lib/gimp/2.0/plug-ins) | |
INSTALL(FILES ${CMAKE_SOURCE_DIR}/resources/gmic_film_cluts.gmz DESTINATION ${GIMP_PREFIX}/lib/gimp/2.0/plug-ins) | |
endif (GIMPUI_FOUND) | |
endif (GIMP_FOUND) | |
endif(BUILD_PLUGIN) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment