python: Fixing builds as importable module
Signed-off-by: David Shah <davey1576@gmail.com>
This commit is contained in:
parent
7f330af9f3
commit
c16a971c0f
@ -83,6 +83,7 @@ foreach (family ${FAMILIES})
|
|||||||
add_executable(nextpnr-${family} ${COMMON_FILES} ${${ufamily}_FILES} ${GUI_SOURCE_FILES})
|
add_executable(nextpnr-${family} ${COMMON_FILES} ${${ufamily}_FILES} ${GUI_SOURCE_FILES})
|
||||||
# Add the importable Python module target
|
# Add the importable Python module target
|
||||||
PYTHON_ADD_MODULE(nextpnrpy_${family} ${COMMON_FILES} ${${ufamily}_FILES})
|
PYTHON_ADD_MODULE(nextpnrpy_${family} ${COMMON_FILES} ${${ufamily}_FILES})
|
||||||
|
target_compile_definitions(nextpnrpy_${family} PRIVATE PYTHON_MODULE)
|
||||||
# Add any new per-architecture targets here
|
# Add any new per-architecture targets here
|
||||||
|
|
||||||
# Set ${family_targets} to the list of targets being build for this family
|
# Set ${family_targets} to the list of targets being build for this family
|
||||||
|
@ -113,6 +113,7 @@ static wchar_t *program;
|
|||||||
|
|
||||||
void init_python(const char *executable)
|
void init_python(const char *executable)
|
||||||
{
|
{
|
||||||
|
#ifndef PYTHON_MODULE
|
||||||
program = Py_DecodeLocale(executable, NULL);
|
program = Py_DecodeLocale(executable, NULL);
|
||||||
if (program == NULL) {
|
if (program == NULL) {
|
||||||
fprintf(stderr, "Fatal error: cannot decode executable filename\n");
|
fprintf(stderr, "Fatal error: cannot decode executable filename\n");
|
||||||
@ -129,12 +130,15 @@ void init_python(const char *executable)
|
|||||||
std::string perror_str = parse_python_exception();
|
std::string perror_str = parse_python_exception();
|
||||||
std::cout << "Error in Python: " << perror_str << std::endl;
|
std::cout << "Error in Python: " << perror_str << std::endl;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void deinit_python()
|
void deinit_python()
|
||||||
{
|
{
|
||||||
|
#ifndef PYTHON_MODULE
|
||||||
Py_Finalize();
|
Py_Finalize();
|
||||||
PyMem_RawFree(program);
|
PyMem_RawFree(program);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void execute_python_file(const char *python_file)
|
void execute_python_file(const char *python_file)
|
||||||
|
@ -17,6 +17,8 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef PYTHON_MODULE
|
||||||
|
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include "design.h"
|
#include "design.h"
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
@ -31,3 +33,5 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
return a.exec();
|
return a.exec();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@ -16,6 +16,9 @@
|
|||||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef PYTHON_MODULE
|
||||||
|
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <boost/program_options.hpp>
|
#include <boost/program_options.hpp>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
@ -263,3 +266,5 @@ int main(int argc, char *argv[])
|
|||||||
deinit_python();
|
deinit_python();
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
7
python/python_mod_test.py
Normal file
7
python/python_mod_test.py
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# Run: PYTHONPATH=. python3 python/python_mod_test.py
|
||||||
|
from nextpnrpy_ice40 import Chip, ChipArgs, iCE40Type
|
||||||
|
args = ChipArgs()
|
||||||
|
args.type = iCE40Type.HX1K
|
||||||
|
chip = Chip(args)
|
||||||
|
for wire in chip.getWires():
|
||||||
|
print(chip.getWireName(wire))
|
Loading…
Reference in New Issue
Block a user