﻿#设置CMake支持的最低版本
cmake_minimum_required(VERSION 3.5)
project(ZAlgo)

# OpenCV版本选择：320 或 480
# 使用方法：cmake -DOPENCV_VERSION=320 .. 或 cmake -DOPENCV_VERSION=480 ..
set(OPENCV_VERSION "320" CACHE STRING "OpenCV版本选择: 320 或 480")
set_property(CACHE OPENCV_VERSION PROPERTY STRINGS "320" "480")

set(DCMAKE_BUILD_SYSNAME Arm)
set(CMAKE_BUILD_ARCH aarch64)

set(CMAKE_C_COMPILER "aarch64-linux-gnu-gcc")
set(CMAKE_CXX_COMPILER "aarch64-linux-gnu-g++")

ADD_DEFINITIONS("-fPIC -O3")
ADD_DEFINITIONS("-fexceptions")
ADD_DEFINITIONS("-Wl,-Bsymbolic -lc -lm -Wunused-result")

SET(CMAKE_CXX_FLAGS "-fvisibility=hidden -fpermissive -std=c++14 -fno-use-cxa-atexit")

#out path configure_file
#设置库路径
SET(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/build/aarch64)
SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/build/aarch64/bin)

INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../thirdParty/VzNLSDK/Inc)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../thirdParty/eigen3)

# 根据OPENCV_VERSION选择不同的OpenCV路径
if(OPENCV_VERSION STREQUAL "320")
    message(STATUS "使用 OpenCV 3.2.0")
    INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../thirdParty/OpenCV320/include)
    add_definitions(-DOPENCV_VERSION_320)
elseif(OPENCV_VERSION STREQUAL "480")
    message(STATUS "使用 OpenCV 4.8.0")
    INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../thirdParty/opencv480/include)
    add_definitions(-DOPENCV_VERSION_480)
else()
    message(FATAL_ERROR "不支持的OpenCV版本: ${OPENCV_VERSION}，请使用 320 或 480")
endif()

INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/sourceCode/inc)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/sourceCode)

ADD_DEFINITIONS(-DSG_API_LIBRARY)

if(OPENCV_VERSION STREQUAL "320")
	ADD_LIBRARY(baseAlgorithm SHARED 	sourceCode/dataFitting.cpp
						sourceCode/SG_baseFunc.cpp
						sourceCode/SG_clustering.cpp
						sourceCode/SG_featureGrow.cpp
						sourceCode/SG_lineFeature.cpp
						sourceCode/SG_regionGrow.cpp
						sourceCode/WD_noiseFilter.cpp
						sourceCode/WD_watershed.cpp
						)

	ADD_LIBRARY(bagPositioning SHARED sourceCode/SG_bagPositioning.cpp)

	ADD_LIBRARY(lapWeldDetection SHARED sourceCode/SX_lapWeldDetection.cpp)

	ADD_LIBRARY(beltTearingDetection SHARED sourceCode/beltTearingDetection.cpp)

	# ADD_LIBRARY(workpieceCornerExtraction SHARED sourceCode/BQ_workpieceCornerExtraction.cpp)

	ADD_LIBRARY(particleSizeMeasurement SHARED sourceCode/WD_particleSizeMeasure.cpp)

	ADD_LIBRARY(wheelArchHeigthMeasure SHARED sourceCode/wheelArchHeigthMeasure.cpp)

	ADD_LIBRARY(channelSpaceMeasure SHARED sourceCode/channelSpaceMeasure.cpp)
	
	ADD_LIBRARY(rodAndBarDetection SHARED sourceCode/rodAndBarDetection.cpp)
	
	ADD_LIBRARY(bagThreadPositioning SHARED sourceCode/bagThreadPositioning.cpp)
	
	ADD_LIBRARY(workpieceHolePositioning SHARED sourceCode/workpieceHolePositioning.cpp)
	
	# ADD_LIBRARY(motorStatorPosition SHARED sourceCode/motorStatorPosition.cpp)

elseif(OPENCV_VERSION STREQUAL "480")
	ADD_LIBRARY(binocularMarkCam SHARED sourceCode/binocularMarkCam.cpp
										sourceCode/aruco/aruco.cpp
										sourceCode/aruco/aruco_calib.cpp
										)
else()
    message(FATAL_ERROR "不支持的OpenCV版本: ${OPENCV_VERSION}，请使用 320 或 480")
endif()
