|
5 | 5 | # Copyright (c) 2021 Jorge Rivera. All right reserved. |
6 | 6 | # License GNU Lesser General Public License v3.0. |
7 | 7 |
|
8 | | -cmake_minimum_required(VERSION 3.1) |
| 8 | +cmake_minimum_required(VERSION 3.14) # Update to prevent policy CMP0080 warning |
9 | 9 |
|
10 | 10 | project(picoder) |
11 | 11 |
|
12 | 12 | # Set C/C++ Standard |
13 | | -set(CMAKE_C_STANDARD 11) |
| 13 | +set(CMAKE_C_STANDARD 11) # Needed by glibc getopt in MSVC |
14 | 14 | set(CMAKE_CXX_STANDARD 11) |
15 | 15 |
|
16 | 16 | # Check for git repository information |
@@ -67,7 +67,7 @@ endif() |
67 | 67 |
|
68 | 68 | # Set C/C++ flags |
69 | 69 | if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") |
70 | | - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wno-unused-parameter") |
| 70 | + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wno-unused-parameter -fcommon") # Add -fcommon CFLAG to prevent multiple-definition |
71 | 71 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wno-unused-parameter -Wconversion -Woverloaded-virtual -Wsign-conversion") |
72 | 72 | elseif(MSVC) |
73 | 73 | set(MSVC_DISABLED_WARNINGS_LIST |
@@ -113,11 +113,36 @@ else() |
113 | 113 | add_executable( ${PROJECT_NAME} ${SRC} ) |
114 | 114 | endif() |
115 | 115 |
|
| 116 | +# Add executable export symbols for loadable modules to prevent policy CMP0065 warning |
| 117 | +set_target_properties( ${PROJECT_NAME} PROPERTIES ENABLE_EXPORTS TRUE ) |
| 118 | + |
| 119 | +set_target_properties( ${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE TRUE ) # Add -fPIC |
| 120 | + |
| 121 | +set_target_properties( ${PROJECT_NAME} PROPERTIES LINK_SEARCH_START_STATIC TRUE ) # Add "-Bstatic" |
| 122 | + |
| 123 | +# Build static executable if possible |
| 124 | +if( NOT (CMAKE_SYSTEM_NAME MATCHES "Darwin" OR MSVC) ) |
| 125 | + set( CMAKE_EXE_LINKER_FLAGS "-static" ) |
| 126 | +endif() |
| 127 | + |
| 128 | +# Checking for math library 'libm' used when including <math.h> in pilight sources |
| 129 | +set(CMAKE_FIND_LIBRARY_SUFFIXES ".a;.lib;.tbd;.so;.dylib;.dll.a") |
| 130 | +find_library(MATH_LIBRARY NAMES m ) |
| 131 | +if(MATH_LIBRARY) |
| 132 | + MESSAGE( STATUS "Math library for ${PROJECT_NAME}: " ${MATH_LIBRARY} ) |
| 133 | +else() |
| 134 | + if(NOT MSVC) |
| 135 | + message(FATAL_ERROR "Cannot find math library 'libm' ") |
| 136 | + else() |
| 137 | + set(MATH_LIBRARY "") |
| 138 | + endif() |
| 139 | +endif() |
| 140 | + |
116 | 141 | # Add include directory to use #include <PiCode.h> |
117 | 142 | target_include_directories( ${PROJECT_NAME} PRIVATE libs/PiCode/src/ ) |
118 | 143 |
|
119 | | -# Add PiCode static library (libpicode.a) to link picoder executable |
120 | | -target_link_libraries( ${PROJECT_NAME} PUBLIC picode ) |
| 144 | +# Add PiCode and Math static libraries to link picoder executable |
| 145 | +target_link_libraries( ${PROJECT_NAME} PRIVATE picode ${MATH_LIBRARY}) |
121 | 146 |
|
122 | 147 | # If git info available adds to picoder executable as environment var |
123 | 148 | if(DEFINED BUILD_VERSION) |
|
0 commit comments