LIEF/CMakeLists.txt

520 lines
13 KiB
CMake
Raw Normal View History

cmake_minimum_required(VERSION 3.6)
2017-03-30 16:56:49 +02:00
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
2017-03-30 16:56:49 +02:00
# Modules
2017-04-16 13:49:44 +02:00
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/")
if (WIN32)
include(ChooseMSVCCRT)
endif()
2017-03-30 16:56:49 +02:00
include(CheckCXXCompilerFlag)
include(CheckCCompilerFlag)
include(Findcppcheck)
include(CppcheckTargets)
include(ExternalProject)
2018-10-31 12:26:53 +00:00
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git" AND IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/.git")
find_package(Git REQUIRED)
# Information from git
# ====================
include(LIEFGit)
else()
set(LIEF_VERSION_MAJOR "0")
set(LIEF_VERSION_MINOR "10")
2018-10-31 12:26:53 +00:00
set(LIEF_VERSION_PATCH "0")
endif()
2017-03-30 16:56:49 +02:00
# LIEF Project
# ============
2017-03-30 16:56:49 +02:00
project(LIEF VERSION ${LIEF_VERSION_MAJOR}.${LIEF_VERSION_MINOR}.${LIEF_VERSION_PATCH})
message(STATUS "${PROJECT_NAME} ${PROJECT_VERSION}")
# LIEF options
# =============
include(LIEFOptions)
# Compiler detection (C++14, C++17, ...)
include(LIEFCompilerDetection)
2017-03-30 16:56:49 +02:00
# CCACHE
# ======
find_program(CCACHE_FOUND ccache)
message(STATUS "ccache: ${LIEF_USE_CCACHE}")
if(CCACHE_FOUND AND LIEF_USE_CCACHE)
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
endif()
2019-02-04 08:47:43 +01:00
# Dependencies
2017-03-30 16:56:49 +02:00
# ============
set(THIRD_PARTY_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/third-party/")
include(LIEFDependencies)
2017-03-30 16:56:49 +02:00
# LIEF Source definition
# ======================
set_source_files_properties(${mbedtls_src_crypto} PROPERTIES GENERATED TRUE)
set_source_files_properties(${mbedtls_src_x509} PROPERTIES GENERATED TRUE)
set_source_files_properties(${mbedtls_src_tls} PROPERTIES GENERATED TRUE)
if (LIEF_LOGGING)
set_source_files_properties(${ELG_SOURCE_DIR}/easylogging++.cc PROPERTIES GENERATED TRUE)
#set_source_files_properties(${ELG_SOURCE_DIR}/easylogging++.cc PROPERTIES COMPILE_FLAGS -Wno-unused-variable)
#set_source_files_properties(${ELG_SOURCE_DIR}/easylogging++.h PROPERTIES COMPILE_FLAGS -Wno-unused-variable)
set(ELG_CC_PATH "${ELG_SOURCE_DIR}/easylogging++.cc")
endif()
2017-03-30 16:56:49 +02:00
set(LIEF_PRIVATE_INCLUDE_DIR)
set(LIEF_PUBLIC_INCLUDE_DIR)
set(LIEF_PUBLIC_INCLUDE_FILES)
set(LIEF_PRIVATE_INCLUDE_FILES)
set(LIBLIEF_SOURCE_FILES
"${ELG_CC_PATH}"
2017-04-05 15:33:18 +02:00
"${mbedtls_src_crypto}"
"${mbedtls_src_x509}"
"${mbedtls_src_tls}"
2017-09-28 10:54:37 +02:00
"${LIBFUZZER_SRC_FILES}"
2017-04-05 15:33:18 +02:00
"${CMAKE_CURRENT_SOURCE_DIR}/src/logging.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/exception.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/iostream.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/utils.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Object.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Object.tcc"
2017-04-05 15:33:18 +02:00
"${CMAKE_CURRENT_SOURCE_DIR}/src/Visitor.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/BinaryStream/BinaryStream.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/BinaryStream/VectorStream.cpp"
2018-05-15 11:38:56 +02:00
"${CMAKE_CURRENT_SOURCE_DIR}/src/BinaryStream/Convert.cpp"
2017-04-05 15:33:18 +02:00
"${CMAKE_CURRENT_SOURCE_DIR}/src/visitors/hash.cpp")
2017-03-30 16:56:49 +02:00
# Grouping basic headers together
# ===============================
set(LIEF_INC_FILES
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/ELF.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/Abstract.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/exception.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/iostream.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/iterators.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/LIEF.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/logging.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/MachO.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/PE.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/types.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/utils.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/visibility.h"
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/Object.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/Visitor.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/visitor_macros.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/BinaryStream/BinaryStream.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/BinaryStream/VectorStream.hpp"
2018-05-15 11:38:56 +02:00
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/BinaryStream/Convert.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/frozen.hpp"
)
set(LIEF_VISITOR_INCLUDE_FILES
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/hash.hpp")
set(LIEF_INCLUDE_FILES
${LIEF_INC_FILES}
${LIEF_VISITOR_INCLUDE_FILES}
)
set(LIEF_JSON_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/visitors/json.cpp")
set(LIEF_JSON_HDR
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/json.hpp"
"${LIBJSON_SOURCE_DIR}/json.hpp"
)
2017-09-28 10:54:37 +02:00
if (LIEF_ENABLE_JSON)
list(APPEND LIBLIEF_SOURCE_FILES "${LIEF_JSON_SRC}")
list(APPEND LIEF_INC_FILES "${LIEF_JSON_HDR}")
list(APPEND LIEF_PUBLIC_INCLUDE_DIR "${LIBJSON_SOURCE_DIR}/")
endif()
2017-09-28 10:54:37 +02:00
source_group("Header Files" FILES ${LIEF_INC_FILES})
source_group("Source Files" FILES ${LIBLIEF_SOURCE_FILES})
source_group("Header Files\\visitors" FILES ${LIEF_VISITOR_INCLUDE_FILES})
add_library(LIB_LIEF ${LIBLIEF_SOURCE_FILES} ${LIEF_INCLUDE_FILES})
2017-03-30 16:56:49 +02:00
if(WINDOWS AND BUILD_SHARED_LIBS)
target_link_libraries(LIB_LIEF ws2_32)
endif()
2018-10-31 12:27:26 +00:00
if(MSVC)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /bigobj")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj")
endif(MSVC)
if (BUILD_SHARED_LIBS)
target_compile_definitions(LIB_LIEF PRIVATE -DLIEF_EXPORTS)
else()
target_compile_definitions(LIB_LIEF PRIVATE -DLIEF_STATIC)
endif()
if (LIEF_SUPPORT_CXX14)
target_compile_features(LIB_LIEF PRIVATE cxx_std_14)
endif()
# Abstract part
include("${CMAKE_CURRENT_SOURCE_DIR}/src/Abstract/CMakeLists.txt")
2017-03-30 16:56:49 +02:00
# ELF Part
2017-11-18 16:37:40 +01:00
# ========
include("${CMAKE_CURRENT_SOURCE_DIR}/src/ELF/CMakeLists.txt")
2017-03-30 16:56:49 +02:00
if (LIEF_ELF)
2017-11-18 16:37:40 +01:00
set(ENABLE_ELF_SUPPORT 1)
else()
set(ENABLE_ELF_SUPPORT 0)
2017-03-30 16:56:49 +02:00
endif()
2017-11-18 16:37:40 +01:00
# PE Part
2017-11-18 16:37:40 +01:00
# =======
include("${CMAKE_CURRENT_SOURCE_DIR}/src/PE/CMakeLists.txt")
2017-03-30 16:56:49 +02:00
if (LIEF_PE)
2017-11-18 16:37:40 +01:00
set(ENABLE_PE_SUPPORT 1)
else()
set(ENABLE_PE_SUPPORT 0)
endif()
# MachO part
2017-11-18 16:37:40 +01:00
# ==========
include("${CMAKE_CURRENT_SOURCE_DIR}/src/MachO/CMakeLists.txt")
2017-03-30 16:56:49 +02:00
if (LIEF_MACHO)
2017-11-18 16:37:40 +01:00
set(ENABLE_MACHO_SUPPORT 1)
else()
set(ENABLE_MACHO_SUPPORT 0)
endif()
# Logging Configuration
# =====================
2018-07-16 08:57:54 +02:00
add_definitions(-DELPP_HANDLE_SIGABRT=0)
add_definitions(-DELPP_DISABLE_DEFAULT_CRASH_HANDLING)
2017-11-18 16:37:40 +01:00
if (LIEF_LOGGING)
add_definitions(-DELPP_NO_DEFAULT_LOG_FILE)
add_definitions(-DVDEBUG=9)
2018-07-16 08:57:54 +02:00
#add_definitions(-DELPP_FEATURE_CRASH_LOG)
2017-11-18 16:37:40 +01:00
set(ENABLE_LOGGING_SUPPORT 1)
else()
set(ENABLE_LOGGING_SUPPORT 0)
add_definitions(-DELPP_DISABLE_LOGS)
add_definitions(-DELPP_NO_LOG_TO_FILE)
add_definitions(-DELPP_DISABLE_DEFAULT_CRASH_HANDLING)
2017-03-30 16:56:49 +02:00
endif()
# Frozen Configuration
# ====================
if (LIEF_FROZEN_ENABLED)
list(APPEND LIEF_PRIVATE_INCLUDE_DIR "${FROZEN_INCLUDE_DIR}")
endif()
2017-03-30 16:56:49 +02:00
2018-05-04 12:46:28 +02:00
# OAT part
# ========
if (LIEF_OAT)
include(${CMAKE_CURRENT_SOURCE_DIR}/src/OAT/CMakeLists.txt)
set(ENABLE_OAT_SUPPORT 1)
else()
set(ENABLE_OAT_SUPPORT 0)
endif()
# DEX part
# ========
if (LIEF_DEX)
include(${CMAKE_CURRENT_SOURCE_DIR}/src/DEX/CMakeLists.txt)
set(ENABLE_DEX_SUPPORT 1)
else()
set(ENABLE_DEX_SUPPORT 0)
endif()
# VDEX part
# =========
if (LIEF_VDEX)
include(${CMAKE_CURRENT_SOURCE_DIR}/src/VDEX/CMakeLists.txt)
set(ENABLE_VDEX_SUPPORT 1)
else()
set(ENABLE_VDEX_SUPPORT 0)
endif()
# ART part
# ========
if (LIEF_ART)
include(${CMAKE_CURRENT_SOURCE_DIR}/src/ART/CMakeLists.txt)
set(ENABLE_ART_SUPPORT 1)
else()
set(ENABLE_ART_SUPPORT 0)
endif()
# Platforms
# =========
include(${CMAKE_CURRENT_SOURCE_DIR}/src/platforms/CMakeLists.txt)
2017-03-30 16:56:49 +02:00
# LIEF includes
# =============
configure_file(
2017-04-05 15:33:18 +02:00
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/version.h.in"
"${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/version.h"
2017-03-30 16:56:49 +02:00
)
2017-08-20 07:08:50 +02:00
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/config.h.in"
"${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/config.h"
@ONLY
)
list(APPEND LIEF_PUBLIC_INCLUDE_DIR
2017-04-05 15:33:18 +02:00
"${CMAKE_CURRENT_SOURCE_DIR}/include/"
"${CMAKE_CURRENT_SOURCE_DIR}/api/c/include/"
"${CMAKE_CURRENT_BINARY_DIR}/include/"
)
list(APPEND LIEF_PRIVATE_INCLUDE_DIR
"${LIEF_PUBLIC_INCLUDE_DIR}"
2017-04-05 15:33:18 +02:00
"${LIEF_PUBLIC_INCLUDE_DIR}"
"${LIBRANG_SOURCE_DIR}/include"
"${CMAKE_CURRENT_SOURCE_DIR}/src"
"${CMAKE_BINARY_DIR}"
2017-11-30 17:41:20 +01:00
"${ELG_SOURCE_DIR}"
"${MBEDTLS_INCLUDE_DIRS}"
)
2017-03-30 16:56:49 +02:00
# Grouping external projects
# ==========================
source_group("mbedtls\\crypto" FILES ${mbedtls_src_crypto})
source_group("mbedtls\\x509" FILES ${mbedtls_src_x509})
source_group("mbedtls\\tls" FILES ${mbedtls_src_tls})
if (LIEF_LOGGING)
source_group("easylogging" FILES ${ELG_SOURCE_DIR}/easylogging++.cc)
endif()
2017-03-30 16:56:49 +02:00
# Library definition
# ==================
target_include_directories(LIB_LIEF
2017-04-05 15:33:18 +02:00
PUBLIC "${LIEF_PUBLIC_INCLUDE_DIR}"
PRIVATE "${LIEF_PRIVATE_INCLUDE_DIR}")
2017-03-30 16:56:49 +02:00
2017-08-20 07:08:50 +02:00
if (LIEF_ENABLE_JSON)
add_dependencies(LIB_LIEF lief_libjson)
2017-08-20 07:08:50 +02:00
endif()
2017-03-30 16:56:49 +02:00
if (LIEF_LOGGING)
add_dependencies(LIB_LIEF lief_easyloggingpp)
endif()
2017-03-30 16:56:49 +02:00
if (LIEF_FROZEN_ENABLED)
add_dependencies(LIB_LIEF lief_frozen)
endif()
add_dependencies(LIB_LIEF lief_rang_cpp_color)
2017-03-30 16:56:49 +02:00
add_dependencies(LIB_LIEF lief_mbed_tls)
2017-03-30 16:56:49 +02:00
# Flags definition
# ----------------
set_property(TARGET LIB_LIEF PROPERTY CXX_STANDARD 11)
set_property(TARGET LIB_LIEF PROPERTY CXX_STANDARD_REQUIRED ON)
set_property(TARGET LIB_LIEF PROPERTY POSITION_INDEPENDENT_CODE ON)
2019-05-04 07:17:03 +02:00
set_property(TARGET LIB_LIEF PROPERTY CXX_VISIBILITY_PRESET hidden)
target_compile_definitions(LIB_LIEF PUBLIC -D_GLIBCXX_USE_CXX11_ABI=1)
2017-09-28 08:54:40 +02:00
2017-09-28 10:54:37 +02:00
# ASAN - LSAN - TSAN - USAN
2019-02-04 08:47:43 +01:00
# ~~~~~~~~~~~~~~~~~~~~~~~~~
2017-09-28 10:54:37 +02:00
set(SANITIZER_FLAGS -fno-omit-frame-pointer -g -O1)
2017-09-28 08:54:40 +02:00
if (LIEF_ASAN)
message(STATUS "Address sanitizer enabled")
list(APPEND SANITIZER_FLAGS -fsanitize=address)
set_property(TARGET LIB_LIEF APPEND PROPERTY LINK_FLAGS -fsanitize=address)
target_link_libraries(LIB_LIEF INTERFACE asan)
2017-09-28 08:54:40 +02:00
endif()
if (LIEF_LSAN)
message(STATUS "Leak sanitizer enabled")
list(APPEND SANITIZER_FLAGS -fsanitize=leak)
set_property(TARGET LIB_LIEF APPEND PROPERTY LINK_FLAGS -fsanitize=leak)
2017-09-28 10:54:37 +02:00
target_link_libraries(LIB_LIEF INTERFACE lsan)
2017-09-28 08:54:40 +02:00
endif()
if (LIEF_TSAN)
message(STATUS "Thread sanitizer enabled")
list(APPEND SANITIZER_FLAGS -fsanitize=thread)
set_property(TARGET LIB_LIEF APPEND PROPERTY LINK_FLAGS -fsanitize=thread)
2017-09-28 10:54:37 +02:00
target_link_libraries(LIB_LIEF INTERFACE tsan)
2017-09-28 08:54:40 +02:00
endif()
if (LIEF_USAN)
message(STATUS "Undefined sanitizer enabled")
list(APPEND SANITIZER_FLAGS -fsanitize=undefined)
set_property(TARGET LIB_LIEF APPEND PROPERTY LINK_FLAGS -fsanitize=undefined)
2017-09-28 10:54:37 +02:00
target_link_libraries(LIB_LIEF INTERFACE ubsan)
2017-09-28 08:54:40 +02:00
endif()
if (LIEF_ASAN OR LIEF_LSAN OR LIEF_TSAN OR LIEF_USAN)
#message(STATUS "${SANITIZER_FLAGS}")
target_compile_options(LIB_LIEF PRIVATE ${SANITIZER_FLAGS})
2017-09-28 08:54:40 +02:00
endif()
2017-03-30 16:56:49 +02:00
2017-09-28 10:54:37 +02:00
# Fuzzing
# ~~~~~~~
if (LIEF_FUZZING)
set_property(TARGET LIB_LIEF APPEND PROPERTY LINK_FLAGS ${FUZZING_LINKER_FLAGS})
2017-09-28 10:54:37 +02:00
target_compile_options(LIB_LIEF PRIVATE ${FUZZING_FLAGS})
2017-09-28 10:54:37 +02:00
target_link_libraries(LIB_LIEF asan pthread)
2017-09-28 10:54:37 +02:00
add_dependencies(LIB_LIEF lief_libfuzzer)
2017-09-28 10:54:37 +02:00
endif()
# Compile Flags
# =============
include(LIEFCompilerFlags)
2017-03-30 16:56:49 +02:00
2018-03-28 07:29:05 +02:00
# Profiling flags
# ---------------
if (LIEF_PROFILING)
set(PROFILING_FLAGS
-fno-builtin-malloc
-fno-builtin-calloc
-fno-builtin-realloc
-fno-builtin-free
-fno-omit-frame-pointer
-g
)
target_compile_options(LIB_LIEF PUBLIC ${PROFILING_FLAGS})
2018-03-28 07:29:05 +02:00
add_executable(elf_profiler profiling/elf_profiler.cpp)
target_compile_options(elf_profiler PUBLIC ${PROFILING_FLAGS})
target_link_libraries(elf_profiler PRIVATE LIB_LIEF)
2018-03-28 07:29:05 +02:00
endif()
# Coverage flags
# --------------
2017-03-30 16:56:49 +02:00
if(LIEF_COVERAGE)
target_compile_options(LIB_LIEF PRIVATE -g -O0 --coverage -fprofile-arcs -ftest-coverage)
target_link_libraries(LIB_LIEF gcov)
2017-03-30 16:56:49 +02:00
endif()
find_package(cppcheck)
set_target_properties(
LIB_LIEF
2017-03-30 16:56:49 +02:00
PROPERTIES OUTPUT_NAME LIEF
CLEAN_DIRECT_OUTPUT 1)
# Set a default build type if none was specified
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
message(STATUS "Setting build type to 'Release' as none was specified.")
set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE)
# Set the possible values of build type for cmake-gui
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release"
"MinSizeRel" "RelWithDebInfo")
endif()
message(STATUS "Configuration Types: ${CMAKE_CONFIGURATION_TYPES}")
message(STATUS "Build Types: ${CMAKE_BUILD_TYPE}")
if(APPLE)
set_target_properties(LIB_LIEF PROPERTIES MACOSX_RPATH ".")
2017-03-30 16:56:49 +02:00
endif()
# API
# ===
include(LIEFApi)
2017-03-30 16:56:49 +02:00
# Examples
# ========
if(LIEF_EXAMPLES)
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/examples")
2017-03-30 16:56:49 +02:00
endif()
# Tests
# =====
if(LIEF_TESTS)
enable_testing()
2017-04-05 15:33:18 +02:00
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/tests")
2017-03-30 16:56:49 +02:00
endif()
# CPP Check
# =========
set(CPPCHECK_TEMPLATE_ARG "[{severity}][{id}] {message} {callstack} \(On {file}:{line}\)")
set(_cppcheck_args "--enable=warning,performance,portability,information")
#add_cppcheck(LIB_LIEF FORCE)
2017-03-30 16:56:49 +02:00
# Documentation
# =============
if (LIEF_DOC)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/doc)
endif()
# Install Prefix
# ==============
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND UNIX)
if (UNIX AND NOT APPLE)
set(CMAKE_INSTALL_PREFIX "/usr" CACHE PATH "Install path prefix prepended on to install directories." FORCE)
elseif (APPLE)
set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "" FORCE)
endif()
endif()
# Installation
# ============
install(TARGETS LIB_LIEF
2017-03-30 16:56:49 +02:00
ARCHIVE
DESTINATION lib
LIBRARY
DESTINATION lib
RUNTIME
DESTINATION lib
2017-03-30 16:56:49 +02:00
COMPONENT libraries)
install(
DIRECTORY ${LIEF_PUBLIC_INCLUDE_DIR}
DESTINATION include
COMPONENT headers
FILES_MATCHING REGEX "(.*).(hpp|h|def)$")
install(
FILES ${CMAKE_CURRENT_SOURCE_DIR}/scripts/FindLIEF.cmake
DESTINATION share/LIEF/cmake
COMPONENT CMakeScripts
)
2019-02-18 17:23:33 +01:00
export(
TARGETS
LIB_LIEF
FILE
LIEFExport.cmake)
2017-03-30 16:56:49 +02:00
# Package
2017-04-05 15:33:18 +02:00
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/package")