cmake_minimum_required(VERSION 2.8...3.5) if(MSVC OR CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /utf-8") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8") add_compile_options(/utf-8) endif() if(CMAKE_SYSTEM_NAME STREQUAL "OHOS") message(WARNING "当前构建系统为 OpenHarmony") set(OS_OHOS ON PARENT_SCOPE) else() set(OS_OHOS OFF PARENT_SCOPE) endif() if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm|ARM|Armv[0-9]+") message(STATUS "Target architecture is ARM") message(STATUS "目标架构是 ${CMAKE_SYSTEM_PROCESSOR}") set(ARCH_ARM ON) if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch64|ARM64") set(ARM64 ON PARENT_SCOPE) elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm|ARM") set(ARM32 ON PARENT_SCOPE) endif () elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i386|i686|x86_64|amd64|AMD64") message(STATUS "Target architecture is x86/x86_64") message(STATUS "目标架构是 x86/x86_64") set(ARCH_X86 ON PARENT_SCOPE) else() message(WARNING "Unknown architecture: ${CMAKE_SYSTEM_PROCESSOR}") endif() set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(ENABLE_INSTALL_RULES OFF CACHE BOOL "Disable install rules for cppp-reiconv") add_subdirectory(Environment/cppp-reiconv) add_subdirectory(Environment/filesystem) add_subdirectory(Environment/mirrors_nlohmann_json) if( WIN32 AND NOT CYGWIN ) add_definitions( -DOPENSSL_SYSNAME_WIN32 ) add_definitions( -DWIN32_LEAN_AND_MEAN ) add_definitions( -D_CRT_SECURE_NO_WARNINGS ) # Fix for DEFINE_STACK_OF macro conflicts with Windows headers add_definitions( -DNDEBUG ) if(BUILD_SHARED_LIBS) # avoid conflict: ocsp.h and wincrypt.h add_definitions( -D_WINDLL ) endif() endif() add_subdirectory(Environment/openssl-cmake) option(W_T_L_Arm "Window_To_Linux_Arm" OFF) if (W_T_L_Arm) message(WARNING "Currently, it is cross-compiled for the Windows platform and the Linux platform for the Arm architecture") endif () option(SerialPort "CC_SerialPort_OAF" OFF) if (SerialPort) message(STATUS "CSerialPort ON") add_subdirectory(Environment/CSerialPort) set(SerialPort_STATIC src/Module/Comm/CCSerialPort.cpp ) endif () option(AUDIO_IO "CC_Audio_IO_OAF" OFF) if (AUDIO_IO) message(STATUS "AUDIO_IO ON") set(AUDIO_IO_STATIC src/Module/Multimedia/CCAudioIO.cpp ) endif () option(PORTAUDIO "CC_PORTAUDIO_OAF" OFF) if (PORTAUDIO) message(STATUS "PORTAUDIO ON") add_subdirectory(Environment/portaudio) set(portaudio_STATIC src/Module/Multimedia/CCAudio.cpp ) endif () option(FFMPEG "CC_FFMPEG_OAF" OFF) if (FFMPEG) message(STATUS "FFMPEG ON") add_subdirectory(Environment/FFmpeg) endif () option(SDL2 "CC_SDL2_OAF" OFF) if (SDL2) message(STATUS "SDL2 ON") add_subdirectory(Environment/SDL2) include_directories(${CMAKE_CURRENT_LIST_DIR}/Environment/SDL2/include) endif () option(LIBRTC "CC_LIBRTC_OAF" OFF) if(LIBRTC) add_subdirectory(Environment/libdatachannel) endif() option(LIBJUICE "CC_LIBJUICE_OAF" OFF) if(LIBJUICE) if (NOT LIBRTC) add_subdirectory(Environment/libjuice) endif () endif() option(IMGUI "CC_ImGui_OAF" OFF) if (IMGUI) message(STATUS "IMGUI ON") set(IMGUI_SOURCES src/Module/Window/ImGui/imgui.cpp src/Module/Window/ImGui/imgui_draw.cpp src/Module/Window/ImGui/imgui_impl_glfw.cpp src/Module/Window/ImGui/imgui_impl_opengl3.cpp src/Module/Window/ImGui/imgui_impl_win32.cpp src/Module/Window/ImGui/imgui_tables.cpp src/Module/Window/ImGui/imgui_widgets.cpp src/Module/Window/CWidget.cpp src/Module/Window/CApplication.cpp src/Module/Window/Control/Button.cpp src/Module/Window/Control/Combox.cpp src/Module/Window/Control/Comboxs.cpp src/Module/Window/Control/Image.cpp src/Module/Window/Control/ImageButton.cpp src/Module/Window/Control/Label.cpp src/Module/Window/Control/Panel.cpp src/Module/Window/Control/SliderBar.cpp src/Module/Window/Control/SwitchBool.cpp src/Module/Window/Control/TextBox.cpp src/Module/Window/Drive/Drive.cpp ) endif () option(GLFW "CC_GLFW_OAF" OFF) if (GLFW) message(STATUS "GLFW ON") add_subdirectory(Environment/glfw) endif () option(MYSQL "CC_MYSQL" OFF) if (MYSQL) message(STATUS "CC_MYSQL ON") add_subdirectory(Environment/MySql) endif () option(RTSP "CC_RTSP" OFF) if (RTSP) add_subdirectory(Environment/jrtplib) message(STATUS "CC_RTSP ON") set(CC_RTSP_Module src/Module/Comm/RTSP/CCRTSPServer.cpp ) endif () add_subdirectory(Environment/zlib) set(MINIZIP_SOURCES Environment/zlib/contrib/minizip/ioapi.c Environment/zlib/contrib/minizip/iowin32.c Environment/zlib/contrib/minizip/unzip.c Environment/zlib/contrib/minizip/zip.c ) add_library(minizip STATIC ${MINIZIP_SOURCES}) target_include_directories(minizip PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/Environment/zlib ${CMAKE_CURRENT_SOURCE_DIR}/Environment/zlib/contrib/minizip ) target_link_libraries(minizip zlib) set(INC_DIR ${CMAKE_CURRENT_LIST_DIR}/Include) set(LINK_DIR ${CMAKE_CURRENT_LIST_DIR}/Lib) set(LINK_DLL_DIR ${CMAKE_CURRENT_LIST_DIR}/Bin) set(LIB_WX_D ${CMAKE_CURRENT_LIST_DIR}/Lib/wx/libwxmsw32ud.a) set(LIB_WX_R ${CMAKE_CURRENT_LIST_DIR}/Lib/wx/libwxmsw32u.a) set(CC_API_INC ${CMAKE_CURRENT_LIST_DIR}/Include ${CMAKE_CURRENT_LIST_DIR}/Include/basic ${CMAKE_CURRENT_LIST_DIR}/Environment/mirrors_nlohmann_json/include ${CMAKE_CURRENT_LIST_DIR}/Environment/mirrors_nlohmann_json/include/nlohmann ${CMAKE_CURRENT_LIST_DIR}/Include/CCServlet/SQL ${CMAKE_CURRENT_LIST_DIR}/Include/Module ${CMAKE_CURRENT_LIST_DIR}/Include/Module/File ${CMAKE_CURRENT_LIST_DIR}/Include/Module/Comm ${CMAKE_CURRENT_LIST_DIR}/Include/Module/Data ${CMAKE_CURRENT_LIST_DIR}/Include/Module/IO ${CMAKE_CURRENT_LIST_DIR}/Include/CCServlet ${CMAKE_CURRENT_LIST_DIR}/Environment/ImGUI/IMUI/WindowOS ${CMAKE_CURRENT_LIST_DIR}/Environment/ImGUI/glfw/include ${CMAKE_CURRENT_LIST_DIR}/Environment/mysql-9.0.1/include # ${CMAKE_CURRENT_LIST_DIR}/Environment/openssl-cmake/env # ${CMAKE_CURRENT_LIST_DIR}/Environment/openssl-cmake/env/openssl ${CMAKE_CURRENT_LIST_DIR}/Environment/openssl-cmake/include ${CMAKE_CURRENT_LIST_DIR}/Environment/openssl-cmake/include/openssl ${CMAKE_CURRENT_LIST_DIR}/Environment/filesystem/include ${CMAKE_CURRENT_LIST_DIR}/Include/Module/Comm/WebSocket ${CMAKE_CURRENT_LIST_DIR}/Include/Module/Window ${CMAKE_CURRENT_LIST_DIR}/Include/Module/Window/Control ${CMAKE_CURRENT_LIST_DIR}/Include/Module/Window/Drive ${CMAKE_CURRENT_LIST_DIR}/Include/Module/Window/ImGui ${CMAKE_CURRENT_LIST_DIR}/Include/Module/Comm/Socket ) if (AUDIO_IO) list(APPEND CC_API_INC ${CMAKE_CURRENT_LIST_DIR}/Include/Module/Multimedia ) endif () if (PORTAUDIO) list(APPEND CC_API_INC ${CMAKE_CURRENT_LIST_DIR}/Include/Module/Multimedia ${CMAKE_CURRENT_LIST_DIR}/Include/Multimedia ${CMAKE_CURRENT_LIST_DIR}/Environment/portaudio/include ) endif () if (SerialPort) list(APPEND CC_API_INC ${CMAKE_CURRENT_LIST_DIR}/Environment/CSerialPort/include) endif () if (FFMPEG) list(APPEND CC_API_INC ${CC_FFMPEG_INC}) endif () if (SDL2) list(APPEND CC_API_INC ${CMAKE_CURRENT_LIST_DIR}/Environment/SDL2/include) endif () if (LIBRTC) list(APPEND CC_API_INC ${CMAKE_CURRENT_LIST_DIR}/Environment/libdatachannel/include) list(APPEND CC_API_INC ${CMAKE_CURRENT_LIST_DIR}/Include/Module/Comm/WebRTC) set(LIBRTC_STATIC src/Module/Comm/WebRTC/CCWebRTC.cpp) endif () if (LIBJUICE) if (NOT LIBRTC) list(APPEND CC_API_INC ${CMAKE_CURRENT_LIST_DIR}/Environment/libjuice/include) endif () set(CC_DataChannel src/Module/Comm/DataChannel/RTCPeerConnection.cpp ) endif () if (GLFW) list(APPEND CC_API_INC ${CMAKE_CURRENT_LIST_DIR}/Environment/glfw/include) endif () if (IMGUI) endif () if (MYSQL) list(APPEND CC_API_INC ${CC_MySql_INC}) list(APPEND CC_API_INC Include/Environment/mysql) set(MYSQL_Module Include/Environment/mysql/CCMySql.cpp ) endif () if (RTSP) list(APPEND CC_API_INC ${J_RTP_LIB_INC} ${JThread_INC}) endif () list(APPEND CC_API_INC ${CMAKE_CURRENT_LIST_DIR}/Environment/zlib/contrib/minizip) list(APPEND CC_API_INC ${CMAKE_CURRENT_LIST_DIR}/Environment/zlib/contrib) list(APPEND CC_API_INC ${CMAKE_CURRENT_LIST_DIR}/Environment/zlib) list(APPEND CC_API_INC ${CMAKE_BINARY_DIR}/CC_SDK/Environment/zlib) #list(APPEND CC_API_INC ${CMAKE_CURRENT_LIST_DIR}/Environment/zlib/include) list(APPEND CC_API_INC ${CMAKE_CURRENT_LIST_DIR}/Include/Environment/zlib) set(ZLIB_Module Include/Environment/zlib/CCZip.cpp Include/Environment/zlib/CCDataFormat.cpp Include/Module/Window/Control/Icon.h Include/Environment/zlib/CCGZip.cpp Include/Environment/zlib/CCGZip.h ) add_library(CC_API STATIC Include/basic/CCEncode.h Include/basic/CCByteArray.h Include/basic/CCString.h src/basic/CCObject.cpp src/basic/CCEncode.cpp src/basic/CCByteArray.cpp src/basic/CCString.cpp src/Module/File/CCFIleInStream.cpp src/Module/File/CCFileOutStream.cpp src/Module/Comm/Socket/CCSocket.cpp src/Module/Data/CCJSONObject.cpp src/Module/IO/CCThread.cpp src/Module/IO/CCProcess.cpp src/Module/IO/CCThreadPool.cpp src/Module/IO/CCTimeData.cpp src/Module/Comm/CCEpoll.cpp src/CCServlet/CCRequest.cpp src/CCServlet/CCResponse.cpp src/CCServlet/CCSQLite3.cpp src/CCServlet/CCWebServlet.cpp src/CCServlet/CCHttpClient.cpp src/CCServlet/CCHttpResolver.cpp src/Sys/wepoll.c src/Sys/sqlite3.c Include/Sys/sqlite3.h Include/Sys/sqlite3ext.h Include/basic/CCObject.h Include/basic/CC.h Include/CCAPI.h Include/basic/CCByte.h Include/basic/CCVector.h Include/basic/CCMap.h Include/basic/CCList.h Include/basic/CCQueue.h Include/basic/CCArray.h Include/Module/Comm/CCNetwork.h src/Module/Comm/CCNetwork.cpp Include/Module/File/CCFile.h src/Module/File/CCFile.cpp Include/basic/CCFunction.h Include/basic/CCAutoLock.h Include/basic/CCArrayList.h Include/basic/CCLinkedMap.h Include/basic/CCAllocator.h src/Module/Comm/WebSocket/base64.cpp src/Module/Comm/WebSocket/sha1_portable.cpp src/Module/Comm/WebSocket/string_helper.cpp src/Module/Comm/WebSocket/ws_endpoint.cpp src/Module/Comm/WebSocket/ws_packet.cpp Include/Module/Comm/WebSocket/CCWebSocket.h src/Module/Comm/WebSocket/CCWebSocket.cpp Environment/openssl-cmake/env/openssl/applink.h src/Module/Window/CCApplication.cpp Include/basic/ConcurrentQueue.h Include/basic/ConcurrentMap.h Include/basic/ConcurrentLinkedList.h src/basic/CCTimer.cpp src/Module/File/CCLogger.cpp ${LIBRTC_STATIC} src/DataModule/NetSqlite.cpp Include/DataModule/NetSqlite.h Include/Module/Window/CCSystem.h src/Module/Window/CCSystem.cpp Include/basic/StreamHandler.h Include/Multimedia/CCMiniMP3.cpp Include/Multimedia/CCMiniMP3.h ${ZLIB_Module} ${SerialPort_STATIC} ${portaudio_STATIC} ${IMGUI_SOURCES} Include/TL/Array_CTL.h Include/TL/Map_CTL.h ${AUDIO_IO_STATIC} src/Module/Comm/Socket/CCDatagramSocket.cpp src/Module/Comm/Socket/CCServerSocket.cpp src/Module/Comm/Socket/CCClientSocket.cpp ${CC_DataChannel} src/Module/Comm/OpenSSL/CCSSL.cpp src/CCServlet/HttpSocketChannel.cpp src/Module/IO/EventLoop.cpp Include/Module/IO/EventLoop.h src/basic/CCMemoryPool.cpp Include/basic/CCMemoryPool.h src/Module/Data/Persistent.cpp Include/Module/Data/Persistent.h src/basic/CCClassFactory.cpp Include/basic/CCClassFactory.h src/basic/CCClassRegister.cpp ${MYSQL_Module} ${CC_RTSP_Module} src/Module/Data/JSON/JSONObject.cpp src/Module/Data/JSON/Parser.cpp src/basic/CC.cpp ) target_include_directories(CC_API PUBLIC ${CC_API_INC} ) if(${OS_OHOS}) target_link_libraries(CC_API PUBLIC libhilog_ndk.z.so) endif() if(CMAKE_HOST_UNIX) target_link_libraries(CC_API PUBLIC nlohmann_json libcppp-reiconv.static crypto ssl ) if (AUDIO_IO) target_link_libraries(CC_API PUBLIC asound) endif () elseif(CMAKE_HOST_WIN32) target_link_libraries(CC_API PUBLIC nlohmann_json libcppp-reiconv.static crypto ssl ) if (NOT CMAKE_SYSTEM_NAME STREQUAL "OHOS" AND NOT W_T_L_Arm) target_link_libraries(CC_API PUBLIC shlwapi shell32 Pdh iphlpapi winmm mswsock) endif () add_compile_definitions(UNICODE _UNICODE) # 强制使用Unicode else() endif() if (PORTAUDIO) target_link_libraries(CC_API PUBLIC PortAudio) endif () if (SerialPort) target_link_libraries(CC_API PUBLIC libcserialport) endif () if (FFMPEG) target_link_libraries(CC_API PUBLIC CC_FFmpeg_API) endif () if (SDL2) target_link_libraries(CC_API PUBLIC SDL2::SDL2 SDL2main ) endif () if (LIBRTC) target_link_libraries(CC_API PUBLIC datachannel) endif () if (LIBJUICE) if (NOT LIBRTC) target_link_libraries(CC_API PUBLIC LibJuice::LibJuiceStatic) endif () add_definitions(-DLIBJUICE_INC) target_compile_definitions(CC_API PUBLIC LIBJUICE_INC) endif () if (GLFW) target_link_libraries(CC_API PUBLIC glfw) endif () if (MYSQL) target_link_libraries(CC_API PUBLIC CC_MySql_API) # if (CMAKE_HOST_WIN32) # target_compile_definitions(CC_API PRIVATE _WINSOCKAPI_) # endif () target_compile_definitions(CC_API PRIVATE MY_SQL_BOOL) endif () if (IMGUI) if(CMAKE_HOST_UNIX) target_link_libraries(CC_API PUBLIC GL glfw X11) elseif(CMAKE_HOST_WIN32) target_link_libraries(CC_API PUBLIC opengl32 dwmapi glfw) else() endif () endif () if (RTSP) target_link_libraries(CC_API PUBLIC jrtplib-static) endif () target_link_libraries(CC_API PUBLIC zlib minizip ghcFilesystem::ghc_filesystem)