cmake_minimum_required(VERSION 3.0...3.5) 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 "目标架构是 ARM") 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/mirrors_nlohmann_json) if (CMAKE_SYSTEM_NAME STREQUAL "OHOS") add_subdirectory(Environment/openssl) #elseif (WIN32) # add_subdirectory(Environment/openssl) else () add_subdirectory(Environment/openssl-cmake) 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(OPENCV "CC_OPENCV_OAF" OFF) if (OPENCV) message(STATUS "OPENCV ON") add_subdirectory(Environment/opencv) 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(ZLIB "CC_ZLIB_OAF" ON) if (ZLIB) 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) endif () 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}/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 (CMAKE_SYSTEM_NAME STREQUAL "OHOS") list(APPEND CC_API_INC ${CC_OPENSSL_INC} ) else () list(APPEND CC_API_INC # ${CMAKE_CURRENT_LIST_DIR}/Environment/openssl-cmake/include/openssl # ${CMAKE_CURRENT_LIST_DIR}/Environment/openssl-cmake/include ${CMAKE_CURRENT_LIST_DIR}/Include/CCServlet/Env/openssl ${CMAKE_CURRENT_LIST_DIR}/Include/CCServlet/Env ) endif () 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 (OPENCV) list(APPEND CC_API_INC Environment/opencv/BuildInclude) 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 (ZLIB) 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 ) endif () option(APIS "APIS" ON) if (APIS) 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 src/Module/Comm/WebSocket/CCWebSocket.cpp Include/CCServlet/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/IO/EventLoop.cpp src/CCServlet/HttpSocketChannel.cpp src/Module/Comm/OpenSSL/CCSSL.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.shared 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.shared crypto ssl ) if (NOT CMAKE_SYSTEM_NAME STREQUAL "OHOS") target_link_libraries(CC_API PUBLIC shlwapi shell32 Pdh iphlpapi winmm) 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 (OPENCV) target_link_libraries(CC_API PUBLIC opencv_calib3d opencv_core opencv_dnn opencv_features2d opencv_flann opencv_gapi opencv_highgui opencv_imgcodecs opencv_imgproc opencv_ml opencv_objdetect opencv_photo opencv_stitching opencv_video opencv_videoio ) 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 (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 (ZLIB) target_link_libraries(CC_API PUBLIC zlib minizip) endif () endif(APIS)