if (WIN32) cmake_minimum_required(VERSION 2.8.4) cmake_policy(SET CMP0015 OLD) else (WIN32) cmake_minimum_required(VERSION 2.6) endif (WIN32) # the default target is 'Debug' if (CMAKE_BUILD_TYPE STREQUAL "") set (CMAKE_BUILD_TYPE Debug CACHE STRING "One of: None Debug Release RelWithDebInfo MinSizeRel." FORCE) endif () message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}") # By default, we don't use specific processor target, so PROC_TARGET_NUMBER is set to 0. If can specify other values to select specific # processor targets, which list can be found in ProcessorTargets.cmake. set (PROC_TARGET_NUMBER 0 CACHE STRING "Selected target processor from the list above (taken from ProcessorTargets.cmake)") # The following line set special compilation flags for RTEngine, and will be added to CMAKE_CXX_FLAGS # It were moved away from rtengine/CMakefiles.txt, because some users may want to remove -ffast_math : # this flag speeds up the floating-point operations, but with a little bite less precisions. This default value # gives the same result/behaviour as before. set (RTENGINE_CXX_FLAGS "-ffast-math -funroll-loops" CACHE STRING "Special compilation flags for RTEngine") #loading the processor targets list include (ProcessorTargets.cmake) set (PROC_LABEL "undefined" CACHE STRING "Target processor label, unused if PROC_TARGET_NUMBER = 0 or 2") set (PROC_FLAGS "" CACHE STRING "Target processor related build/link flags") if ((NOT(PROC_TARGET_NUMBER NOT EQUAL 0)) AND (NOT(PROC_TARGET_NUMBER EQUAL 2))) set (PROC_LABEL ${PROC_TARGET_${PROC_TARGET_NUMBER}_LABEL}) set (PROC_FLAGS ${PROC_TARGET_${PROC_TARGET_NUMBER}_FLAGS}) endif () # if it exists, the PROC_FORCED_LABEL value is loaded in PROC_LABEL to override the one of ProcessorTargets if (DEFINED PROC_FORCED_LABEL) set (PROC_LABEL ${PROC_FORCED_LABEL}) endif (DEFINED PROC_FORCED_LABEL) # adding the proc flags to the build flags set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PROC_FLAGS}") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${PROC_FLAGS}") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${PROC_FLAGS}") if (WIN32) # we additionnally look in the MinGW path first then in the Gtkmm path, # so if you wish to build some dependant library, you have to install them in MinGW to use them set(CMAKE_PREFIX_PATH $ENV{MINGW_BASEPATH} $ENV{GTKMM_BASEPATH} CACHE STRING "Additional search paths") endif (WIN32) if (APPLE) # SET (CMAKE_OSX_ARCHITECTURES "i386;x86_64;" ) # SET (CMAKE_TRY_COMPILE_OSX_ARCHITECTURES "i386;x86_64;" ) SET (CMAKE_OSX_SYSROOT "/Developer/SDKs/MacOSX10.5.sdk") SET (CMAKE_OSX_DEPLOYMENT_TARGET "10.5") endif (APPLE) option (AUTOMATED_BUILD_SYSTEM "TRUE if built by an automate" OFF) option (BUILD_SHARED "Build rawtherapee with shared libraries" OFF) option (WITH_RAWZOR "Build with Rawzor support" OFF) option (WITH_BZIP "Build with Bzip2 support" ON) option (WITH_MYFILE_MMAP "Build using memory mapped file" ON) option (OPTION_OMP "Build with OpenMP support" ON) # set install directories if (NOT DEFINED DATADIR) if (WIN32 OR APPLE) set (DATADIR ${CMAKE_CURRENT_SOURCE_DIR}/release) else (WIN32 OR APPLE) set (DATADIR ${CMAKE_INSTALL_PREFIX}/share/rawtherapee) endif (WIN32 OR APPLE) endif (NOT DEFINED DATADIR) if (NOT DEFINED BINDIR) if (WIN32 OR APPLE) set (BINDIR ${CMAKE_CURRENT_SOURCE_DIR}/release) else (WIN32 OR APPLE) set (BINDIR ${CMAKE_INSTALL_PREFIX}/bin) endif (WIN32 OR APPLE) endif (NOT DEFINED BINDIR) if (NOT DEFINED LIBDIR) if (WIN32 OR APPLE) set (LIBDIR ${CMAKE_CURRENT_SOURCE_DIR}/release) else (WIN32 OR APPLE) # Respect CMAKE_INSTALL_LIBDIR if set if (DEFINED CMAKE_INSTALL_LIBDIR) set (LIBDIR ${CMAKE_INSTALL_LIBDIR}) else (DEFINED CMAKE_INSTALL_LIBDIR) set (LIBDIR ${CMAKE_INSTALL_PREFIX}/lib) endif (DEFINED CMAKE_INSTALL_LIBDIR) endif (WIN32 OR APPLE) endif (NOT DEFINED LIBDIR) if (NOT DEFINED DOCDIR) if (WIN32 OR APPLE) set (DOCDIR ${CMAKE_CURRENT_SOURCE_DIR}/release/doc) else (WIN32 OR APPLE) set (DOCDIR ${CMAKE_INSTALL_PREFIX}/share/doc) endif (WIN32 OR APPLE) endif (NOT DEFINED DOCDIR) if (NOT DEFINED CREDITSDIR) if (WIN32 OR APPLE) set (CREDITSDIR ${CMAKE_CURRENT_SOURCE_DIR}/release) else (WIN32 OR APPLE) set (CREDITSDIR ${CMAKE_INSTALL_PREFIX}/share/doc) endif (WIN32 OR APPLE) endif (NOT DEFINED CREDITSDIR) if (NOT DEFINED LICENCEDIR) if (WIN32 OR APPLE) set (LICENCEDIR ${CMAKE_CURRENT_SOURCE_DIR}/release) else (WIN32 OR APPLE) set (LICENCEDIR ${CMAKE_INSTALL_PREFIX}/share/doc) endif (WIN32 OR APPLE) endif (NOT DEFINED LICENCEDIR) # check for libraries find_package(PkgConfig) pkg_check_modules (GTK REQUIRED gtk+-2.0>=2.12) pkg_check_modules (GLIB2 REQUIRED glib-2.0>=2.16) pkg_check_modules (GLIBMM REQUIRED glibmm-2.4>=2.16) pkg_check_modules (GTKMM REQUIRED gtkmm-2.4>=2.12) pkg_check_modules (GIO REQUIRED gio-2.0>=2.16) pkg_check_modules (GIOMM REQUIRED giomm-2.4>=2.12) pkg_check_modules (GTHREAD REQUIRED gthread-2.0>=2.16) pkg_check_modules (GOBJECT REQUIRED gobject-2.0>=2.16) pkg_check_modules (SIGC REQUIRED sigc++-2.0) # NOTE: The new mechanism has been tested with BUILD_SHARED = OFF if (WIN32) add_definitions (-DWIN32) add_definitions (-D_WIN32) if (MINGW) add_definitions (-D__MINGW32__) endif (MINGW) set (EXTRA_LIB "-lws2_32") endif (WIN32) # you may need lcms v1.xx for older version : pkg_check_modules (LCMS REQUIRED lcms<=1.99) pkg_check_modules (LCMS REQUIRED lcms2) pkg_check_modules (IPTCDATA REQUIRED libiptcdata) find_package (JPEG REQUIRED) find_package (PNG REQUIRED) find_package (TIFF REQUIRED) find_package (ZLIB REQUIRED) if (AUTOMATED_BUILD_SYSTEM) message(WARNING "Automated build system mode! You have to make sure that AboutThisBuild.txt and rtgui/version.h are up-to-date by building RT at least one time with AUTOMATED_BUILD_SYSTEM=OFF.") # Checking for the presence of AboutThisBuild.txt find_file(ABOUT_FILE AboutThisBuild.txt PATHS "${CMAKE_CURRENT_SOURCE_DIR}" NO_DEFAULT_PATH) if (ABOUT_FILE STREQUAL ABOUT_FILE-NOTFOUND) message(FATAL_ERROR "AboutThisBuild.txt not found! You have to build RT at least one time with AUTOMATED_BUILD_SYSTEM=OFF to generate this file.") endif (ABOUT_FILE STREQUAL ABOUT_FILE-NOTFOUND) # Checking for the presence of version.h find_file(VERSION_FILE version.h PATHS "${CMAKE_CURRENT_SOURCE_DIR}/rtgui" NO_DEFAULT_PATH) if (VERSION_FILE STREQUAL VERSION_FILE-NOTFOUND) message(FATAL_ERROR "rtgui/version.h not found! You have to build RT at least one time with AUTOMATED_BUILD_SYSTEM=OFF to generate this file.") endif (VERSION_FILE STREQUAL VERSION_FILE-NOTFOUND) else (AUTOMATED_BUILD_SYSTEM) # set the bit number information of the platform if (CMAKE_SIZEOF_VOID_P EQUAL 4) set(PROC_BIT_DEPTH 32 bits) elseif (CMAKE_SIZEOF_VOID_P EQUAL 8) set(PROC_BIT_DEPTH 64 bits) endif (CMAKE_SIZEOF_VOID_P EQUAL 4) string (TOUPPER ${CMAKE_BUILD_TYPE} UPPER_CMAKE_BUILD_TYPE) #generating AboutThisBuild.txt if (WIN32) add_custom_target (AboutFile ALL COMMAND ${CMAKE_COMMAND} -DSRC_DIR:STRING=${CMAKE_CURRENT_SOURCE_DIR} -DSYSTEM:STRING=Windows -DPROC_LABEL:STRING=\"${PROC_LABEL}\" -DPROC_BIT_DEPTH:STRING=\"${PROC_BIT_DEPTH}\" -DBUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} -DGTKMM_VERSION:STRING=${GTKMM_VERSION} -DCXX_FLAGS:STRING=\"${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${UPPER_CMAKE_BUILD_TYPE}}\" -DLFLAGS:STRING=\"${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_${UPPER_CMAKE_BUILD_TYPE}}\" -DOPTION_OMP:STRING=${OPTION_OMP} -DWITH_MYFILE_MMAP:STRING=${WITH_MYFILE_MMAP} -DWITH_RAWZOR:STRING=${WITH_RAWZOR} -P ${CMAKE_CURRENT_SOURCE_DIR}/About-Windows.cmake COMMENT "Creating the about file" ) find_file(HG_CMD hg.exe HINTS ENV Path PATH_SUFFIXES ../) elseif (APPLE) add_custom_target (AboutFile ALL COMMAND ${CMAKE_COMMAND} -DSRC_DIR:STRING=${CMAKE_CURRENT_SOURCE_DIR} -DSYSTEM:STRING=Apple -DPROC_LABEL:STRING=\"${PROC_LABEL}\" -DPROC_BIT_DEPTH:STRING=\"${PROC_BIT_DEPTH}\" -DBUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} -DGTKMM_VERSION:STRING=${GTKMM_VERSION} -DCXX_FLAGS:STRING=${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${UPPER_CMAKE_BUILD_TYPE}} -DLFLAGS:STRING=${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_${UPPER_CMAKE_BUILD_TYPE}} -DOPTION_OMP:STRING=${OPTION_OMP} -DWITH_MYFILE_MMAP:STRING=${WITH_MYFILE_MMAP} -DWITH_RAWZOR:STRING=${WITH_RAWZOR} -P ${CMAKE_CURRENT_SOURCE_DIR}/About-Apple.cmake COMMENT "Creating the about file" ) find_file(HG_CMD hg PATHS "/opt/local/bin" "/usr/local/bin" "/usr/bin") find_file(HG_CMD hg) else (WIN32) add_custom_target (AboutFile ALL COMMAND ${CMAKE_COMMAND} -DSRC_DIR:STRING=${CMAKE_CURRENT_SOURCE_DIR} -DSYSTEM:STRING=Linux -DPROC_LABEL:STRING=\"${PROC_LABEL}\" -DPROC_BIT_DEPTH:STRING=\"${PROC_BIT_DEPTH}\" -DBUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} -DGTKMM_VERSION:STRING=${GTKMM_VERSION} -DCXX_FLAGS:STRING=${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${UPPER_CMAKE_BUILD_TYPE}} -DLFLAGS:STRING=${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_${UPPER_CMAKE_BUILD_TYPE}} -DOPTION_OMP:STRING=${OPTION_OMP} -DWITH_MYFILE_MMAP:STRING=${WITH_MYFILE_MMAP} -DWITH_RAWZOR:STRING=${WITH_RAWZOR} -P ${CMAKE_CURRENT_SOURCE_DIR}/About-Linux.cmake COMMENT "Creating the about file" ) find_file(HG_CMD hg) endif (WIN32) add_dependencies(AboutFile Debug Release MinSizeRel RelWithDebInfo) if (HG_CMD STREQUAL HG_CMD-NOTFOUND) message(FATAL_ERROR "hg command not found!") else (HG_CMD STREQUAL HG_CMD-NOTFOUND) message(STATUS "hg command found: ${HG_CMD}") endif (HG_CMD STREQUAL HG_CMD-NOTFOUND) endif (AUTOMATED_BUILD_SYSTEM) # link rawzor if (WITH_RAWZOR) set (EXTRA_INCDIR ${EXTRA_INCDIR} "${CMAKE_CURRENT_SOURCE_DIR}/rawzor") add_definitions (-DRAWZOR_SUPPORT) if (WIN32) if (CMAKE_SIZEOF_VOID_P EQUAL 4) set (EXTRA_LIBDIR ${EXTRA_LIBDIR} "${CMAKE_CURRENT_SOURCE_DIR}/rawzor/win32") set (EXTRA_LIB ${EXTRA_LIB} "rwz_sdk.lib") install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/rawzor/win32/rwz_sdk.dll DESTINATION ${BINDIR} PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ) elseif (CMAKE_SIZEOF_VOID_P EQUAL 8) set (EXTRA_LIBDIR ${EXTRA_LIBDIR} "${CMAKE_CURRENT_SOURCE_DIR}/rawzor/win64") set (EXTRA_LIB ${EXTRA_LIB} "rwz_sdk.lib") install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/rawzor/win64/rwz_sdk.dll DESTINATION ${BINDIR} PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ) endif (CMAKE_SIZEOF_VOID_P EQUAL 4) elseif (APPLE) if (CMAKE_SIZEOF_VOID_P EQUAL 4) set (EXTRA_LIBDIR ${EXTRA_LIBDIR} "${CMAKE_CURRENT_SOURCE_DIR}/rawzor/mac32") set (EXTRA_LIB "-lrwz_sdk") install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/rawzor/mac32/rwz_sdk.dylib DESTINATION ${LIBDIR} PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ) elseif (CMAKE_SIZEOF_VOID_P EQUAL 8) set (EXTRA_LIBDIR ${EXTRA_LIBDIR} "${CMAKE_CURRENT_SOURCE_DIR}/rawzor/mac64") set (EXTRA_LIB "-lrwz_sdk_64") install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/rawzor/mac64/rwz_sdk_64.dylib DESTINATION ${LIBDIR} PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ) endif (CMAKE_SIZEOF_VOID_P EQUAL 4) else (WIN32) if (CMAKE_SIZEOF_VOID_P EQUAL 4) set (EXTRA_LIBDIR ${EXTRA_LIBDIR} "${CMAKE_CURRENT_SOURCE_DIR}/rawzor/lin32") set (EXTRA_LIB ${EXTRA_LIB} "-lrwz_sdk") install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/rawzor/lin32/librwz_sdk.so DESTINATION ${LIBDIR} PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ RENAME rwz_sdk.so) elseif (CMAKE_SIZEOF_VOID_P EQUAL 8) set (EXTRA_LIBDIR ${EXTRA_LIBDIR} "${CMAKE_CURRENT_SOURCE_DIR}/rawzor/lin64") set (EXTRA_LIB ${EXTRA_LIB} "-lrwz_sdk") install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/rawzor/lin64/librwz_sdk.so DESTINATION ${LIBDIR} PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ RENAME rwz_sdk.so) endif (CMAKE_SIZEOF_VOID_P EQUAL 4) endif (WIN32) endif (WITH_RAWZOR) # link witz bzip if (WITH_BZIP) find_package(BZip2) if (BZIP2_FOUND) add_definitions (-DBZIP_SUPPORT) set (EXTRA_INCDIR ${EXTRA_LIB} ${BZIP2_INCLUDE_DIR}) set (EXTRA_LIB ${EXTRA_LIB} ${BZIP2_LIBRARIES}) endif (BZIP2_FOUND) endif (WITH_BZIP) if (WITH_MYFILE_MMAP) add_definitions (-DMYFILE_MMAP) endif (WITH_MYFILE_MMAP) if (OPTION_OMP) find_package(OpenMP) if (OPENMP_FOUND) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") endif (OPENMP_FOUND) endif (OPTION_OMP) if (UNIX) install (PROGRAMS rtstart DESTINATION ${BINDIR}) endif (UNIX) install (FILES AUTHORS.txt DESTINATION ${CREDITSDIR}) install (FILES LICENSE.txt DESTINATION ${LICENCEDIR}) install (FILES AboutThisBuild.txt DESTINATION ${CREDITSDIR}) add_subdirectory (rtexif) add_subdirectory (rtengine) add_subdirectory (rtgui) add_subdirectory (rtdata)