all repos — mgba @ 4d49aa095b000f2f869d53d7e1c0f527d6858e88

mGBA Game Boy Advance Emulator

src/platform/python/CMakeLists.txt (view raw)

 1find_package(PythonLibs ${USE_PYTHON_VERSION})
 2find_package(PythonInterp ${USE_PYTHON_VERSION})
 3list(APPEND DEPENDENCY_LIB ${PYTHON_LIBRARIES})
 4include_directories(AFTER ${PYTHON_INCLUDE_DIRS})
 5
 6get_property(INCLUDE_DIRECTORIES DIRECTORY PROPERTY INCLUDE_DIRECTORIES)
 7set(INCLUDE_FLAGS)
 8set(INCLUDE_FLAGS_STR "")
 9foreach(DIR IN LISTS INCLUDE_DIRECTORIES)
10      list(APPEND INCLUDE_FLAGS "-I${DIR}")
11      set(INCLUDE_FLAGS_STR "${INCLUDE_FLAGS_STR} \"-I${DIR}\"")
12endforeach()
13
14file(GLOB PYTHON_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/*.h)
15
16add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lib.c
17                  COMMAND BINDIR=${CMAKE_CURRENT_BINARY_DIR}/.. CPPFLAGS="${INCLUDE_FLAGS}" ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/_builder.py
18                  COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/lib.c
19                  DEPENDS ${PYTHON_HEADERS}
20                  DEPENDS ${BINARY_NAME}
21                  DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/_builder.py)
22
23set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/lib.c PROPERTIES GENERATED ON)
24
25file(GLOB PYTHON_SRC ${CMAKE_CURRENT_SOURCE_DIR}/*.c)
26add_library(${BINARY_NAME}-pylib STATIC ${CMAKE_CURRENT_BINARY_DIR}/lib.c ${PYTHON_SRC})
27set_target_properties(${BINARY_NAME}-pylib PROPERTIES INCLUDE_DIRECTORIES "${CMAKE_BINARY_DIR};${INCLUDE_DIRECTORIES}")
28set_target_properties(${BINARY_NAME}-pylib PROPERTIES COMPILE_DEFINITIONS "${OS_DEFINES};${FEATURE_DEFINES};${FUNCTION_DEFINES}")
29
30add_custom_target(${BINARY_NAME}-py ALL
31                  COMMAND BINDIR=${CMAKE_CURRENT_BINARY_DIR}/.. LIBDIR=${CMAKE_CURRENT_BINARY_DIR}/.. CPPFLAGS="${INCLUDE_FLAGS}" ${PYTHON_EXECUTABLE} setup.py build -b ${CMAKE_CURRENT_BINARY_DIR}
32                  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
33                  DEPENDS ${BINARY_NAME}
34                  DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/setup.py
35                  DEPENDS ${PYTHON_HEADERS}
36                  DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/_builder.py
37                  DEPENDS ${BINARY_NAME}-pylib)
38
39add_custom_target(${BINARY_NAME}-py-install
40                  COMMAND BINDIR=${CMAKE_CURRENT_BINARY_DIR}/.. LIBDIR=${CMAKE_CURRENT_BINARY_DIR}/.. CPPFLAGS="${INCLUDE_FLAGS}" ${PYTHON_EXECUTABLE} setup.py install -b ${CMAKE_CURRENT_BINARY_DIR}
41                  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
42                  DEPENDS ${BINARY_NAME}-py)
43
44add_custom_target(${BINARY_NAME}-py-develop
45                  COMMAND BINDIR=${CMAKE_CURRENT_BINARY_DIR}/.. LIBDIR=${CMAKE_CURRENT_BINARY_DIR}/.. CPPFLAGS="${INCLUDE_FLAGS}" ${PYTHON_EXECUTABLE} setup.py develop -b ${CMAKE_CURRENT_BINARY_DIR}
46                  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
47                  DEPENDS ${BINARY_NAME}-py)
48
49add_custom_target(${BINARY_NAME}-py-bdist
50                  COMMAND BINDIR=${CMAKE_CURRENT_BINARY_DIR}/.. LIBDIR=${CMAKE_CURRENT_BINARY_DIR}/.. CPPFLAGS="${INCLUDE_FLAGS}" ${PYTHON_EXECUTABLE} setup.py bdist_wheel -b ${CMAKE_CURRENT_BINARY_DIR}
51                  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
52                  DEPENDS ${BINARY_NAME}-py)
53
54file(GLOB BASE_TESTS ${CMAKE_CURRENT_SOURCE_DIR}/test_*.py)
55file(GLOB SUBTESTS ${CMAKE_CURRENT_SOURCE_DIR}/tests/*/test_*.py)
56foreach(TEST IN LISTS BASE_TESTS SUBTESTS)
57	if(APPLE)
58		set(PATH DYLD_LIBRARY_PATH)
59	elseif(WIN32)
60		set(PATH PATH)
61	else()
62		set(PATH LD_LIBRARY_PATH)
63	endif()
64	string(REGEX REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/(tests/.*/)?test_" "" TEST_NAME "${TEST}")
65	string(REPLACE ".py" "" TEST_NAME "${TEST_NAME}")
66	add_test(NAME python-${TEST_NAME}
67               COMMAND ${PYTHON_EXECUTABLE} setup.py build -b ${CMAKE_CURRENT_BINARY_DIR} pytest --extras --addopts ${TEST}
68               WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
69	set_tests_properties(python-${TEST_NAME} PROPERTIES ENVIRONMENT "${PATH}=${CMAKE_CURRENT_BINARY_DIR}/..;BINDIR=${CMAKE_CURRENT_BINARY_DIR}/..;LIBDIR=${CMAKE_CURRENT_BINARY_DIR}/..;CPPFLAGS=${INCLUDE_FLAGS_STR}")
70endforeach()