Add better support for proper installation after build (#2370)
- Add `--install` option to `tools/build.py`. - Make use of `--install` in `tools/run-tests.py` by testing the installed the executables instead of those in the build tree. Related changes: - Collect unit test binaries in the `tests` subdir of the build tree instead of `bin`. - The `ls`-based collection of the unit test binaries had some shortcomings hitherto unrevealed (it didn't filter for files so it could potentially "collect" dictionaries, too), which has now been replaced with a more stable `find`-based solution. JerryScript-DCO-1.0-Signed-off-by: Akos Kiss akiss@inf.u-szeged.hu
This commit is contained in:
+6
-11
@@ -131,17 +131,12 @@ message(STATUS "DOCTESTS " ${DOCTESTS})
|
||||
message(STATUS "FEATURE_INIT_FINI " ${FEATURE_INIT_FINI})
|
||||
|
||||
# Setup directories
|
||||
# Project binary dir
|
||||
set(PROJECT_BINARY_DIR "${CMAKE_BINARY_DIR}")
|
||||
|
||||
# Library output directory
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib/")
|
||||
|
||||
# Executable output directory
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin/")
|
||||
|
||||
# Archive targets output Directory
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib/")
|
||||
# Note: This mimics a conventional file system layout in the build directory for
|
||||
# the sake of convenient location of build artefacts. Proper installation to
|
||||
# traditional locations is also supported, e.g., to /usr/local.
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/")
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/")
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/")
|
||||
|
||||
# Remove rdynamic option
|
||||
set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS )
|
||||
|
||||
@@ -34,8 +34,8 @@ foreach(SOURCE_UNIT_TEST_MAIN ${SOURCE_UNIT_TEST_MAIN_MODULES})
|
||||
set(TARGET_NAME unit-${TARGET_NAME})
|
||||
|
||||
add_executable(${TARGET_NAME} ${SOURCE_UNIT_TEST_MAIN})
|
||||
set_property(TARGET ${TARGET_NAME}
|
||||
PROPERTY LINK_FLAGS "${LINKER_FLAGS_COMMON}")
|
||||
set_property(TARGET ${TARGET_NAME} PROPERTY LINK_FLAGS "${LINKER_FLAGS_COMMON}")
|
||||
set_property(TARGET ${TARGET_NAME} PROPERTY RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/tests")
|
||||
|
||||
target_link_libraries(${TARGET_NAME} jerry-core jerry-port-default-minimal)
|
||||
|
||||
|
||||
@@ -82,6 +82,7 @@ macro(doctest_add_executables NAME_PREFIX)
|
||||
add_dependencies(${TARGET_NAME} all-doc-files)
|
||||
set_property(TARGET ${TARGET_NAME} APPEND_STRING PROPERTY COMPILE_FLAGS "${COMPILE_FLAGS_DOCTEST}")
|
||||
set_property(TARGET ${TARGET_NAME} PROPERTY LINK_FLAGS "${LINKER_FLAGS_COMMON}")
|
||||
set_property(TARGET ${TARGET_NAME} PROPERTY RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/tests")
|
||||
target_link_libraries(${TARGET_NAME} jerry-ext jerry-core jerry-port-default-minimal)
|
||||
endforeach()
|
||||
endmacro()
|
||||
|
||||
@@ -28,8 +28,8 @@ foreach(SOURCE_UNIT_TEST_EXT ${SOURCE_UNIT_TEST_EXT_MODULES})
|
||||
set(TARGET_NAME unit-${TARGET_NAME})
|
||||
|
||||
add_executable(${TARGET_NAME} ${SOURCE_UNIT_TEST_EXT})
|
||||
set_property(TARGET ${TARGET_NAME}
|
||||
PROPERTY LINK_FLAGS "${LINKER_FLAGS_COMMON}")
|
||||
set_property(TARGET ${TARGET_NAME} PROPERTY LINK_FLAGS "${LINKER_FLAGS_COMMON}")
|
||||
set_property(TARGET ${TARGET_NAME} PROPERTY RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/tests")
|
||||
|
||||
target_link_libraries(${TARGET_NAME} jerry-ext jerry-core jerry-port-default-minimal)
|
||||
|
||||
|
||||
@@ -24,5 +24,6 @@ endif()
|
||||
|
||||
add_executable(${JERRYX_MODULE_UNITTEST_NAME} ${JERRYX_MODULE_UNIT_TEST_SOURCES})
|
||||
set_property(TARGET ${JERRYX_MODULE_UNITTEST_NAME} PROPERTY LINK_FLAGS "${LINKER_FLAGS_COMMON}")
|
||||
set_property(TARGET ${JERRYX_MODULE_UNITTEST_NAME} PROPERTY RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/tests")
|
||||
target_link_libraries(${JERRYX_MODULE_UNITTEST_NAME} jerry-ext jerry-core jerry-port-default-minimal)
|
||||
target_include_directories(${JERRYX_MODULE_UNITTEST_NAME} PRIVATE ${INCLUDE_UNIT_EXT})
|
||||
|
||||
@@ -26,8 +26,8 @@ foreach(SOURCE_UNIT_TEST_MAIN ${SOURCE_UNIT_TEST_MAIN_MODULES})
|
||||
set(TARGET_NAME unit-${TARGET_NAME})
|
||||
|
||||
add_executable(${TARGET_NAME} ${SOURCE_UNIT_TEST_MAIN})
|
||||
set_property(TARGET ${TARGET_NAME}
|
||||
PROPERTY LINK_FLAGS "${LINKER_FLAGS_COMMON}")
|
||||
set_property(TARGET ${TARGET_NAME} PROPERTY LINK_FLAGS "${LINKER_FLAGS_COMMON}")
|
||||
set_property(TARGET ${TARGET_NAME} PROPERTY RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/tests")
|
||||
|
||||
target_link_libraries(${TARGET_NAME} jerry-libm)
|
||||
if(JERRY_LIBC)
|
||||
|
||||
+20
-5
@@ -68,6 +68,8 @@ def get_arguments():
|
||||
help='enable error messages (%(choices)s; default: %(default)s)')
|
||||
parser.add_argument('--external-context', metavar='X', choices=['ON', 'OFF'], default='OFF', type=str.upper,
|
||||
help='enable external context (%(choices)s; default: %(default)s)')
|
||||
parser.add_argument('--install', metavar='DIR', nargs='?', default=None, const=False,
|
||||
help='install after build (default: don\'t install; default directory if install: OS-specific)')
|
||||
parser.add_argument('-j', '--jobs', metavar='N', action='store', type=int, default=multiprocessing.cpu_count() + 1,
|
||||
help='Allowed N build jobs at once (default: %(default)s)')
|
||||
parser.add_argument('--jerry-cmdline', metavar='X', choices=['ON', 'OFF'], default='ON', type=str.upper,
|
||||
@@ -206,18 +208,27 @@ def configure_output_dir(arguments):
|
||||
if not os.path.exists(arguments.builddir):
|
||||
os.makedirs(arguments.builddir)
|
||||
|
||||
def configure_build(arguments):
|
||||
def configure_jerry(arguments):
|
||||
configure_output_dir(arguments)
|
||||
|
||||
build_options = generate_build_options(arguments)
|
||||
|
||||
cmake_cmd = ['cmake', '-B' + arguments.builddir, '-H' + settings.PROJECT_DIR]
|
||||
|
||||
if arguments.install:
|
||||
cmake_cmd.append('-DCMAKE_INSTALL_PREFIX=%s' % arguments.install)
|
||||
|
||||
cmake_cmd.extend(build_options)
|
||||
|
||||
return subprocess.call(cmake_cmd)
|
||||
|
||||
def build_jerry(arguments):
|
||||
return subprocess.call(['make', '--no-print-directory', '-j', str(arguments.jobs), '-C', arguments.builddir])
|
||||
def make_jerry(arguments, target=None):
|
||||
make_cmd = ['make', '--no-print-directory', '-j', str(arguments.jobs), '-C', arguments.builddir]
|
||||
|
||||
if target:
|
||||
make_cmd.append(target)
|
||||
|
||||
return subprocess.call(make_cmd)
|
||||
|
||||
def print_result(ret):
|
||||
print('=' * 30)
|
||||
@@ -229,10 +240,14 @@ def print_result(ret):
|
||||
|
||||
def main():
|
||||
arguments = get_arguments()
|
||||
ret = configure_build(arguments)
|
||||
|
||||
ret = configure_jerry(arguments)
|
||||
|
||||
if not ret:
|
||||
ret = build_jerry(arguments)
|
||||
ret = make_jerry(arguments)
|
||||
|
||||
if not ret and arguments.install is not None:
|
||||
ret = make_jerry(arguments, 'install')
|
||||
|
||||
print_result(ret)
|
||||
sys.exit(ret)
|
||||
|
||||
+5
-2
@@ -206,6 +206,9 @@ def create_binary(job, options):
|
||||
build_dir_path = os.path.join(options.outdir, job.name)
|
||||
build_cmd.append('--builddir=%s' % build_dir_path)
|
||||
|
||||
install_dir_path = os.path.join(build_dir_path, 'local')
|
||||
build_cmd.append('--install=%s' % install_dir_path)
|
||||
|
||||
if options.toolchain:
|
||||
build_cmd.append('--toolchain=%s' % options.toolchain)
|
||||
|
||||
@@ -227,7 +230,7 @@ def create_binary(job, options):
|
||||
return ret, build_dir_path
|
||||
|
||||
def get_binary_path(build_dir_path):
|
||||
return os.path.join(build_dir_path, 'bin', 'jerry')
|
||||
return os.path.join(build_dir_path, 'local', 'bin', 'jerry')
|
||||
|
||||
def hash_binary(bin_path):
|
||||
blocksize = 65536
|
||||
@@ -388,7 +391,7 @@ def run_unittests(options):
|
||||
|
||||
ret_test |= run_check([
|
||||
settings.UNITTEST_RUNNER_SCRIPT,
|
||||
os.path.join(build_dir_path, 'bin'),
|
||||
os.path.join(build_dir_path, 'tests'),
|
||||
"-q" if options.quiet else "",
|
||||
])
|
||||
|
||||
|
||||
@@ -29,8 +29,8 @@ UNITTEST_OK=$DIR/unittests.passed
|
||||
|
||||
rm -f $UNITTEST_ERROR $UNITTEST_OK
|
||||
|
||||
UNITTESTS=$(ls $DIR/unit-*)
|
||||
total=$(ls $DIR/unit-* | wc -l)
|
||||
UNITTESTS=$(find $DIR -maxdepth 1 -type f -name 'unit-*')
|
||||
total=$(find $DIR -maxdepth 1 -type f -name 'unit-*' | wc -l)
|
||||
|
||||
if [ "$total" -eq 0 ]
|
||||
then
|
||||
|
||||
Reference in New Issue
Block a user