cmake_minimum_required(VERSION 3.16) set(PROJNAME encoder) include(config.cmake) include(FetchContent) project(${PROJNAME}) set(ARCH arm) if (USING_HISIMPP5) add_compile_definitions( -DUSING_HISIMPP5 ) endif() add_compile_definitions( -DFIRMWARE_UPGRADE_FROM_BACKUP_PARTITION ) execute_process( COMMAND git log -1 --format=%h WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE GIT_COMMIT_HASH OUTPUT_STRIP_TRAILING_WHITESPACE ) add_compile_definitions(-DGIT_COMMIT_HASH=\"${GIT_COMMIT_HASH}\") # 未定义或为空 if (NOT DEFINED CMAKE_BUILD_TYPE OR NOT CMAKE_BUILD_TYPE) set (CMAKE_BUILD_TYPE Debug) endif() message("Project \"${GIT_COMMIT_HASH}\" build type: " ${CMAKE_BUILD_TYPE}) if (CMAKE_BUILD_TYPE MATCHES Debug) add_compile_definitions(-DDEBUG) endif() if (CMAKE_SYSTEM_NAME MATCHES "Linux") set(Poco_DIR $ENV{POCO_PATH}/lib/cmake/Poco) link_libraries( pthread dl m atomic ) if (CMAKE_BUILD_TYPE MATCHES Debug) # 定义Debug编译参数 SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -Og -Wall -g3 -Wno-psabi -std=c++1z -mfpu=neon -mfloat-abi=softfp") # GDB调试 # SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -Og -Wall -g3 -Wno-psabi -std=c++1z -mfpu=neon -mfloat-abi=softfp -fsanitize=address -fno-eliminate-unused-debug-types -fno-omit-frame-pointer") # 内存检测 # SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -Wno-psabi") # SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -Wno-psabi -rdynamic -funwind-tables -ffunction-sections") # 可以在应用里捕获SIGSEGV信号,然后用backtrace()函数把堆栈信息打印出来 else() # 定义Release编译参数 SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall -Wno-psabi -mfpu=neon -mfloat-abi=softfp") endif() add_compile_definitions(-DOS_LINUX) elseif (CMAKE_SYSTEM_NAME MATCHES "Windows") set(Poco_DIR $ENV{POCO_PATH}/cmake) # 强制Visual Studio使用UTF-8编码 add_compile_options("$<$:/utf-8>") add_compile_options("$<$:/utf-8>") # 忽略部分警告 add_compile_definitions(/wd"4828") # 使用Unicode字符集 add_compile_definitions(-DUNICODE -D_UNICODE) if (USING_LVGL_PLATFORM OR USING_SOUI_PLATFORM) # 设置为窗口程序 set(GUI_EXECUTABLE WIN32) add_compile_definitions(-DWINDOWS_GUI_APPLICATION) endif() link_directories($ENV{POCO_PATH}/lib) endif() find_package(Poco REQUIRED COMPONENTS Foundation Net XML Encodings Util Zip Crypto) include_directories( . ${Poco_LIBRARIES} $ENV{JSONC_PATH}/include $ENV{CRYPTOAUTHLIB_PATH}/include/cryptoauthlib $ENV{OPENSSL_PATH}/include $ENV{PAHO_MQTTC_PATH}/include ) link_libraries( ${Poco_LIBRARIES} $ENV{CRYPTOAUTHLIB_PATH}/lib/libcryptoauth.a $ENV{OPENSSL_PATH}/lib/libssl.a $ENV{OPENSSL_PATH}/lib/libcrypto.a #$ENV{PAHO_MQTTC_PATH}/lib/libpaho-mqtt3a.a #$ENV{PAHO_MQTTC_PATH}/lib/libpaho-mqtt3as.a $ENV{PAHO_MQTTC_PATH}/lib/libpaho-mqtt3c.a #$ENV{PAHO_MQTTC_PATH}/lib/libpaho-mqtt3cs.a ) if (USING_HISIMPP5) include_directories( $ENV{MPP_PATH}/include ) link_libraries( $ENV{MPP_PATH}/lib/libmpi.a $ENV{MPP_PATH}/lib/libdnvqe.a $ENV{MPP_PATH}/lib/libupvqe.a $ENV{MPP_PATH}/lib/libvqe_res.a $ENV{MPP_PATH}/lib/libVoiceEngine.a $ENV{MPP_PATH}/lib/libsecurec.so $ENV{MPP_PATH}/lib/libhdmi.a $ENV{MPP_PATH}/lib/libtde.a ) endif() aux_source_directory(. MAIN_SOURCES) add_executable(${PROJNAME} ${GUI_EXECUTABLE} ${MAIN_SOURCES}) # target_compile_options(${PROJNAME} PRIVATE # -fsanitize=address,undefined # -fsanitize=float-divide-by-zero # -fsanitize=null # -fsanitize=bounds-strict # ) # target_link_options(${PROJNAME} PRIVATE # -fsanitize=address,undefined # ) if (CMAKE_SYSTEM_NAME MATCHES "Windows") SET_PROPERTY (DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ${PROJNAME} ) endif() if (USING_VIDEO_SUBSYSTEM) add_compile_definitions(-DUSING_VIDEO_SUBSYSTEM) endif() # 网络 if (USING_NETWORK_SUBSYSTEM) add_compile_definitions(-DUSING_NETWORK_SUBSYSTEM) endif() # 板级设备 if (USING_HARDWARE_SUBSYSTEM) add_compile_definitions(-DUSING_HARDWARE_SUBSYSTEM) endif() if (USING_VIDEO_SUBSYSTEM) include(video/video.cmake) endif() # 网络 if (USING_NETWORK_SUBSYSTEM) include(network/network.cmake) endif() # 板级设备 if (USING_HARDWARE_SUBSYSTEM) include(hardware/hardware.cmake) endif() # Util include(util/util.cmake)