Skip to content

Commit

Permalink
reusing object files between targets
Browse files Browse the repository at this point in the history
  • Loading branch information
chillenb committed Jul 5, 2024
1 parent 582ea85 commit 7fe7535
Showing 1 changed file with 30 additions and 18 deletions.
48 changes: 30 additions & 18 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ OPTION(ARCH_ARM64 "MacOS arch arm64" OFF)
OPTION(APPLE_ACC_SINGLE_PREC "Fix Apple Accelerate single prec" ON)
OPTION(BUILD_LIB "Build python block2.so" OFF)
OPTION(BUILD_CLIB "Build C++ block2.so" OFF)
OPTION(BUILD_EXECUTABLE "Build executable block2" ON)
OPTION(FORCE_LIB_ABS_PATH "Using absolute path when linking libraries" ON)
OPTION(USE_PCH "Use precompiled headers for faster builds" OFF)

Expand Down Expand Up @@ -593,8 +594,19 @@ ENDIF()

SET(B2_TARGETS "")


ADD_LIBRARY(b2_core OBJECT ${SRCS})
IF(${USE_PCH})
# these will be precompiled if USE_PCH is ON
FILE(GLOB COREHDRS src/instantiation/*.hpp)
TARGET_PRECOMPILE_HEADERS(b2_core PRIVATE ${COREHDRS})
ENDIF()
LIST(APPEND B2_TARGETS b2_core)



IF (${BUILD_LIB})
ADD_LIBRARY(b2_pylib MODULE ${PYBIND_SRCS} src/pybind.cpp ${SRCS})
ADD_LIBRARY(b2_pylib MODULE ${PYBIND_SRCS} src/pybind.cpp $<TARGET_OBJECTS:b2_core>)
SET_TARGET_PROPERTIES(b2_pylib PROPERTIES SUFFIX "${PYLIB_SUFFIX}" PREFIX "")
SET_TARGET_PROPERTIES(b2_pylib PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
LIST(APPEND B2_TARGETS b2_pylib)
Expand All @@ -611,26 +623,26 @@ IF (${BUILD_LIB})
TARGET_LINK_LIBRARIES(b2_pylib PUBLIC ${PYTHON_LIB_X})
ENDIF()
IF(${USE_PCH})
# these will be precompiled if USE_PCH is ON
FILE(GLOB COREHDRS src/instantiation/*.hpp)
TARGET_PRECOMPILE_HEADERS(b2_pylib PRIVATE ${COREHDRS})
TARGET_PRECOMPILE_HEADERS(b2_pylib REUSE_FROM b2_core)
ENDIF()
ELSEIF (${BUILD_TEST})
ENDIF()

IF (${BUILD_TEST})
ADD_EXECUTABLE(b2_testexe unit_test/debug_main.cpp)
SET_TARGET_PROPERTIES(b2_testexe PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
LIST(APPEND B2_TARGETS b2_testexe)
IF (NOT(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC"))
SET(OPT_FLAG ${OPT_FLAG} -Wno-error=attributes -Wno-attributes -Wno-deprecated-declarations)
ENDIF()
ELSEIF (${BUILD_CLIB})
ADD_LIBRARY(b2_clib SHARED ${SRCS})
ENDIF()

IF (${BUILD_CLIB})
ADD_LIBRARY(b2_clib SHARED $<TARGET_OBJECTS:b2_core>)
SET_TARGET_PROPERTIES(b2_clib PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
SET_TARGET_PROPERTIES(b2_clib PROPERTIES POSITION_INDEPENDENT_CODE 1)

IF(${USE_PCH})
# these will be precompiled if USE_PCH is ON
FILE(GLOB COREHDRS src/instantiation/*.hpp)
TARGET_PRECOMPILE_HEADERS(b2_clib PRIVATE ${COREHDRS})
TARGET_PRECOMPILE_HEADERS(b2_clib REUSE_FROM b2_core)
ENDIF()

LIST(APPEND B2_TARGETS b2_clib)
Expand All @@ -655,17 +667,19 @@ ELSEIF (${BUILD_CLIB})
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
DESTINATION "share/cmake/${PROJECT_NAME}")
ELSE()
ENDIF()

IF(${BUILD_EXECUTABLE})
IF (NOT ${USE_DMRG})
MESSAGE(FATAL_ERROR "-DUSE_DMRG must be ON for compiling src/main.cpp.")
ENDIF()
ADD_EXECUTABLE(b2_exe src/main.cpp ${SRCS})
ADD_EXECUTABLE(b2_exe src/main.cpp $<TARGET_OBJECTS:b2_core>)
SET_TARGET_PROPERTIES(b2_exe PROPERTIES OUTPUT_NAME ${PROJECT_NAME})

IF(${USE_PCH})
# these will be precompiled if USE_PCH is ON
FILE(GLOB COREHDRS src/instantiation/*.hpp)
TARGET_PRECOMPILE_HEADERS(b2_exe PRIVATE ${COREHDRS})
TARGET_PRECOMPILE_HEADERS(b2_exe REUSE_FROM b2_core)
ENDIF()

LIST(APPEND B2_TARGETS b2_exe)
ENDIF()

Expand Down Expand Up @@ -734,8 +748,6 @@ FOREACH(tgt ${B2_TARGETS})
TARGET_LINK_LIBRARIES(${tgt} PRIVATE ${PTHREAD} ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES} ${MKL_LIBS} ${MPI_LIBS} ${TBB_LIBS} ${BLIS_LIBS})
SET_TARGET_PROPERTIES(${tgt} PROPERTIES LINK_FLAGS "${ARCH_LINK_FLAGS} ${MPI_LINK_FLAGS}")



TARGET_INCLUDE_DIRECTORIES(${tgt} PUBLIC ${PYTHON_INCLUDE_DIRS} ${PYBIND_INCLUDE_DIRS}
${MKL_INCLUDE_DIR} ${MPI_INCLUDE_DIR} ${TBB_INCLUDE_DIR} ${BLIS_INCLUDE_DIR})
TARGET_COMPILE_OPTIONS(${tgt} BEFORE PRIVATE ${OPT_FLAG} ${ARCH_FLAG})
Expand All @@ -758,7 +770,7 @@ IF (${BUILD_TEST})
SET(OPT_FLAG ${OPT_FLAG} -fcompare-debug-second)
ENDIF()

ADD_EXECUTABLE(${PROJECT_NAME}_tests ${TSRCS} ${SRCS})
ADD_EXECUTABLE(${PROJECT_NAME}_tests ${TSRCS} $<TARGET_OBJECTS:b2_core>)
TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME}_tests PUBLIC src ${MKL_INCLUDE_DIR} ${MPI_INCLUDE_DIR} ${TBB_INCLUDE_DIR} ${BLIS_INCLUDE_DIR})
TARGET_LINK_LIBRARIES(${PROJECT_NAME}_tests ${GTEST_BOTH_LIBRARIES} ${PTHREAD} ${MPI_LIBS} ${TBB_LIBS} ${BLIS_LIBS})
TARGET_COMPILE_OPTIONS(${PROJECT_NAME}_tests BEFORE PUBLIC ${ARCH_FLAG} ${OPT_FLAG} ${MKL_FLAG} ${MPI_FLAG}
Expand Down

0 comments on commit 7fe7535

Please sign in to comment.