Skip to content

Commit 0b5e49a

Browse files
Update CFLAGS logic to strip debug symbols from CMake sub projects
1 parent ba130b7 commit 0b5e49a

File tree

8 files changed

+68
-63
lines changed

8 files changed

+68
-63
lines changed

3rdparty/.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
built/
22
tarballs/
3-
3+
CMakeToolchainWrapper.cmake

3rdparty/CMakeToolchainWrapper.in

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
include(@CMAKE_TOOLCHAIN_FILE@)
2+
include(@CompilerFlagsCMAKE_FILE@)

3rdparty/CompilerBinaries.cmake

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Autotools and Meson need toolchain info
2+
# This file defines that info
3+
4+
if (ANDROID)
5+
if(ANDROID_ABI STREQUAL armeabi-v7a)
6+
SET(AS ${ANDROID_TOOLCHAIN_ROOT}/bin/armv7a-linux-androideabi-as)
7+
SET(CC ${ANDROID_TOOLCHAIN_ROOT}/bin/armv7a-linux-androideabi${ANDROID_NATIVE_API_LEVEL}-clang)
8+
SET(CXX ${ANDROID_TOOLCHAIN_ROOT}/bin/armv7a-linux-androideabi${ANDROID_NATIVE_API_LEVEL}-clang++)
9+
SET(HOST_TRIPLE armv7a-linux-androideabi)
10+
elseif(ANDROID_ABI STREQUAL arm64-v8a)
11+
SET(AS ${ANDROID_TOOLCHAIN_ROOT}/bin/aarch64-linux-android-as)
12+
SET(CC ${ANDROID_TOOLCHAIN_ROOT}/bin/aarch64-linux-android${ANDROID_NATIVE_API_LEVEL}-clang)
13+
SET(CXX ${ANDROID_TOOLCHAIN_ROOT}/bin/aarch64-linux-android${ANDROID_NATIVE_API_LEVEL}-clang++)
14+
SET(HOST_TRIPLE aarch64-linux-android)
15+
elseif(ANDROID_ABI STREQUAL x86)
16+
SET(AS ${ANDROID_TOOLCHAIN_ROOT}/bin/x86-linux-android-as)
17+
SET(CC ${ANDROID_TOOLCHAIN_ROOT}/bin/i686-linux-android${ANDROID_NATIVE_API_LEVEL}-clang)
18+
SET(CXX ${ANDROID_TOOLCHAIN_ROOT}/bin/i686-linux-android${ANDROID_NATIVE_API_LEVEL}-clang++)
19+
SET(HOST_TRIPLE i686-linux-android)
20+
elseif(ANDROID_ABI STREQUAL x86_64)
21+
SET(AS ${ANDROID_TOOLCHAIN_ROOT}/bin/x86_64-linux-android-as)
22+
SET(CC ${ANDROID_TOOLCHAIN_ROOT}/bin/x86_64-linux-android${ANDROID_NATIVE_API_LEVEL}-clang)
23+
SET(CXX ${ANDROID_TOOLCHAIN_ROOT}/bin/x86_64-linux-android${ANDROID_NATIVE_API_LEVEL}-clang++)
24+
SET(HOST_TRIPLE x86_64-linux-android)
25+
else()
26+
message(FATAL_ERROR "Invalid Android ABI: ${ANDROID_ABI}.")
27+
endif()
28+
else()
29+
#SET(AS @TODO: set AS binary)
30+
# CMAKE_ASM_COMPILER??
31+
SET(CC ${CMAKE_C_COMPILER})
32+
SET(CXX ${CMAKE_CXX_COMPILER})
33+
endif()

3rdparty/CompilerFlags.cmake

Lines changed: 16 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
1-
# Get Compiler flags from our current CMake environment,
2-
# Will be passed to Autotools and Meson
1+
# Process CFLAGS, CXXFLAGS and LDFLAGS
2+
3+
# CMAKE_C_FLAGS and CMAKE_CXX_FLAGS will by used by Autotools, CMake and Meson
4+
5+
# Android toolchain adds debugging symbols even in MinSizeRel, but strips them when packaging APK.
6+
# APK is not necessary in this use case, just strip -g
7+
if(CMAKE_BUILD_TYPE STREQUAL MinSizeRel)
8+
STRING(REPLACE "-g" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
9+
STRING(REPLACE "-g" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
10+
endif()
11+
12+
# CFLAGS , CXXFLAGS and LDFLAGS will by used by Autotools and Meson
313

414
SET(CFLAGS ${CMAKE_C_FLAGS})
515
SET(CXXFLAGS ${CMAKE_CXX_FLAGS})
@@ -23,37 +33,9 @@ STRING(APPEND CFLAGS " -I${THIRDPARTY_PREFIX}/include")
2333
STRING(APPEND CXXFLAGS " -I${THIRDPARTY_PREFIX}/include")
2434
STRING(APPEND LDFLAGS " -L${THIRDPARTY_PREFIX}/lib")
2535

36+
# march=armv7-a breaks build.
37+
# Both Autotools and Meson fail, telling that compiler does not work
2638
if(CMAKE_BUILD_TYPE STREQUAL MinSizeRel)
27-
STRING(REPLACE "-g " " " CFLAGS ${CFLAGS})
28-
STRING(REPLACE "-g " " " CXXFLAGS ${CXXFLAGS})
29-
endif()
30-
31-
if (ANDROID)
32-
if(ANDROID_ABI STREQUAL armeabi-v7a)
33-
SET(AS ${ANDROID_TOOLCHAIN_ROOT}/bin/armv7a-linux-androideabi-as)
34-
SET(CC ${ANDROID_TOOLCHAIN_ROOT}/bin/armv7a-linux-androideabi${ANDROID_NATIVE_API_LEVEL}-clang)
35-
SET(CXX ${ANDROID_TOOLCHAIN_ROOT}/bin/armv7a-linux-androideabi${ANDROID_NATIVE_API_LEVEL}-clang++)
36-
SET(HOST_TRIPLE armv7a-linux-androideabi)
37-
elseif(ANDROID_ABI STREQUAL arm64-v8a)
38-
SET(AS ${ANDROID_TOOLCHAIN_ROOT}/bin/aarch64-linux-android-as)
39-
SET(CC ${ANDROID_TOOLCHAIN_ROOT}/bin/aarch64-linux-android${ANDROID_NATIVE_API_LEVEL}-clang)
40-
SET(CXX ${ANDROID_TOOLCHAIN_ROOT}/bin/aarch64-linux-android${ANDROID_NATIVE_API_LEVEL}-clang++)
41-
SET(HOST_TRIPLE aarch64-linux-android)
42-
elseif(ANDROID_ABI STREQUAL x86)
43-
SET(AS ${ANDROID_TOOLCHAIN_ROOT}/bin/x86-linux-android-as)
44-
SET(CC ${ANDROID_TOOLCHAIN_ROOT}/bin/i686-linux-android${ANDROID_NATIVE_API_LEVEL}-clang)
45-
SET(CXX ${ANDROID_TOOLCHAIN_ROOT}/bin/i686-linux-android${ANDROID_NATIVE_API_LEVEL}-clang++)
46-
SET(HOST_TRIPLE i686-linux-android)
47-
elseif(ANDROID_ABI STREQUAL x86_64)
48-
SET(AS ${ANDROID_TOOLCHAIN_ROOT}/bin/x86_64-linux-android-as)
49-
SET(CC ${ANDROID_TOOLCHAIN_ROOT}/bin/x86_64-linux-android${ANDROID_NATIVE_API_LEVEL}-clang)
50-
SET(CXX ${ANDROID_TOOLCHAIN_ROOT}/bin/x86_64-linux-android${ANDROID_NATIVE_API_LEVEL}-clang++)
51-
SET(HOST_TRIPLE x86_64-linux-android)
52-
else()
53-
message(FATAL_ERROR "Invalid Android ABI: ${ANDROID_ABI}.")
54-
endif()
55-
else()
56-
#SET(AS @TODO: set AS binary)
57-
SET(CC ${CMAKE_C_COMPILER})
58-
SET(CXX ${CMAKE_CXX_COMPILER})
39+
STRING(REPLACE "-march=armv7-a" "" CFLAGS "${CFLAGS}")
40+
STRING(REPLACE "-march=armv7-a" "" CXXFLAGS "${CXXFLAGS}")
5941
endif()

3rdparty/EPAutotools.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
include(CompilerFlags.cmake)
2+
include(CompilerBinaries.cmake)
23
include(ProcessorCount)
34

45
function(ExternalProjectAutotools EXTERNAL_PROJECT_NAME)

3rdparty/EPCMake.cmake

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ function(GetCMakeArguments OUTPUT_VAR)
2626
SET(${OUTPUT_VAR} ${CMAKE_ARGS} PARENT_SCOPE)
2727
endfunction(GetCMakeArguments)
2828

29+
if(DEFINED CMAKE_TOOLCHAIN_FILE)
30+
SET(CompilerFlagsCMAKE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/CompilerFlags.cmake)
31+
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CMakeToolchainWrapper.in ${CMAKE_CURRENT_SOURCE_DIR}/CMakeToolchainWrapper.cmake @ONLY)
32+
endif()
33+
2934
function(ExternalProjectCMake EXTERNAL_PROJECT_NAME)
3035
# Check both pkg-config and find-cmake
3136
find_package(${EXTERNAL_PROJECT_NAME} QUIET)
@@ -44,20 +49,25 @@ function(ExternalProjectCMake EXTERNAL_PROJECT_NAME)
4449
FilterDependsList(EPCM_DEPENDS)
4550

4651
GetCMakeArguments("EPCM_CMAKE_ARGUMENTS"
47-
FORCED_ARGUMENTS "CMAKE_TOOLCHAIN_FILE" "CMAKE_VERBOSE_MAKEFILE" "CMAKE_BUILD_TYPE"
48-
IGNORED_ARGUMENTS "CMAKE_LIBRARY_OUTPUT_DIRECTORY")
52+
FORCED_ARGUMENTS "CMAKE_VERBOSE_MAKEFILE" "CMAKE_BUILD_TYPE"
53+
IGNORED_ARGUMENTS "CMAKE_LIBRARY_OUTPUT_DIRECTORY" "CMAKE_TOOLCHAIN_FILE" )
4954

5055
if (NOT BUILD_SHARED_LIBS)
5156
SET(SHARED_LIBS_ARGUMENT -DBUILD_SHARED_LIBS=OFF)
5257
endif (NOT BUILD_SHARED_LIBS)
5358

59+
if (DEFINED CompilerFlagsCMAKE_FILE)
60+
SET(ToolchainWrapper -DCMAKE_TOOLCHAIN_FILE=${CMAKE_CURRENT_SOURCE_DIR}/CMakeToolchainWrapper.cmake)
61+
endif()
62+
5463
MESSAGE(STATUS "ExternalProjectCMake_ADD ${EXTERNAL_PROJECT_NAME}")
5564
ExternalProject_Add(${EXTERNAL_PROJECT_NAME}
5665
${EPCM_DEPENDS}
5766
URL ${EPCM_URL}
5867
URL_HASH ${EPCM_URL_HASH}
5968

6069
CMAKE_ARGS ${EPCM_CMAKE_ARGUMENTS}
70+
${ToolchainWrapper}
6171
-DCMAKE_PREFIX_PATH=${THIRDPARTY_PREFIX}
6272
-DCMAKE_INSTALL_PREFIX=${THIRDPARTY_PREFIX}
6373
-DCMAKE_FIND_ROOT_PATH=${THIRDPARTY_PREFIX}

3rdparty/EPMeson.cmake

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
include(CompilerFlags.cmake)
2+
include(CompilerBinaries.cmake)
23

34
if (ANDROID)
45
if(ANDROID_ABI STREQUAL armeabi-v7a)
@@ -63,18 +64,6 @@ function(ExternalProjectMeson EXTERNAL_PROJECT_NAME)
6364
message(FATAL_ERROR "Unknown build type:" ${CMAKE_BUILD_TYPE})
6465
endif()
6566

66-
# Filter out unsupported arguments from FLAGS
67-
STRING(REPLACE "-no-canonical-prefixes" " " MESON_CFLAGS ${CFLAGS})
68-
STRING(REPLACE "-no-canonical-prefixes" " " MESON_CXXFLAGS ${CXXFLAGS})
69-
70-
# https://github.com/android-ndk/ndk/issues/884
71-
STRING(REPLACE "-fno-addrsig" " " MESON_CFLAGS ${MESON_CFLAGS})
72-
STRING(REPLACE "-fno-addrsig" " " MESON_CXXFLAGS ${MESON_CXXFLAGS})
73-
74-
# Fails to build with march=armv7-a during configure stage
75-
STRING(REPLACE "-march=armv7-a" "" MESON_CFLAGS ${MESON_CFLAGS})
76-
STRING(REPLACE "-march=armv7-a" "" MESON_CXXFLAGS ${MESON_CXXFLAGS})
77-
7867
SET(MESON_ENV
7968
# https://github.com/mesonbuild/meson/issues/217
8069
# find_library is now cc.find_library and now uses the linker to check if a particular library is available (similar to how AC_CHECK_LIB does it). This means you can set the LIBRARY_PATH env variable (when using gcc/clang and the LIBPATH env variable when using MSVC) to point to your "library providing" root. It also accepts a colon-separated list of directories. This is how almost everyone does non-default-linker-search-path library searching and linking.

CMakeLists.txt

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -61,21 +61,9 @@ set(PDF2HTMLEX_LIBS ${PDF2HTMLEX_LIBS} ${FONTFORGE_LIBRARIES})
6161

6262
if (ANDROID)
6363
if(CMAKE_BUILD_TYPE STREQUAL MinSizeRel)
64-
STRING(REPLACE "-g " " " CMAKE_C_FLAGS ${CMAKE_C_FLAGS})
65-
STRING(REPLACE "-g " " " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
64+
STRING(REPLACE "-g" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
65+
STRING(REPLACE "-g" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
6666
endif()
67-
68-
# -flto does not work with -Os on Android
69-
# https://github.com/android-ndk/ndk/issues/721
70-
STRING(REPLACE "-Os " "-O2 " CMAKE_C_FLAGS_MINSIZEREL ${CMAKE_C_FLAGS_MINSIZEREL})
71-
STRING(REPLACE "-Os " "-O2 " CMAKE_CXX_FLAGS_MINSIZEREL ${CMAKE_CXX_FLAGS_MINSIZEREL})
72-
73-
STRING(APPEND CMAKE_C_FLAGS_MINSIZEREL " -flto=full ")
74-
STRING(APPEND CMAKE_CXX_FLAGS_MINSIZEREL " -flto=full ")
75-
STRING(APPEND CMAKE_EXE_LINKER_FLAGS_MINSIZEREL " -flto=full ")
76-
STRING(APPEND CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL " -flto=full ")
77-
STRING(APPEND CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL " -flto=full ")
78-
STRING(APPEND CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL " -flto=full ")
7967
else()
8068
# debug build flags (overwrite default cmake debug flags)
8169
set(CMAKE_C_FLAGS_DEBUG "-ggdb -pg")

0 commit comments

Comments
 (0)