2020-06-05 16:46:59 +08:00
if ( BUILD_GUI )
message ( FATAL_ERROR "GUI support is not implemented for MachXO2." )
endif ( )
if ( NOT EXTERNAL_CHIPDB )
set ( devices 1200 )
set ( TRELLIS_PROGRAM_PREFIX "" CACHE STRING "Name prefix for trellis" )
if ( NOT DEFINED TRELLIS_INSTALL_PREFIX )
message ( STATUS "TRELLIS_INSTALL_PREFIX not defined using -DTRELLIS_INSTALL_PREFIX=/path-prefix/to/prjtrellis-installation. Defaulted to ${CMAKE_INSTALL_PREFIX}" )
set ( TRELLIS_INSTALL_PREFIX ${ CMAKE_INSTALL_PREFIX } )
endif ( )
if ( NOT DEFINED PYTRELLIS_LIBDIR )
find_library ( PYTRELLIS pytrellis.so
P A T H S $ { T R E L L I S _ I N S T A L L _ P R E F I X } / l i b / $ { T R E L L I S _ P R O G R A M _ P R E F I X } t r e l l i s
P A T H _ S U F F I X E S $ { T R E L L I S _ P R O G R A M _ P R E F I X } t r e l l i s
D O C " L o c a t i o n o f p y t r e l l i s l i b r a r y " )
if ( "${PYTRELLIS}" STREQUAL "PYTRELLIS-NOTFOUND" )
message ( FATAL_ERROR "Failed to locate pytrellis library!" )
endif ( )
get_filename_component ( PYTRELLIS_LIBDIR ${ PYTRELLIS } DIRECTORY )
endif ( )
set ( DB_PY ${ CMAKE_CURRENT_SOURCE_DIR } /machxo2/facade_import.py )
file ( MAKE_DIRECTORY ${ CMAKE_CURRENT_BINARY_DIR } /machxo2/chipdbs/ )
add_library ( machxo2_chipdb OBJECT ${ CMAKE_CURRENT_BINARY_DIR } /machxo2/chipdbs/ )
target_compile_definitions ( machxo2_chipdb PRIVATE NEXTPNR_NAMESPACE=nextpnr_ ${ family } )
target_include_directories ( machxo2_chipdb PRIVATE ${ family } / )
if ( CMAKE_HOST_WIN32 )
set ( ENV_CMD ${ CMAKE_COMMAND } -E env "PYTHONPATH=\" ${ PYTRELLIS_LIBDIR } \;${TRELLIS_INSTALL_PREFIX}/share/${TRELLIS_PROGRAM_PREFIX}trellis/util/common\;${TRELLIS_INSTALL_PREFIX}/share/${TRELLIS_PROGRAM_PREFIX}trellis/timing/util\"")
else ( )
set ( ENV_CMD ${ CMAKE_COMMAND } -E env "PYTHONPATH=${PYTRELLIS_LIBDIR}\:${TRELLIS_INSTALL_PREFIX}/share/${TRELLIS_PROGRAM_PREFIX}trellis/util/common:${TRELLIS_INSTALL_PREFIX}/share/${TRELLIS_PROGRAM_PREFIX}trellis/timing/util" )
endif ( )
if ( MSVC )
target_sources ( machxo2_chipdb PRIVATE ${ CMAKE_CURRENT_SOURCE_DIR } /machxo2/resource/embed.cc )
set_source_files_properties ( ${ CMAKE_CURRENT_SOURCE_DIR } /machxo2/resources/chipdb.rc PROPERTIES LANGUAGE RC )
set ( PREV_DEV_CC_BBA_DB )
foreach ( dev ${ devices } )
set ( DEV_CC_DB ${ CMAKE_CURRENT_BINARY_DIR } /machxo2/chipdbs/chipdb- ${ dev } .bin )
set ( DEV_CC_BBA_DB ${ CMAKE_CURRENT_BINARY_DIR } /machxo2/chipdbs/chipdb- ${ dev } .bba )
set ( DEV_CONSTIDS_INC ${ CMAKE_CURRENT_SOURCE_DIR } /machxo2/constids.inc )
if ( PREGENERATED_BBA_PATH )
add_custom_command ( OUTPUT ${ DEV_CC_DB }
C O M M A N D b b a s m $ { B B A S M _ E N D I A N _ F L A G } $ { P R E G E N E R A T E D _ B B A _ P A T H } / c h i p d b - $ { d e v } . b b a $ { D E V _ C C _ D B }
)
else ( )
add_custom_command ( OUTPUT ${ DEV_CC_BBA_DB }
C O M M A N D $ { E N V _ C M D } $ { P Y T H O N _ E X E C U T A B L E } $ { D B _ P Y } - p $ { D E V _ C O N S T I D S _ I N C } $ { d e v } > $ { D E V _ C C _ B B A _ D B }
D E P E N D S $ { D B _ P Y } $ { D E V _ C O N S T I D S _ I N C } $ { P R E V _ D E V _ C C _ B B A _ D B }
)
add_custom_command ( OUTPUT ${ DEV_CC_DB }
C O M M A N D b b a s m $ { B B A S M _ E N D I A N _ F L A G } $ { D E V _ C C _ B B A _ D B } $ { D E V _ C C _ D B }
D E P E N D S b b a s m $ { D E V _ C C _ B B A _ D B }
)
endif ( )
if ( SERIALIZE_CHIPDB )
set ( PREV_DEV_CC_BBA_DB ${ DEV_CC_BBA_DB } )
endif ( )
target_sources ( machxo2_chipdb PRIVATE ${ DEV_CC_DB } )
set_source_files_properties ( ${ DEV_CC_DB } PROPERTIES HEADER_FILE_ONLY TRUE )
foreach ( target ${ family_targets } )
target_sources ( ${ target } PRIVATE $< TARGET_OBJECTS:machxo2_chipdb > ${ CMAKE_CURRENT_SOURCE_DIR } /machxo2/resource/chipdb.rc )
endforeach ( )
endforeach ( )
else ( )
target_compile_options ( machxo2_chipdb PRIVATE -g0 -O0 -w )
set ( PREV_DEV_CC_BBA_DB )
foreach ( dev ${ devices } )
set ( DEV_CC_BBA_DB ${ CMAKE_CURRENT_BINARY_DIR } /machxo2/chipdbs/chipdb- ${ dev } .bba )
set ( DEV_CC_DB ${ CMAKE_CURRENT_BINARY_DIR } /machxo2/chipdbs/chipdb- ${ dev } .cc )
set ( DEV_BIN_DB ${ CMAKE_CURRENT_BINARY_DIR } /machxo2/chipdbs/chipdb- ${ dev } .bin )
set ( DEV_CONSTIDS_INC ${ CMAKE_CURRENT_SOURCE_DIR } /machxo2/constids.inc )
if ( PREGENERATED_BBA_PATH )
add_custom_command ( OUTPUT ${ DEV_CC_DB }
C O M M A N D b b a s m - - c $ { B B A S M _ E N D I A N _ F L A G } $ { P R E G E N E R A T E D _ B B A _ P A T H } / c h i p d b - $ { d e v } . b b a $ { D E V _ C C _ D B } . n e w
C O M M A N D m v $ { D E V _ C C _ D B } . n e w $ { D E V _ C C _ D B }
)
else ( )
add_custom_command ( OUTPUT ${ DEV_CC_BBA_DB }
C O M M A N D $ { E N V _ C M D } $ { P Y T H O N _ E X E C U T A B L E } $ { D B _ P Y } - p $ { D E V _ C O N S T I D S _ I N C } $ { d e v } > $ { D E V _ C C _ B B A _ D B } . n e w
C O M M A N D m v $ { D E V _ C C _ B B A _ D B } . n e w $ { D E V _ C C _ B B A _ D B }
D E P E N D S $ { D B _ P Y } $ { D E V _ C O N S T I D S _ I N C } $ { P R E V _ D E V _ C C _ B B A _ D B }
)
if ( USE_C_EMBED )
add_custom_command ( OUTPUT ${ DEV_CC_DB }
C O M M A N D b b a s m - - e $ { B B A S M _ E N D I A N _ F L A G } $ { D E V _ C C _ B B A _ D B } $ { D E V _ C C _ D B } . n e w $ { D E V _ B I N _ D B }
C O M M A N D m v $ { D E V _ C C _ D B } . n e w $ { D E V _ C C _ D B }
D E P E N D S b b a s m $ { D E V _ C C _ B B A _ D B }
)
else ( )
add_custom_command ( OUTPUT ${ DEV_CC_DB }
C O M M A N D b b a s m - - c $ { B B A S M _ E N D I A N _ F L A G } $ { D E V _ C C _ B B A _ D B } $ { D E V _ C C _ D B } . n e w
C O M M A N D m v $ { D E V _ C C _ D B } . n e w $ { D E V _ C C _ D B }
D E P E N D S b b a s m $ { D E V _ C C _ B B A _ D B }
)
endif ( )
endif ( )
if ( SERIALIZE_CHIPDB )
set ( PREV_DEV_CC_BBA_DB ${ DEV_CC_BBA_DB } )
endif ( )
target_sources ( machxo2_chipdb PRIVATE ${ DEV_CC_DB } )
foreach ( target ${ family_targets } )
target_sources ( ${ target } PRIVATE $< TARGET_OBJECTS:machxo2_chipdb > )
endforeach ( )
endforeach ( )
endif ( )
endif ( )