# # Copyright (C) 2015-2015 Oleg Alexeenkov # Copyright (C) 2015-2019 Felix Weinrank # # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. Neither the name of the project nor the names of its contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # ################################################# # INCLUDE MODULES AND SETTINGS ################################################# set(VERSION "1.0.0") set(prefix ${CMAKE_INSTALL_PREFIX}) set(exec_prefix ${prefix}) set(libdir ${exec_prefix}/lib) set(includedir ${prefix}/include/usrsctp) set(CMAKE_REQUIRED_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR}) set(CMAKE_MACOSX_RPATH 1) add_definitions(-D__Userspace__) add_definitions(-D__Userspace_os_${CMAKE_SYSTEM_NAME}) add_definitions(-DSCTP_SIMPLE_ALLOCATOR) add_definitions(-DSCTP_PROCESS_LEVEL_LOCKS) ################################################# # OS DEPENDENT ################################################# if (CMAKE_SYSTEM_NAME MATCHES "Linux") add_definitions(-D_GNU_SOURCE) endif () if (CMAKE_SYSTEM_NAME MATCHES "FreeBSD") add_definitions(-U__FreeBSD__) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-address-of-packed-member") endif () if (CMAKE_SYSTEM_NAME MATCHES "Darwin") add_definitions(-U__APPLE__) add_definitions(-D__APPLE_USE_RFC_2292) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-address-of-packed-member -Wno-deprecated-declarations") endif () if (CMAKE_SYSTEM_NAME MATCHES "DragonFly") add_definitions(-U__DragonFly__) endif () if (CMAKE_SYSTEM_NAME MATCHES "NetBSD") add_definitions(-U__NetBSD__) endif () if (CMAKE_SYSTEM_NAME MATCHES "OpenBSD") add_definitions(-U__OpenBSD__) endif () ################################################# # MISC ################################################# ################################################# # LIBRARY FILES ################################################# include_directories(${CMAKE_CURRENT_SOURCE_DIR}) list(APPEND usrsctp_root_headers user_atomic.h user_environment.h user_inpcb.h user_ip_icmp.h user_ip6_var.h user_malloc.h user_mbuf.h user_queue.h user_recv_thread.h user_route.h user_socketvar.h user_uma.h usrsctp.h ) list(APPEND usrsctp_netinet_headers netinet/sctp_asconf.h netinet/sctp_auth.h netinet/sctp_bsd_addr.h netinet/sctp_callout.h netinet/sctp_constants.h netinet/sctp_crc32.h netinet/sctp_header.h netinet/sctp_indata.h netinet/sctp_input.h netinet/sctp_lock_userspace.h netinet/sctp_os_userspace.h netinet/sctp_os.h netinet/sctp_output.h netinet/sctp_pcb.h netinet/sctp_peeloff.h netinet/sctp_process_lock.h netinet/sctp_sha1.h netinet/sctp_structs.h netinet/sctp_sysctl.h netinet/sctp_timer.h netinet/sctp_uio.h netinet/sctp_var.h netinet/sctputil.h netinet/sctp.h ) list(APPEND usrsctp_netinet6_headers netinet6/sctp6_var.h ) list(APPEND usrsctp_headers ${usrsctp_root_headers} ${usrsctp_netinet_headers} ${usrsctp_netinet6_headers} ) list(APPEND usrsctp_sources netinet/sctp_asconf.c netinet/sctp_auth.c netinet/sctp_bsd_addr.c netinet/sctp_callout.c netinet/sctp_cc_functions.c netinet/sctp_crc32.c netinet/sctp_indata.c netinet/sctp_input.c netinet/sctp_output.c netinet/sctp_pcb.c netinet/sctp_peeloff.c netinet/sctp_sha1.c netinet/sctp_ss_functions.c netinet/sctp_sysctl.c netinet/sctp_timer.c netinet/sctp_userspace.c netinet/sctp_usrreq.c netinet/sctputil.c netinet6/sctp6_usrreq.c user_environment.c user_mbuf.c user_recv_thread.c user_socket.c ) add_library(usrsctp SHARED ${usrsctp_sources} ${usrsctp_headers}) add_library(usrsctp-static STATIC ${usrsctp_sources} ${usrsctp_headers}) if (WIN32) message(STATUS "link library: ws2_32") target_link_libraries(usrsctp ws2_32 iphlpapi.lib) target_link_libraries(usrsctp-static ws2_32 iphlpapi.lib) endif () set_target_properties(usrsctp-static PROPERTIES OUTPUT_NAME "usrsctp") set_target_properties(usrsctp PROPERTIES IMPORT_SUFFIX "_import.lib") set_target_properties(usrsctp PROPERTIES SOVERSION 1 VERSION 1.0.0) if (NOT DEFINED CMAKE_INSTALL_LIBDIR) SET(CMAKE_INSTALL_LIBDIR lib) endif () ################################################# # INSTALL LIBRARY AND HEADER ################################################# install(TARGETS usrsctp usrsctp-static DESTINATION ${CMAKE_INSTALL_LIBDIR}) install(FILES usrsctp.h DESTINATION include)