Makefile.kmk revision e64031e20c39650a7bc902a3e1aba613b9415dee
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden# Sub-Makefile for the VBox Disassembler.
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden# Copyright (C) 2006-2007 Oracle Corporation
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden# This file is part of VirtualBox Open Source Edition (OSE), as
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden# available from http://www.virtualbox.org. This file is free software;
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden# you can redistribute it and/or modify it under the terms of the GNU
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden# General Public License (GPL) as published by the Free Software
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden# Foundation, in version 2 as it comes in the "COPYING" file of the
2dd75eff92ef66e22cca286b6f4fe5a9c929af9dPhill Cunnington# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil MaddenSUB_DEPTH = ../../../..
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Maddeninclude $(KBUILD_PATH)/subheader.kmk
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Maddenifdef VBOX_WITH_TESTCASES
2dd75eff92ef66e22cca286b6f4fe5a9c929af9dPhill CunningtonPROGRAMS += tstDisasm-2
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil MaddentstDisasm-2_TEMPLATE = VBOXR3TSTEXE
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil MaddentstDisasm-2_DEFS = IN_DIS
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil MaddentstDisasm-2_SOURCES = \
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil MaddentstDisasm-2_LIBS = \
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden $(PATH_LIB)/DisasmR3$(VBOX_SUFF_LIB) \
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden $(LIB_RUNTIME)
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden# Tests that will be build, disassembled and re-build from disassembly.
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil MaddenVBOX_DISAS_TESTS_BUILD = \
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden# Tests that only contains invalid/undefined instructions.
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil MaddenVBOX_DISAS_TESTS_INVALID = \
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden# Tests that will be disassembled and re-build from disassembly (list of binaries).
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden## @todo tstBinMovzx-1.bin: does C7 imply 32-bit reg in 16-bit mode, or what exactly does it do?
# $(PATH_BIN)/testcase/tstDisasm-2$(SUFF_EXEC)
VBOX_DISAS_TEST_OUT_DIR := $(PATH_TARGET)/Disassembler/testcase
$(VBOX_DISAS_TESTS_BIN:.asm=-16.bin)\
$(VBOX_DISAS_TESTS_BIN:.asm=-32.bin)\
$(VBOX_DISAS_TESTS_BIN:.asm=-64.bin))
$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_BIN:.asm=-16.bin)): $(PATH_SUB_CURRENT)/$$(patsubst %-16.bin,%.asm,$$(notdir $$(@))) | $$(call DIRDEP,$$(@D))
$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_BIN:.asm=-32.bin)): $(PATH_SUB_CURRENT)/$$(patsubst %-32.bin,%.asm,$$(notdir $$(@))) | $$(call DIRDEP,$$(@D))
$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_BIN:.asm=-64.bin)): $(PATH_SUB_CURRENT)/$$(patsubst %-64.bin,%.asm,$$(notdir $$(@))) | $$(call DIRDEP,$$(@D))
$(VBOX_DISAS_TESTS_BUILD:.asm=-16-disas.asm)\
$(VBOX_DISAS_TESTS_BUILD:.asm=-32-disas.asm)\
$(VBOX_DISAS_TESTS_BUILD:.asm=-64-disas.asm))
$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_BUILD:.asm=-16-disas.asm)): $$(subst -disas.asm,.bin,$$@) $$(INSTARGET_tstDisasm-2) | $$(call DIRDEP,$$(@D))
$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_BUILD:.asm=-32-disas.asm)): $$(subst -disas.asm,.bin,$$@) $$(INSTARGET_tstDisasm-2) | $$(call DIRDEP,$$(@D))
$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_BUILD:.asm=-64-disas.asm)): $$(subst -disas.asm,.bin,$$@) $$(INSTARGET_tstDisasm-2) | $$(call DIRDEP,$$(@D))
$(VBOX_DISAS_TESTS_BUILD:.asm=-16-disas.bin)\
$(VBOX_DISAS_TESTS_BUILD:.asm=-32-disas.bin)\
$(VBOX_DISAS_TESTS_BUILD:.asm=-64-disas.bin))
$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_BUILD:.asm=-16-disas.bin)): $$(subst .bin,.asm,$$@) | $$(call DIRDEP,$$(@D))
$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_BUILD:.asm=-32-disas.bin)): $$(subst .bin,.asm,$$@) | $$(call DIRDEP,$$(@D))
$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_BUILD:.asm=-64-disas.bin)): $$(subst .bin,.asm,$$@) | $$(call DIRDEP,$$(@D))
VBOX_DISAS_TESTS += $(foreach test, $(VBOX_DISAS_TESTS_BUILD:.asm=), $(test)-16.tst $(test)-32.tst $(test)-64.tst)
$(VBOX_DISAS_TESTS_BUILD:.asm=-16.tst)\
$(VBOX_DISAS_TESTS_BUILD:.asm=-32.tst)\
VBOX_DISAS_TESTS += $(foreach test, $(VBOX_DISAS_TESTS_INVALID:.asm=), $(test)-16.tst $(test)-32.tst $(test)-64.tst)
$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_INVALID:.asm=-16.tst)): $$(patsubst %.tst,%.bin,$$@) $$(INSTARGET_tstDisasm-2) | $$(call DIRDEP,$$(@D))
$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_INVALID:.asm=-32.tst)): $$(patsubst %.tst,%.bin,$$@) $$(INSTARGET_tstDisasm-2) | $$(call DIRDEP,$$(@D))
$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_INVALID:.asm=-64.tst)): $$(patsubst %.tst,%.bin,$$@) $$(INSTARGET_tstDisasm-2) | $$(call DIRDEP,$$(@D))
$$(REDIRECT) -E VBOX_LOG_DEST=nofile -o $$@ -- $$(INSTARGET_tstDisasm-2) --style=yasm --cpumode=$(bits) --undef-op=db $$<
## @todo 64-bit is problematic because of bugs like POP RDI ending up as POP EDI (incorrect default opmode).
#$(foreach bits, 32 16 64, $(foreach binary, $(VBOX_DISAS_TESTS_BINARIES), $(evalvalctx def_vbox_disas_binary)))
$(foreach bits, 32 16, $(foreach binary, $(VBOX_DISAS_TESTS_BINARIES), $(evalvalctx def_vbox_disas_binary)))
include $(KBUILD_PATH)/subfooter.kmk