diff --git a/CMakeLists.txt b/CMakeLists.txt index a82722c0..23b1d35e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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) @@ -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 $) 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) @@ -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 $) 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) @@ -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 $) 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() @@ -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}) @@ -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_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}