aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwhitequark <whitequark@whitequark.org>2019-06-26 21:31:24 +0000
committerwhitequark <whitequark@whitequark.org>2019-06-26 21:31:24 +0000
commit1b3c8ea9c1384882063203f35f0f66f60025f62c (patch)
tree755f98529f884b7f7b8180e6175bdffcf31782d8
parent640285755e4c59eb14c8664e10a62653f2892e15 (diff)
downloadnextpnr-1b3c8ea9c1384882063203f35f0f66f60025f62c.tar.gz
nextpnr-1b3c8ea9c1384882063203f35f0f66f60025f62c.tar.bz2
nextpnr-1b3c8ea9c1384882063203f35f0f66f60025f62c.zip
CMake: serialize chipdb generation by default.
Fixes #296.
-rw-r--r--CMakeLists.txt9
-rw-r--r--ecp5/family.cmake12
-rw-r--r--ice40/family.cmake12
3 files changed, 25 insertions, 8 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ade76d60..9ec078e2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -10,6 +10,7 @@ option(USE_OPENMP "Use OpenMP to accelerate analytic placer" OFF)
option(COVERAGE "Add code coverage info" OFF)
option(STATIC_BUILD "Create static build" OFF)
option(EXTERNAL_CHIPDB "Create build with pre-built chipdb binaries" OFF)
+option(SERIALIZE_CHIPDB "Never build chipdb in parallel to reduce peak memory use" ON)
set(link_param "")
if (STATIC_BUILD)
@@ -209,7 +210,7 @@ include(bba/bba.cmake)
foreach (family ${ARCH})
message(STATUS "Configuring architecture : ${family}")
string(TOUPPER ${family} ufamily)
- aux_source_directory(${family}/ ${ufamily}_FILES)
+ aux_source_directory(${family}/ ${ufamily}_FILES)
if (BUILD_GUI)
add_subdirectory(gui ${CMAKE_CURRENT_BINARY_DIR}/generated/gui/${family} EXCLUDE_FROM_ALL)
@@ -219,14 +220,14 @@ foreach (family ${ARCH})
add_executable(nextpnr-${family} ${COMMON_FILES} ${${ufamily}_FILES})
install(TARGETS nextpnr-${family} RUNTIME DESTINATION bin)
target_compile_definitions(nextpnr-${family} PRIVATE MAIN_EXECUTABLE)
-
+
# Add any new per-architecture targets here
if (BUILD_TESTS)
if (COVERAGE)
APPEND_COVERAGE_COMPILER_FLAGS()
set(COVERAGE_LCOV_EXCLUDES '/usr/include/*' '3rdparty/*' 'generated/*' 'bba/*' 'tests/*')
SETUP_TARGET_FOR_COVERAGE_LCOV(
- NAME ${family}-coverage
+ NAME ${family}-coverage
EXECUTABLE nextpnr-${family}-test
DEPENDENCIES nextpnr-${family}-test
)
@@ -247,7 +248,7 @@ foreach (family ${ARCH})
# Set ${family_targets} to the list of targets being build for this family
set(family_targets nextpnr-${family})
-
+
if (BUILD_TESTS)
set(family_targets ${family_targets} nextpnr-${family}-test)
endif()
diff --git a/ecp5/family.cmake b/ecp5/family.cmake
index 22ded412..596f0924 100644
--- a/ecp5/family.cmake
+++ b/ecp5/family.cmake
@@ -35,18 +35,22 @@ if (NOT EXTERNAL_CHIPDB)
if (MSVC)
target_sources(ecp5_chipdb PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/ecp5/resource/embed.cc)
set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/ecp5/resources/chipdb.rc PROPERTIES LANGUAGE RC)
+ set(PREV_DEV_CC_BBA_DB)
foreach (dev ${devices})
set(DEV_CC_DB ${CMAKE_CURRENT_SOURCE_DIR}/ecp5/chipdbs/chipdb-${dev}.bin)
set(DEV_CC_BBA_DB ${CMAKE_CURRENT_SOURCE_DIR}/ecp5/chipdbs/chipdb-${dev}.bba)
set(DEV_CONSTIDS_INC ${CMAKE_CURRENT_SOURCE_DIR}/ecp5/constids.inc)
add_custom_command(OUTPUT ${DEV_CC_BBA_DB}
COMMAND ${ENV_CMD} python3 ${DB_PY} -p ${DEV_CONSTIDS_INC} ${dev} > ${DEV_CC_BBA_DB}
- DEPENDS ${DB_PY}
+ DEPENDS ${DB_PY} ${PREV_DEV_CC_BBA_DB}
)
add_custom_command(OUTPUT ${DEV_CC_DB}
COMMAND bbasm ${DEV_CC_BBA_DB} ${DEV_CC_DB}
DEPENDS bbasm ${DEV_CC_BBA_DB}
)
+ if (SERIALIZE_CHIPDB)
+ set(PREV_DEV_CC_BBA_DB ${DEV_CC_BBA_DB})
+ endif()
target_sources(ecp5_chipdb PRIVATE ${DEV_CC_DB})
set_source_files_properties(${DEV_CC_DB} PROPERTIES HEADER_FILE_ONLY TRUE)
foreach (target ${family_targets})
@@ -55,6 +59,7 @@ if (NOT EXTERNAL_CHIPDB)
endforeach()
else()
target_compile_options(ecp5_chipdb PRIVATE -g0 -O0 -w)
+ set(PREV_DEV_CC_BBA_DB)
foreach (dev ${devices})
set(DEV_CC_DB ${CMAKE_CURRENT_SOURCE_DIR}/ecp5/chipdbs/chipdb-${dev}.cc)
set(DEV_CC_BBA_DB ${CMAKE_CURRENT_SOURCE_DIR}/ecp5/chipdbs/chipdb-${dev}.bba)
@@ -62,13 +67,16 @@ if (NOT EXTERNAL_CHIPDB)
add_custom_command(OUTPUT ${DEV_CC_BBA_DB}
COMMAND ${ENV_CMD} python3 ${DB_PY} -p ${DEV_CONSTIDS_INC} ${dev} > ${DEV_CC_BBA_DB}.new
COMMAND mv ${DEV_CC_BBA_DB}.new ${DEV_CC_BBA_DB}
- DEPENDS ${DB_PY}
+ DEPENDS ${DB_PY} ${PREV_DEV_CC_BBA_DB}
)
add_custom_command(OUTPUT ${DEV_CC_DB}
COMMAND bbasm --c ${DEV_CC_BBA_DB} ${DEV_CC_DB}.new
COMMAND mv ${DEV_CC_DB}.new ${DEV_CC_DB}
DEPENDS bbasm ${DEV_CC_BBA_DB}
)
+ if (SERIALIZE_CHIPDB)
+ set(PREV_DEV_CC_BBA_DB ${DEV_CC_BBA_DB})
+ endif()
target_sources(ecp5_chipdb PRIVATE ${DEV_CC_DB})
foreach (target ${family_targets})
target_sources(${target} PRIVATE $<TARGET_OBJECTS:ecp5_chipdb>)
diff --git a/ice40/family.cmake b/ice40/family.cmake
index ddf99139..6c46f459 100644
--- a/ice40/family.cmake
+++ b/ice40/family.cmake
@@ -19,6 +19,7 @@ if (NOT EXTERNAL_CHIPDB)
if (MSVC)
target_sources(ice40_chipdb PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/ice40/resource/embed.cc)
set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/ice40/resources/chipdb.rc PROPERTIES LANGUAGE RC)
+ set(PREV_DEV_CC_BBA_DB)
foreach (dev ${devices})
if (dev STREQUAL "5k")
set(OPT_FAST "")
@@ -40,12 +41,15 @@ if (NOT EXTERNAL_CHIPDB)
set(DEV_GFXH ${CMAKE_CURRENT_SOURCE_DIR}/ice40/gfx.h)
add_custom_command(OUTPUT ${DEV_CC_BBA_DB}
COMMAND ${PYTHON_EXECUTABLE} ${DB_PY} -p ${DEV_CONSTIDS_INC} -g ${DEV_GFXH} ${OPT_FAST} ${OPT_SLOW} ${DEV_TXT_DB} > ${DEV_CC_BBA_DB}
- DEPENDS ${DEV_CONSTIDS_INC} ${DEV_GFXH} ${DEV_TXT_DB} ${DB_PY}
+ DEPENDS ${DEV_CONSTIDS_INC} ${DEV_GFXH} ${DEV_TXT_DB} ${DB_PY} ${PREV_DEV_CC_BBA_DB}
)
add_custom_command(OUTPUT ${DEV_CC_DB}
COMMAND bbasm ${DEV_CC_BBA_DB} ${DEV_CC_DB}
DEPENDS bbasm ${DEV_CC_BBA_DB}
)
+ if (SERIALIZE_CHIPDB)
+ set(PREV_DEV_CC_BBA_DB ${DEV_CC_BBA_DB})
+ endif()
target_sources(ice40_chipdb PRIVATE ${DEV_CC_DB})
set_source_files_properties(${DEV_CC_DB} PROPERTIES HEADER_FILE_ONLY TRUE)
foreach (target ${family_targets})
@@ -54,6 +58,7 @@ if (NOT EXTERNAL_CHIPDB)
endforeach()
else()
target_compile_options(ice40_chipdb PRIVATE -g0 -O0 -w)
+ set(PREV_DEV_CC_BBA_DB)
foreach (dev ${devices})
if (dev STREQUAL "5k")
set(OPT_FAST "")
@@ -76,13 +81,16 @@ if (NOT EXTERNAL_CHIPDB)
add_custom_command(OUTPUT ${DEV_CC_BBA_DB}
COMMAND ${PYTHON_EXECUTABLE} ${DB_PY} -p ${DEV_CONSTIDS_INC} -g ${DEV_GFXH} ${OPT_FAST} ${OPT_SLOW} ${DEV_TXT_DB} > ${DEV_CC_BBA_DB}.new
COMMAND mv ${DEV_CC_BBA_DB}.new ${DEV_CC_BBA_DB}
- DEPENDS ${DEV_CONSTIDS_INC} ${DEV_GFXH} ${DEV_TXT_DB} ${DB_PY}
+ DEPENDS ${DEV_CONSTIDS_INC} ${DEV_GFXH} ${DEV_TXT_DB} ${DB_PY} ${PREV_DEV_CC_BBA_DB}
)
add_custom_command(OUTPUT ${DEV_CC_DB}
COMMAND bbasm --c ${DEV_CC_BBA_DB} ${DEV_CC_DB}.new
COMMAND mv ${DEV_CC_DB}.new ${DEV_CC_DB}
DEPENDS bbasm ${DEV_CC_BBA_DB}
)
+ if (SERIALIZE_CHIPDB)
+ set(PREV_DEV_CC_BBA_DB ${DEV_CC_BBA_DB})
+ endif()
target_sources(ice40_chipdb PRIVATE ${DEV_CC_DB})
foreach (target ${family_targets})
target_sources(${target} PRIVATE $<TARGET_OBJECTS:ice40_chipdb>)