xref: /aosp_15_r20/external/libopenapv/src/CMakeLists.txt (revision abb65b4b03b69e1d508d4d9a44dcf199df16e7c3)
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