Skip to content

Commit f644978

Browse files
Merge pull request #304 from ViliusSutkus89/long_double_not_double
CMake changes: Long double/double size detection, Android x86 and armv7 support, install pkg-config pc file
2 parents f10ba45 + c1e8462 commit f644978

File tree

1 file changed

+36
-12
lines changed

1 file changed

+36
-12
lines changed

CMakeLists.txt

+36-12
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
cmake_minimum_required(VERSION 3.25)
22

3+
# Get version string from Make.inc
4+
file(READ "${CMAKE_CURRENT_LIST_DIR}/Make.inc" MAKE_FILE)
5+
string(REGEX MATCH "VERSION = ([0-9\.]+)" _ ${MAKE_FILE})
6+
37
project(openlibm
4-
VERSION 0.8.2
8+
VERSION ${CMAKE_MATCH_1}
59
LANGUAGES C ASM)
610

711
option(BUILD_SHARED_LIBS "Build using shared libraries" ON)
@@ -16,7 +20,9 @@ if(${OPENLIBM_ARCH_FOLDER} STREQUAL "amd64" OR ${OPENLIBM_ARCH_FOLDER} STREQUAL
1620
set(OPENLIBM_ARCH_FOLDER "amd64")
1721
elseif(${OPENLIBM_ARCH_FOLDER} STREQUAL "arm64" OR ${OPENLIBM_ARCH_FOLDER} STREQUAL "aarch64")
1822
set(OPENLIBM_ARCH_FOLDER "aarch64")
19-
elseif(${OPENLIBM_ARCH_FOLDER} STREQUAL "x86")
23+
elseif(${OPENLIBM_ARCH_FOLDER} STREQUAL "armv7-a")
24+
set(OPENLIBM_ARCH_FOLDER "arm")
25+
elseif(${OPENLIBM_ARCH_FOLDER} STREQUAL "x86" OR ${OPENLIBM_ARCH_FOLDER} STREQUAL "i686")
2026
set(OPENLIBM_ARCH_FOLDER "i387")
2127
elseif(${OPENLIBM_ARCH_FOLDER} STREQUAL "powerpc")
2228
set(OPENLIBM_ARCH_FOLDER "powerpc")
@@ -55,16 +61,6 @@ endif()
5561
# Add compile flags
5662
target_compile_options("${PROJECT_NAME}" PUBLIC ${C_ASM_COMPILE_FLAGS})
5763

58-
59-
# Determine if long double and double is the same on current platform
60-
if(${OPENLIBM_ARCH_FOLDER} STREQUAL "i387" OR ${OPENLIBM_ARCH_FOLDER} STREQUAL "amd64")
61-
set(LONG_DOUBLE_NOT_DOUBLE 1)
62-
elseif(${OPENLIBM_ARCH_FOLDER} STREQUAL "aarch64")
63-
if(NOT (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" OR ${CMAKE_SYSTEM_NAME} STREQUAL "Windows"))
64-
set(LONG_DOUBLE_NOT_DOUBLE 1)
65-
endif()
66-
endif()
67-
6864
# Project Source
6965
set(PROJECT_SRC "${PROJECT_SOURCE_DIR}")
7066

@@ -257,6 +253,16 @@ if(NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
257253
)
258254
endif()
259255

256+
# Determine if long double and double are the same size
257+
include(CheckCSourceCompiles)
258+
check_c_source_compiles("
259+
#include <float.h>
260+
#if (LDBL_MANT_DIG == DBL_MANT_DIG)
261+
#error \"long double and double are the same size\"
262+
#endif
263+
int main(void ) { return 0; }
264+
" LONG_DOUBLE_NOT_DOUBLE)
265+
260266
# Add in long double functions for x86, x64 and aarch64
261267
if(LONG_DOUBLE_NOT_DOUBLE)
262268
list(APPEND OPENLIBM_C_SOURCE
@@ -428,6 +434,11 @@ elseif(${OPENLIBM_ARCH_FOLDER} STREQUAL "aarch64")
428434
"${PROJECT_SRC}/aarch64/fenv.c"
429435
)
430436

437+
elseif(${OPENLIBM_ARCH_FOLDER} STREQUAL "arm")
438+
list(APPEND OPENLIBM_C_SOURCE
439+
"${PROJECT_SRC}/${OPENLIBM_ARCH_FOLDER}/fenv.c"
440+
)
441+
431442
elseif(${OPENLIBM_ARCH_FOLDER} STREQUAL "i387")
432443
list(APPEND OPENLIBM_C_SOURCE
433444
"${PROJECT_SRC}/i387/fenv.c"
@@ -545,3 +556,16 @@ target_include_directories("${PROJECT_NAME}" PUBLIC ${OPENLIBM_INCLUDE_DIRS})
545556
file(GLOB PUBLIC_HEADERS "*.h" "include/*.h" "${OPENLIBM_ARCH_FOLDER}/*.h" "src/*.h")
546557
set_target_properties("${PROJECT_NAME}" PROPERTIES PUBLIC_HEADER "${PUBLIC_HEADERS}")
547558
install (TARGETS "${PROJECT_NAME}")
559+
560+
# Can't use configure_file because openlibm.pc.in uses $var instead of CMake configure @var's
561+
# Would rather string replace variables here instead of editing .pc.in, because editing .pc.in
562+
# might build break autotools build.
563+
file(READ "${PROJECT_SRC}/openlibm.pc.in" PC_FILE)
564+
string(REPLACE "\${version}" ${CMAKE_PROJECT_VERSION} PC_FILE ${PC_FILE})
565+
string(PREPEND PC_FILE "prefix=${CMAKE_INSTALL_PREFIX}
566+
includedir=\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}
567+
libdir=\${prefix}/${CMAKE_INSTALL_LIBDIR}\n
568+
")
569+
file(WRITE "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.pc" ${PC_FILE})
570+
install(FILES "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.pc"
571+
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")

0 commit comments

Comments
 (0)