wepoll/CMakeLists.txt
2017-09-28 00:12:20 +02:00

71 lines
2.7 KiB
CMake

cmake_minimum_required(VERSION 2.8.0)
project(wepoll)
if(WIN32)
link_libraries(ws2_32)
endif()
if(MSVC)
add_compile_options(/Wall /wd4201 /wd4242 /wd4710 /wd4711 /wd4820)
else()
add_compile_options(-Wall)
endif()
file(GLOB_RECURSE SOURCES_SRC src/*.c src/*.h)
file(GLOB_RECURSE SOURCES_SRC_C src/*.c)
file(GLOB_RECURSE SOURCES_INCLUDE include/*.h)
file(GLOB SOURCES_TEST test/*.c)
file(GLOB_RECURSE SOURCES_TEST_SHARED test/shared/*.c test/shared/*.h)
source_group("" FILES ${SOURCES_INCLUDE})
source_group(src FILES ${SOURCES_SRC})
source_group("" FILES ${SOURCES_TEST})
source_group(test/shared FILES ${SOURCES_TEST_SHARED})
foreach(TEST_SOURCE ${SOURCES_TEST})
get_filename_component(TEST_NAME ${TEST_SOURCE} NAME_WE)
add_executable(${TEST_NAME} ${TEST_SOURCE} ${SOURCES_SRC} ${SOURCES_TEST_SHARED})
target_include_directories(${TEST_NAME} PUBLIC include src)
endforeach(TEST_SOURCE ${SOURCES_TEST})
foreach(HEADER_SOURCE ${SOURCES_INCLUDE})
get_filename_component(HEADER_NAME ${HEADER_SOURCE} NAME_WE)
string(TOUPPER ${HEADER_NAME} HEADER_NAME_UC)
set(ALLINONE_NAME "${HEADER_NAME}-all-in-one.c.out")
set(ALLINONE_SRC_C "allinone/${HEADER_NAME}-all-in-one.c")
add_custom_command(
OUTPUT ${ALLINONE_SRC_C}
COMMAND node allinone/build.js allinone/header.h ${HEADER_SOURCE} ${SOURCES_SRC_C} > ${ALLINONE_SRC_C}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
IMPLICIT_DEPENDS c ${SOURCES_INCLUDE} ${SOURCES_SRC}
)
add_custom_target(${ALLINONE_NAME} DEPENDS ${ALLINONE_SRC_C})
set(ALLINONE_DLL_NAME "${HEADER_NAME}-all-in-one.dll")
set(ALLINONE_DLL_OUTPUT "${HEADER_NAME}-all-in-one")
add_library(${ALLINONE_DLL_NAME} SHARED ${ALLINONE_SRC_C})
if(MSVC)
target_compile_definitions(${ALLINONE_DLL_NAME} PUBLIC "-D${HEADER_NAME_UC}_EXTERN=__declspec(dllexport)" )
else()
target_compile_definitions(${ALLINONE_DLL_NAME} PUBLIC "-D${HEADER_NAME_UC}_EXTERN=__attribute__((visibility(\"default\")))")
endif()
set_target_properties(${ALLINONE_DLL_NAME} PROPERTIES OUTPUT_NAME ${ALLINONE_DLL_OUTPUT})
set(DLL_NAME "${HEADER_NAME}.dll")
set(DLL_OUTPUT "${HEADER_NAME}")
add_library(${DLL_NAME} SHARED ${HEADER_SOURCE} ${SOURCES_SRC})
target_include_directories(${DLL_NAME} PUBLIC include)
if(MSVC)
target_compile_options(${DLL_NAME} PUBLIC "-FI${HEADER_SOURCE}")
target_compile_definitions(${DLL_NAME} PUBLIC "-D${HEADER_NAME_UC}_EXTERN=__declspec(dllexport)" )
else()
target_compile_options(${DLL_NAME} PUBLIC -include ${HEADER_SOURCE} -fvisibility=hidden)
target_compile_definitions(${DLL_NAME} PUBLIC "-D${HEADER_NAME_UC}_EXTERN=__attribute__((visibility(\"default\")))")
endif()
set_target_properties(${DLL_NAME} PROPERTIES OUTPUT_NAME ${DLL_OUTPUT})
endforeach(HEADER_SOURCE ${SOURCES_INCLUDE})