1*abb65b4bSAndroid Build Coastguard Workerset( LIB_NAME_BASE oapv ) 2*abb65b4bSAndroid Build Coastguard Worker 3*abb65b4bSAndroid Build Coastguard Workerset( LIB_SOVERSION 1) 4*abb65b4bSAndroid Build Coastguard Worker 5*abb65b4bSAndroid Build Coastguard Workerfile (GLOB LIB_INC "../inc/*.h") 6*abb65b4bSAndroid Build Coastguard Workerfile (GLOB LIB_API_SRC "oapv.c") 7*abb65b4bSAndroid Build Coastguard Workerfile (GLOB LIB_BASE_SRC "oapv_*.c") 8*abb65b4bSAndroid Build Coastguard Workerfile (GLOB LIB_BASE_INC "oapv_*.h" ) 9*abb65b4bSAndroid Build Coastguard Workerfile (GLOB LIB_SSE_SRC "../src/sse/oapv_*.c") 10*abb65b4bSAndroid Build Coastguard Workerfile (GLOB LIB_SSE_INC "../src/sse/oapv_*.h" ) 11*abb65b4bSAndroid Build Coastguard Workerfile (GLOB LIB_NEON_SRC "../src/neon/oapv_*.c") 12*abb65b4bSAndroid Build Coastguard Workerfile (GLOB LIB_NEON_INC "../src/neon/oapv_*.h" ) 13*abb65b4bSAndroid Build Coastguard Workerfile (GLOB LIB_AVX_SRC "../src/avx/oapv_*.c") 14*abb65b4bSAndroid Build Coastguard Workerfile (GLOB LIB_AVX_INC "../src/avx/oapv_*.h" ) 15*abb65b4bSAndroid Build Coastguard Worker 16*abb65b4bSAndroid Build Coastguard Workerinclude(GenerateExportHeader) 17*abb65b4bSAndroid Build Coastguard Workerinclude_directories("${CMAKE_BINARY_DIR}/include") 18*abb65b4bSAndroid Build Coastguard Worker 19*abb65b4bSAndroid Build Coastguard Workermessage("SYSTEM_PROCESSOR=${CMAKE_SYSTEM_PROCESSOR}") 20*abb65b4bSAndroid Build Coastguard Worker 21*abb65b4bSAndroid Build Coastguard Workerif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^(arm|aarch)") 22*abb65b4bSAndroid Build Coastguard Worker message(" ARM processor") 23*abb65b4bSAndroid Build Coastguard Worker # add_definitions (-mfloat-abi=softfp -mfpu=neon) 24*abb65b4bSAndroid Build Coastguard Worker add_definitions(-DARM=1) 25*abb65b4bSAndroid Build Coastguard Worker set(ARM "TRUE") 26*abb65b4bSAndroid Build Coastguard Workerelseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^(x86|ia64|i386|i686)") 27*abb65b4bSAndroid Build Coastguard Worker message(" X86 processor") 28*abb65b4bSAndroid Build Coastguard Worker add_definitions(-DX86=1) 29*abb65b4bSAndroid Build Coastguard Worker set(X86 "TRUE") 30*abb65b4bSAndroid Build Coastguard Workerendif() 31*abb65b4bSAndroid Build Coastguard Worker 32*abb65b4bSAndroid Build Coastguard Workerif( ${CMAKE_SYSTEM_PROCESSOR} MATCHES "64" ) 33*abb65b4bSAndroid Build Coastguard Worker message(" 64-bit") 34*abb65b4bSAndroid Build Coastguard Worker add_compile_definitions( _IS64BIT) 35*abb65b4bSAndroid Build Coastguard Workerendif() 36*abb65b4bSAndroid Build Coastguard Worker 37*abb65b4bSAndroid Build Coastguard Workerif(ARM) 38*abb65b4bSAndroid Build Coastguard Worker add_library( ${LIB_NAME_BASE} STATIC ${LIB_API_SRC} ${LIB_INC} ${LIB_BASE_SRC} ${LIB_BASE_INC} 39*abb65b4bSAndroid Build Coastguard Worker ${LIB_NEON_SRC} ${LIB_NEON_INC} ) 40*abb65b4bSAndroid Build Coastguard Worker add_library( ${LIB_NAME_BASE}_dynamic SHARED ${LIB_API_SRC} ${LIB_INC} ${LIB_BASE_SRC} ${LIB_BASE_INC} 41*abb65b4bSAndroid Build Coastguard Worker ${LIB_NEON_SRC} ${LIB_NEON_INC} ) 42*abb65b4bSAndroid Build Coastguard Workerelse() 43*abb65b4bSAndroid Build Coastguard Worker add_library( ${LIB_NAME_BASE} STATIC ${LIB_API_SRC} ${LIB_INC} ${LIB_BASE_SRC} ${LIB_BASE_INC} ${LIB_SSE_SRC} ${LIB_SSE_INC} 44*abb65b4bSAndroid Build Coastguard Worker ${LIB_AVX_SRC} ${LIB_AVX_INC} ) 45*abb65b4bSAndroid Build Coastguard Worker add_library( ${LIB_NAME_BASE}_dynamic SHARED ${LIB_API_SRC} ${LIB_INC} ${LIB_BASE_SRC} ${LIB_BASE_INC} ${LIB_SSE_SRC} ${LIB_SSE_INC} 46*abb65b4bSAndroid Build Coastguard Worker ${LIB_AVX_SRC} ${LIB_AVX_INC} ) 47*abb65b4bSAndroid Build Coastguard Workerendif() 48*abb65b4bSAndroid Build Coastguard Worker 49*abb65b4bSAndroid Build Coastguard Workerset_target_properties(${LIB_NAME_BASE}_dynamic PROPERTIES VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} SOVERSION ${LIB_SOVERSION}) 50*abb65b4bSAndroid Build Coastguard Worker 51*abb65b4bSAndroid Build Coastguard Worker# @todo Consider using WINDOWS_EXPORT_ALL_SYMBOLS instead of generate_export_header 52*abb65b4bSAndroid Build Coastguard Worker# @see https://cmake.org/cmake/help/latest/prop_tgt/WINDOWS_EXPORT_ALL_SYMBOLS.html#prop_tgt:WINDOWS_EXPORT_ALL_SYMBOLS 53*abb65b4bSAndroid Build Coastguard Worker#if(MSVC) 54*abb65b4bSAndroid Build Coastguard Worker # @see https://blog.kitware.com/create-dlls-on-windows-without-declspec-using-new-cmake-export-all-feature/ 55*abb65b4bSAndroid Build Coastguard Worker # @see https://cmake.org/cmake/help/v3.3/module/GenerateExportHeader.html 56*abb65b4bSAndroid Build Coastguard Worker # 57*abb65b4bSAndroid Build Coastguard Worker #set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) 58*abb65b4bSAndroid Build Coastguard Worker #set(BUILD_SHARED_LIBS TRUE) 59*abb65b4bSAndroid Build Coastguard Worker#endif() 60*abb65b4bSAndroid Build Coastguard Worker 61*abb65b4bSAndroid Build Coastguard Worker# Generate export macros for libraries 62*abb65b4bSAndroid Build Coastguard Workergenerate_export_header(${LIB_NAME_BASE}_dynamic 63*abb65b4bSAndroid Build Coastguard Worker BASE_NAME OAPV 64*abb65b4bSAndroid Build Coastguard Worker EXPORT_FILE_NAME ${CMAKE_BINARY_DIR}/include/oapv/oapv_exports.h) 65*abb65b4bSAndroid Build Coastguard Worker 66*abb65b4bSAndroid Build Coastguard Worker# This will cause the export macros to expand to nothing when building the static library. 67*abb65b4bSAndroid Build Coastguard Workerset_target_properties(${LIB_NAME_BASE} PROPERTIES COMPILE_FLAGS -DLIBSHARED_AND_STATIC_STATIC_DEFINE) 68*abb65b4bSAndroid Build Coastguard Worker 69*abb65b4bSAndroid Build Coastguard Workersource_group("base\\header" FILES ${LIB_BASE_INC} ${LIB_INC}) 70*abb65b4bSAndroid Build Coastguard Workersource_group("base\\source" FILES ${LIB_BASE_SRC} ${LIB_API_SRC}) 71*abb65b4bSAndroid Build Coastguard Workersource_group("base\\sse\\header" FILES ${LIB_SSE_INC}) 72*abb65b4bSAndroid Build Coastguard Workersource_group("base\\sse\\source" FILES ${LIB_SSE_SRC}) 73*abb65b4bSAndroid Build Coastguard Workersource_group("base\\neon\\header" FILES ${LIB_NEON_INC}) 74*abb65b4bSAndroid Build Coastguard Workersource_group("base\\neon\\source" FILES ${LIB_NEON_SRC}) 75*abb65b4bSAndroid Build Coastguard Workersource_group("base\\avx\\header" FILES ${LIB_AVX_INC}) 76*abb65b4bSAndroid Build Coastguard Workersource_group("base\\avx\\source" FILES ${LIB_AVX_SRC}) 77*abb65b4bSAndroid Build Coastguard Worker 78*abb65b4bSAndroid Build Coastguard Worker 79*abb65b4bSAndroid Build Coastguard Workerif(ARM) 80*abb65b4bSAndroid Build Coastguard Worker include_directories( ${LIB_NAME_BASE} PUBLIC . .. ../inc ./neon) 81*abb65b4bSAndroid Build Coastguard Workerelse() 82*abb65b4bSAndroid Build Coastguard Worker include_directories( ${LIB_NAME_BASE} PUBLIC . .. ../inc ./sse ./avx) 83*abb65b4bSAndroid Build Coastguard Workerendif() 84*abb65b4bSAndroid Build Coastguard Worker 85*abb65b4bSAndroid Build Coastguard Workerset_target_properties(${LIB_NAME_BASE} PROPERTIES FOLDER lib 86*abb65b4bSAndroid Build Coastguard Worker ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) 87*abb65b4bSAndroid Build Coastguard Worker 88*abb65b4bSAndroid Build Coastguard Workerset( SSE ${BASE_INC_FILES} ${LIB_SSE_SRC}) 89*abb65b4bSAndroid Build Coastguard Workerset( AVX ${LIB_AVX_SRC} ) 90*abb65b4bSAndroid Build Coastguard Workerset( NEON ${LIB_NEON_SRC} ${LIB_NEON_INC}) 91*abb65b4bSAndroid Build Coastguard Workerset_target_properties(${LIB_NAME_BASE}_dynamic PROPERTIES OUTPUT_NAME ${LIB_NAME_BASE}) 92*abb65b4bSAndroid Build Coastguard Worker 93*abb65b4bSAndroid Build Coastguard Workerif( MSVC ) 94*abb65b4bSAndroid Build Coastguard Worker target_compile_definitions( ${LIB_NAME_BASE} PUBLIC ANY _CRT_SECURE_NO_WARNINGS ) 95*abb65b4bSAndroid Build Coastguard Worker set_target_properties(${LIB_NAME_BASE}_dynamic PROPERTIES FOLDER lib 96*abb65b4bSAndroid Build Coastguard Worker RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) 97*abb65b4bSAndroid Build Coastguard Workerelseif( UNIX OR MINGW ) 98*abb65b4bSAndroid Build Coastguard Worker 99*abb65b4bSAndroid Build Coastguard Worker if (ARM) 100*abb65b4bSAndroid Build Coastguard Worker set_property( SOURCE ${NEON} APPEND PROPERTY COMPILE_FLAGS "-flax-vector-conversions" ) 101*abb65b4bSAndroid Build Coastguard Worker else() 102*abb65b4bSAndroid Build Coastguard Worker set_property( SOURCE ${SSE} APPEND PROPERTY COMPILE_FLAGS "-msse4.1" ) 103*abb65b4bSAndroid Build Coastguard Worker set_property( SOURCE ${AVX} APPEND PROPERTY COMPILE_FLAGS " -mavx2" ) 104*abb65b4bSAndroid Build Coastguard Worker endif() 105*abb65b4bSAndroid Build Coastguard Worker 106*abb65b4bSAndroid Build Coastguard Worker set_target_properties(${LIB_NAME_BASE}_dynamic PROPERTIES FOLDER lib 107*abb65b4bSAndroid Build Coastguard Worker LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) 108*abb65b4bSAndroid Build Coastguard Worker target_compile_definitions( ${LIB_NAME_BASE} PUBLIC ANY LINUX ) 109*abb65b4bSAndroid Build Coastguard Worker target_link_libraries(${LIB_NAME_BASE} m) 110*abb65b4bSAndroid Build Coastguard Workerendif() 111*abb65b4bSAndroid Build Coastguard Worker 112*abb65b4bSAndroid Build Coastguard Worker# Install rules 113*abb65b4bSAndroid Build Coastguard Worker# 114*abb65b4bSAndroid Build Coastguard Worker# Set DCMAKE_INSTALL_PREFIX to change default install prefix 115*abb65b4bSAndroid Build Coastguard Worker# e.g cmake .. -DSET_PROF=BASE -DCMAKE_INSTALL_PREFIX='/home/user/bin/' 116*abb65b4bSAndroid Build Coastguard Worker 117*abb65b4bSAndroid Build Coastguard Worker# List the headers we want to declare as public for installation. 118*abb65b4bSAndroid Build Coastguard Workerset(OAPV_PUBLIC_HEADERS "${LIB_INC}") 119*abb65b4bSAndroid Build Coastguard Workerset_target_properties(${LIB_NAME_BASE} PROPERTIES PUBLIC_HEADER "${OAPV_PUBLIC_HEADERS}") 120*abb65b4bSAndroid Build Coastguard Worker 121*abb65b4bSAndroid Build Coastguard Workerset(OAPV_PRIVATE_HEADERS "${LIB_BASE_INC}" "${LIB_SSE_INC}" "${LIB_AVX_INC}" "${LIB_NEON_INC}") 122*abb65b4bSAndroid Build Coastguard Worker 123*abb65b4bSAndroid Build Coastguard Worker# Install static library and public headers 124*abb65b4bSAndroid Build Coastguard Worker# 125*abb65b4bSAndroid Build Coastguard Worker# Static library (liboapv.a or oapv.lib) will be installed to <prefix>/lib/oapv 126*abb65b4bSAndroid Build Coastguard Worker# Public headers will be installed to <prefix>/include/oapv 127*abb65b4bSAndroid Build Coastguard Worker# 128*abb65b4bSAndroid Build Coastguard Workerinclude(GNUInstallDirs) 129*abb65b4bSAndroid Build Coastguard Workerinstall(TARGETS ${LIB_NAME_BASE} 130*abb65b4bSAndroid Build Coastguard Worker ARCHIVE COMPONENT Development DESTINATION ${CMAKE_INSTALL_LIBDIR}/${LIB_NAME_BASE} 131*abb65b4bSAndroid Build Coastguard Worker PUBLIC_HEADER COMPONENT Development DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${LIB_NAME_BASE} 132*abb65b4bSAndroid Build Coastguard Worker) 133*abb65b4bSAndroid Build Coastguard Worker 134*abb65b4bSAndroid Build Coastguard Worker# Install shared library 135*abb65b4bSAndroid Build Coastguard Worker# 136*abb65b4bSAndroid Build Coastguard Worker# On non-DLL platforms shared library (liboapv.so) will be installed to <prefix>/lib/oapv. 137*abb65b4bSAndroid Build Coastguard Worker# On DLL platforms the shred DLL (oapv.dll) will be installed to <prefix>/bin and its import library will be installed to <prefix>/lib/oapv/import 138*abb65b4bSAndroid Build Coastguard Worker# 139*abb65b4bSAndroid Build Coastguard Workerinstall(TARGETS ${LIB_NAME_BASE}_dynamic 140*abb65b4bSAndroid Build Coastguard Worker RUNTIME COMPONENT Libraries DESTINATION ${CMAKE_INSTALL_BINDIR} 141*abb65b4bSAndroid Build Coastguard Worker LIBRARY 142*abb65b4bSAndroid Build Coastguard Worker COMPONENT Libraries DESTINATION ${CMAKE_INSTALL_LIBDIR} 143*abb65b4bSAndroid Build Coastguard Worker NAMELINK_COMPONENT Development DESTINATION ${CMAKE_INSTALL_LIBDIR} 144*abb65b4bSAndroid Build Coastguard Worker ARCHIVE COMPONENT Development DESTINATION ${CMAKE_INSTALL_LIBDIR}/${LIB_NAME_BASE}/import 145*abb65b4bSAndroid Build Coastguard Worker) 146*abb65b4bSAndroid Build Coastguard Worker 147*abb65b4bSAndroid Build Coastguard Workerinstall( FILES 148*abb65b4bSAndroid Build Coastguard Worker ${PROJECT_BINARY_DIR}/include/oapv/oapv_exports.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${LIB_NAME_BASE} 149*abb65b4bSAndroid Build Coastguard Worker) 150*abb65b4bSAndroid Build Coastguard Worker 151*abb65b4bSAndroid Build Coastguard Workerif( NOT MSVC ) 152*abb65b4bSAndroid Build Coastguard Worker configure_file( 153*abb65b4bSAndroid Build Coastguard Worker "${CMAKE_SOURCE_DIR}/pkgconfig/${LIB_NAME_BASE}.pc.in" 154*abb65b4bSAndroid Build Coastguard Worker "${CMAKE_BINARY_DIR}/${LIB_NAME_BASE}.pc" 155*abb65b4bSAndroid Build Coastguard Worker IMMEDIATE @ONLY) 156*abb65b4bSAndroid Build Coastguard Worker 157*abb65b4bSAndroid Build Coastguard Worker install( FILES 158*abb65b4bSAndroid Build Coastguard Worker "${CMAKE_BINARY_DIR}/${LIB_NAME_BASE}.pc" DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig 159*abb65b4bSAndroid Build Coastguard Worker ) 160*abb65b4bSAndroid Build Coastguard Workerendif() 161