diff --git a/CMakeLists.txt b/CMakeLists.txt index 50618f4..9453eb4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -58,9 +58,40 @@ endif() ### Flags ### -set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wall -Wextra -Wstrict-prototypes") -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -Wextra") -set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined") +# Specific compiler flags +# These variables are to be used (manually) when compiling a shared +# library or an executable (or static library). +set(SHARED_FLAGS "-fPIC") +set(EXE_FLAGS "-fPIE") + +# Common compiler flags +set(C_CXX_COMMON_FLAGS "-Wall -Wextra") +set(C_FLAGS "${C_CXX_COMMON_FLAGS} -Wstrict-prototypes") +set(CXX_FLAGS "${C_CXX_COMMON_FLAGS}") + +if (NOT CMAKE_C_FLAGS) + set(CMAKE_C_FLAGS ${C_FLAGS} + CACHE STRING "Set default C flags" FORCE) +endif() + +if (NOT CMAKE_CXX_FLAGS) + set(CMAKE_CXX_FLAGS ${CXX_FLAGS} + CACHE STRING "Set default C++ flags" FORCE) +endif() + +# Linker flags +# Question: why the hell does CMAKE_SHARED_LINKER_FLAGS contain " " +# by default?! +if ("${CMAKE_SHARED_LINKER_FLAGS}" STREQUAL " ") + set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined" + CACHE STRING "Set default shared linker flags" FORCE) +endif() + +# Linker flags when linking an executable +if ("${CMAKE_EXE_LINKER_FLAGS}" STREQUAL " ") + set(CMAKE_EXE_LINKER_FLAGS "-pie -fPIE" + CACHE STRING "Set default shared linker flags" FORCE) +endif() ### Libraries ### diff --git a/libowlps-client/CMakeLists.txt b/libowlps-client/CMakeLists.txt index 5a1e9a5..c5d0ded 100644 --- a/libowlps-client/CMakeLists.txt +++ b/libowlps-client/CMakeLists.txt @@ -1,17 +1,30 @@ # Explicitly link to libc set(EXTRA_LIBS ${EXTRA_LIBS} c) -add_library(libowlps-client.a STATIC libowlps-client.c) +# Targets add_library(libowlps-client.so SHARED libowlps-client.c) +add_library(libowlps-client.a STATIC libowlps-client.c) + +# Fix targets' names set_target_properties( - libowlps-client.a libowlps-client.so + libowlps-client.so libowlps-client.a PROPERTIES OUTPUT_NAME owlps-client SOVERSION 1 VERSION 1.0 ) + +# Add compile flags +set_target_properties(libowlps-client.so + PROPERTIES COMPILE_FLAGS ${SHARED_FLAGS}) +set_target_properties(libowlps-client.a + PROPERTIES COMPILE_FLAGS ${EXE_FLAGS}) + +# Link libraries target_link_libraries(libowlps-client.so libowlps.so ${EXTRA_LIBS}) target_link_libraries(libowlps-client.a libowlps.a ${EXTRA_LIBS}) + +# Install targets install( TARGETS libowlps-client.so libowlps-client.a DESTINATION lib) diff --git a/libowlps-resultreader/CMakeLists.txt b/libowlps-resultreader/CMakeLists.txt index b8adc39..1be217d 100644 --- a/libowlps-resultreader/CMakeLists.txt +++ b/libowlps-resultreader/CMakeLists.txt @@ -1,8 +1,11 @@ # Explicitly link to libc set(EXTRA_LIBS ${EXTRA_LIBS} c) +# Targets add_library(libowlps-resultreader.a STATIC libowlps-resultreader.c) add_library(libowlps-resultreader.so SHARED libowlps-resultreader.c) + +# Fix targets' names set_target_properties( libowlps-resultreader.a libowlps-resultreader.so PROPERTIES @@ -10,11 +13,28 @@ set_target_properties( SOVERSION 1 VERSION 1.0 ) + +# Add compile flags +set_target_properties(libowlps-resultreader.so + PROPERTIES COMPILE_FLAGS ${SHARED_FLAGS}) +set_target_properties(libowlps-resultreader.a + PROPERTIES COMPILE_FLAGS ${EXE_FLAGS}) + +# Link libraries target_link_libraries(libowlps-resultreader.so libowlps.so ${EXTRA_LIBS}) target_link_libraries(libowlps-resultreader.a libowlps.a ${EXTRA_LIBS}) + +# Install targets install( TARGETS libowlps-resultreader.so libowlps-resultreader.a DESTINATION lib) +install( + FILES owlps-resultreader.h + DESTINATION include) + + + +### Demo program ### add_executable(owlps-resultreader-udp owlps-resultreader-udp.c) target_link_libraries(owlps-resultreader-udp @@ -23,12 +43,6 @@ target_link_libraries(owlps-resultreader-udp install( TARGETS owlps-resultreader-udp DESTINATION bin) -install( - FILES owlps-resultreader.h - DESTINATION include) - - -### Demo program ### add_executable(owlps-resultreader-udp.semistatic EXCLUDE_FROM_ALL owlps-resultreader-udp.c) @@ -49,3 +63,10 @@ target_link_libraries(owlps-resultreader-udp.static # Add the static target to the global list of static targets list(APPEND OWLPS_STATIC_TARGETS owlps-resultreader-udp.static) set(OWLPS_STATIC_TARGETS ${OWLPS_STATIC_TARGETS} PARENT_SCOPE) + +# Add compile flags for the above targets +set_target_properties( + owlps-resultreader-udp + owlps-resultreader-udp.semistatic + owlps-resultreader-udp.static + PROPERTIES COMPILE_FLAGS ${EXE_FLAGS}) diff --git a/libowlps/CMakeLists.txt b/libowlps/CMakeLists.txt index a1b3743..2d0270d 100644 --- a/libowlps/CMakeLists.txt +++ b/libowlps/CMakeLists.txt @@ -8,8 +8,11 @@ endif() # Explicitly link to libc set(EXTRA_LIBS ${EXTRA_LIBS} c) -add_library(libowlps.a STATIC libowlps.c) +# Targets add_library(libowlps.so SHARED libowlps.c) +add_library(libowlps.a STATIC libowlps.c) + +# Fix targets' names set_target_properties( libowlps.a libowlps.so PROPERTIES @@ -17,8 +20,18 @@ set_target_properties( SOVERSION 3 VERSION 3.1 ) + +# Add compile flags +set_target_properties(libowlps.so + PROPERTIES COMPILE_FLAGS ${SHARED_FLAGS}) +set_target_properties(libowlps.a + PROPERTIES COMPILE_FLAGS ${EXE_FLAGS}) + +# Link libraries target_link_libraries(libowlps.so ${EXTRA_LIBS}) target_link_libraries(libowlps.a ${EXTRA_LIBS}) + +# Install targets install( TARGETS libowlps.so libowlps.a DESTINATION lib) diff --git a/owlps-aggregator/CMakeLists.txt b/owlps-aggregator/CMakeLists.txt index c16881a..0a11c12 100644 --- a/owlps-aggregator/CMakeLists.txt +++ b/owlps-aggregator/CMakeLists.txt @@ -27,3 +27,10 @@ target_link_libraries(owlps-aggregatord.static # Add the static target to the global list of static targets list(APPEND OWLPS_STATIC_TARGETS owlps-aggregatord.static) set(OWLPS_STATIC_TARGETS ${OWLPS_STATIC_TARGETS} PARENT_SCOPE) + +# Add compile flags for the above targets +set_target_properties( + owlps-aggregatord + owlps-aggregatord.semistatic + owlps-aggregatord.static + PROPERTIES COMPILE_FLAGS ${EXE_FLAGS}) diff --git a/owlps-client/CMakeLists.txt b/owlps-client/CMakeLists.txt index 2bb1ecd..cdb04ed 100644 --- a/owlps-client/CMakeLists.txt +++ b/owlps-client/CMakeLists.txt @@ -50,3 +50,10 @@ endif() # Add the static target to the global list of static targets list(APPEND OWLPS_STATIC_TARGETS owlps-client.static) set(OWLPS_STATIC_TARGETS ${OWLPS_STATIC_TARGETS} PARENT_SCOPE) + +# Add compile flags for the above targets +set_target_properties( + owlps-client + owlps-client.semistatic + owlps-client.static + PROPERTIES COMPILE_FLAGS ${EXE_FLAGS}) diff --git a/owlps-listener/CMakeLists.txt b/owlps-listener/CMakeLists.txt index 0dca3f4..6f9a9f6 100644 --- a/owlps-listener/CMakeLists.txt +++ b/owlps-listener/CMakeLists.txt @@ -62,3 +62,10 @@ target_link_libraries(owlps-listenerd.static # Add the static target to the global list of static targets list(APPEND OWLPS_STATIC_TARGETS owlps-listenerd.static) set(OWLPS_STATIC_TARGETS ${OWLPS_STATIC_TARGETS} PARENT_SCOPE) + +# Add compile flags for the above targets +set_target_properties( + owlps-listenerd + owlps-listenerd.semistatic + owlps-listenerd.static + PROPERTIES COMPILE_FLAGS ${EXE_FLAGS}) diff --git a/owlps-positioner/CMakeLists.txt b/owlps-positioner/CMakeLists.txt index 64fc70c..cac7efc 100644 --- a/owlps-positioner/CMakeLists.txt +++ b/owlps-positioner/CMakeLists.txt @@ -91,6 +91,13 @@ target_link_libraries(owlps-positionerd.static list(APPEND OWLPS_STATIC_TARGETS owlps-positionerd.static) set(OWLPS_STATIC_TARGETS ${OWLPS_STATIC_TARGETS} PARENT_SCOPE) +# Add compile flags for the above targets +set_target_properties( + owlps-positionerd + owlps-positionerd.semistatic + owlps-positionerd.static + PROPERTIES COMPILE_FLAGS ${EXE_FLAGS}) + ### Extra targets ### diff --git a/owlps-udp-to-http/CMakeLists.txt b/owlps-udp-to-http/CMakeLists.txt index 5b45d7e..130ffe9 100644 --- a/owlps-udp-to-http/CMakeLists.txt +++ b/owlps-udp-to-http/CMakeLists.txt @@ -30,3 +30,10 @@ target_link_libraries(owlps-udp-to-http.static # Add the static target to the global list of static targets list(APPEND OWLPS_STATIC_TARGETS owlps-udp-to-http.static) set(OWLPS_STATIC_TARGETS ${OWLPS_STATIC_TARGETS} PARENT_SCOPE) + +# Add compile flags for the above targets +set_target_properties( + owlps-udp-to-http + owlps-udp-to-http.semistatic + owlps-udp-to-http.static + PROPERTIES COMPILE_FLAGS ${EXE_FLAGS})