Skip to content
This repository has been archived by the owner on Sep 11, 2023. It is now read-only.

Commit

Permalink
cmake: Remove useless OBJECT targets
Browse files Browse the repository at this point in the history
The way they were used prevented the use of modern CMake features, such
as INTERFACE properties. They would be added to the object targets,
instead of the library targets, which make them useless for the
dependees of the library target.

The object targets were originally used by tests that need to link to
internal symbols. These tests targets have been modified to simply link
to the static version of the libraries.

Signed-off-by: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
  • Loading branch information
Andrew Gunnerson committed Jun 2, 2017
1 parent d15c1cc commit a07cf59
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 102 deletions.
12 changes: 4 additions & 8 deletions bootimgtool/CMakeLists.txt
Expand Up @@ -12,29 +12,25 @@ endif()

foreach(variant ${variants})
set(bin_target bootimgtool-${variant})
set(obj_target ${bin_target}-obj)

# Build objects
add_library(${obj_target} OBJECT ${BOOTIMGTOOL_SOURCES})
# Build binary
add_executable(${bin_target} ${BOOTIMGTOOL_SOURCES})

# Win32 DLL import
if(${variant} STREQUAL shared)
target_compile_definitions(${obj_target} PRIVATE -DMB_DYNAMIC_LINK)
target_compile_definitions(${bin_target} PRIVATE -DMB_DYNAMIC_LINK)
endif()

# Target C++11
if(NOT MSVC)
set_target_properties(
${obj_target}
${bin_target}
PROPERTIES
CXX_STANDARD 11
CXX_STANDARD_REQUIRED 1
)
endif()

# Build binary
add_executable(${bin_target} $<TARGET_OBJECTS:${obj_target}>)

# Set binary name
set_target_properties(${bin_target} PROPERTIES OUTPUT_NAME bootimgtool)

Expand Down
90 changes: 42 additions & 48 deletions libmbbootimg/CMakeLists.txt
Expand Up @@ -58,42 +58,44 @@ elseif(${MBP_BUILD_TARGET} STREQUAL android-app
list(APPEND variants shared)
endif()

# If this library is being built and we're building tests, then enable the
# static library
if(variants AND MBP_ENABLE_TESTS AND NOT static IN_LIST variants)
list(APPEND variants static)
endif()

# Build libraries
foreach(variant ${variants})
set(lib_target mbbootimg-${variant})
set(obj_target ${lib_target}-obj)

# Build objects
add_library(${obj_target} OBJECT ${MBBOOTIMG_SOURCES})
# Build library
if(${variant} STREQUAL shared)
add_library(${lib_target} SHARED ${MBBOOTIMG_SOURCES})
elseif(${variant} STREQUAL static)
add_library(${lib_target} STATIC ${MBBOOTIMG_SOURCES})
endif()

# Export symbols
target_compile_definitions(${obj_target} PRIVATE -DMB_LIBRARY)
target_compile_definitions(${lib_target} PRIVATE -DMB_LIBRARY)

# Win32 DLL export
if(${variant} STREQUAL shared)
target_compile_definitions(${obj_target} PRIVATE -DMB_DYNAMIC_LINK)
target_compile_definitions(${lib_target} PRIVATE -DMB_DYNAMIC_LINK)
endif()

# Build with -fPIC
set_target_properties(${obj_target} PROPERTIES POSITION_INDEPENDENT_CODE 1)
set_target_properties(${lib_target} PROPERTIES POSITION_INDEPENDENT_CODE 1)

# Target C++11
if(NOT MSVC)
set_target_properties(
${obj_target}
${lib_target}
PROPERTIES
CXX_STANDARD 11
CXX_STANDARD_REQUIRED 1
)
endif()

# Build library
if(${variant} STREQUAL shared)
add_library(${lib_target} SHARED $<TARGET_OBJECTS:${obj_target}>)
elseif(${variant} STREQUAL static)
add_library(${lib_target} STATIC $<TARGET_OBJECTS:${obj_target}>)
endif()

# Set library name
set_target_properties(${lib_target} PROPERTIES OUTPUT_NAME mbbootimg)

Expand All @@ -118,43 +120,35 @@ foreach(variant ${variants})
endforeach()

# Build tests
if(MBP_ENABLE_TESTS)
foreach(variant ${variants})
# Link against objects so we don't have to worry about hidden symbols
set(obj_target mbbootimg-${variant}-obj)
if(variants AND MBP_ENABLE_TESTS)
# Build tests
add_executable(
mbbootimg_tests
${MBBOOTIMG_TESTS_SOURCES}
)

# Build tests
add_executable(
mbbootimg_tests
${MBBOOTIMG_TESTS_SOURCES}
$<TARGET_OBJECTS:${obj_target}>
)
# Link dependencies
target_link_libraries(
mbbootimg_tests
mbbootimg-static
mbcommon-static
${MBP_OPENSSL_CRYPTO_LIBRARY}
${GTEST_BOTH_LIBRARIES}
)

# Link dependencies
target_link_libraries(
# Target C++11
if(NOT MSVC)
set_target_properties(
mbbootimg_tests
mbcommon-${variant}
${MBP_OPENSSL_CRYPTO_LIBRARY}
${GTEST_BOTH_LIBRARIES}
)

# Target C++11
if(NOT MSVC)
set_target_properties(
mbbootimg_tests
PROPERTIES
CXX_STANDARD 11
CXX_STANDARD_REQUIRED 1
)
endif()

# Add to ctest
add_test(
NAME mbbootimg_tests
COMMAND mbbootimg_tests
PROPERTIES
CXX_STANDARD 11
CXX_STANDARD_REQUIRED 1
)
endif()

# Only need to build the tests once
break()
endforeach()
# Add to ctest
add_test(
NAME mbbootimg_tests
COMMAND mbbootimg_tests
)
endif()
86 changes: 40 additions & 46 deletions libmbcommon/CMakeLists.txt
Expand Up @@ -75,42 +75,44 @@ elseif(${MBP_BUILD_TARGET} STREQUAL android-app
list(APPEND variants shared)
endif()

# If this library is being built and we're building tests, then enable the
# static library
if(variants AND MBP_ENABLE_TESTS AND NOT static IN_LIST variants)
list(APPEND variants static)
endif()

# Build libraries
foreach(variant ${variants})
set(lib_target mbcommon-${variant})
set(obj_target ${lib_target}-obj)

# Build objects
add_library(${obj_target} OBJECT ${MBCOMMON_SOURCES})
# Build library
if(${variant} STREQUAL shared)
add_library(${lib_target} SHARED ${MBCOMMON_SOURCES})
elseif(${variant} STREQUAL static)
add_library(${lib_target} STATIC ${MBCOMMON_SOURCES})
endif()

# Export symbols
target_compile_definitions(${obj_target} PRIVATE -DMB_LIBRARY)
target_compile_definitions(${lib_target} PRIVATE -DMB_LIBRARY)

# Win32 DLL export
if(${variant} STREQUAL shared)
target_compile_definitions(${obj_target} PRIVATE -DMB_DYNAMIC_LINK)
target_compile_definitions(${lib_target} PRIVATE -DMB_DYNAMIC_LINK)
endif()

# Build with -fPIC
set_target_properties(${obj_target} PROPERTIES POSITION_INDEPENDENT_CODE 1)
set_target_properties(${lib_target} PROPERTIES POSITION_INDEPENDENT_CODE 1)

# Target C++11
if(NOT MSVC)
set_target_properties(
${obj_target}
${lib_target}
PROPERTIES
CXX_STANDARD 11
CXX_STANDARD_REQUIRED 1
)
endif()

# Build library
if(${variant} STREQUAL shared)
add_library(${lib_target} SHARED $<TARGET_OBJECTS:${obj_target}>)
elseif(${variant} STREQUAL static)
add_library(${lib_target} STATIC $<TARGET_OBJECTS:${obj_target}>)
endif()

# Set library name
set_target_properties(${lib_target} PROPERTIES OUTPUT_NAME mbcommon)

Expand All @@ -134,41 +136,33 @@ foreach(variant ${variants})
endforeach()

# Build tests
if(MBP_ENABLE_TESTS)
foreach(variant ${variants})
# Link against objects so we don't have to worry about hidden symbols
set(obj_target mbcommon-${variant}-obj)
if(variants AND MBP_ENABLE_TESTS)
# Build tests
add_executable(
mbcommon_tests
${MBCOMMON_TESTS_SOURCES}
)

# Build tests
add_executable(
mbcommon_tests
${MBCOMMON_TESTS_SOURCES}
$<TARGET_OBJECTS:${obj_target}>
)
# Link dependencies
target_link_libraries(
mbcommon_tests
mbcommon-static
${GTEST_BOTH_LIBRARIES}
)

# Link dependencies
target_link_libraries(
# Target C++11
if(NOT MSVC)
set_target_properties(
mbcommon_tests
${GTEST_BOTH_LIBRARIES}
)

# Target C++11
if(NOT MSVC)
set_target_properties(
mbcommon_tests
PROPERTIES
CXX_STANDARD 11
CXX_STANDARD_REQUIRED 1
)
endif()

# Add to ctest
add_test(
NAME mbcommon_tests
COMMAND mbcommon_tests
PROPERTIES
CXX_STANDARD 11
CXX_STANDARD_REQUIRED 1
)
endif()

# Only need to build the tests once
break()
endforeach()
# Add to ctest
add_test(
NAME mbcommon_tests
COMMAND mbcommon_tests
)
endif()

0 comments on commit a07cf59

Please sign in to comment.