Makefile.kmk revision 7748b9362d6a39df9045d5d05ccb57871145a649
c7edde5d34a970face99f956a8a47636c11c995evboxsync# $Id$
c7edde5d34a970face99f956a8a47636c11c995evboxsync## @file
c7edde5d34a970face99f956a8a47636c11c995evboxsync# Sub-Makefile for the VBox Disassembler.
c7edde5d34a970face99f956a8a47636c11c995evboxsync#
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync#
c7edde5d34a970face99f956a8a47636c11c995evboxsync# Copyright (C) 2006-2007 Sun Microsystems, Inc.
c7edde5d34a970face99f956a8a47636c11c995evboxsync#
c7edde5d34a970face99f956a8a47636c11c995evboxsync# This file is part of VirtualBox Open Source Edition (OSE), as
c7edde5d34a970face99f956a8a47636c11c995evboxsync# available from http://www.virtualbox.org. This file is free software;
c7edde5d34a970face99f956a8a47636c11c995evboxsync# you can redistribute it and/or modify it under the terms of the GNU
c7edde5d34a970face99f956a8a47636c11c995evboxsync# General Public License (GPL) as published by the Free Software
c7edde5d34a970face99f956a8a47636c11c995evboxsync# Foundation, in version 2 as it comes in the "COPYING" file of the
c7edde5d34a970face99f956a8a47636c11c995evboxsync# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
c7edde5d34a970face99f956a8a47636c11c995evboxsync# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
c7edde5d34a970face99f956a8a47636c11c995evboxsync#
c7edde5d34a970face99f956a8a47636c11c995evboxsync# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
c7edde5d34a970face99f956a8a47636c11c995evboxsync# Clara, CA 95054 USA or visit http://www.sun.com if you need
c7edde5d34a970face99f956a8a47636c11c995evboxsync# additional information or have any questions.
c7edde5d34a970face99f956a8a47636c11c995evboxsync#
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsyncDEPTH ?= ../../../..
c7edde5d34a970face99f956a8a47636c11c995evboxsyncSUB_DEPTH = ..
c7edde5d34a970face99f956a8a47636c11c995evboxsyncinclude $(KBUILD_PATH)/subheader.kmk
c7edde5d34a970face99f956a8a47636c11c995evboxsyncifdef VBOX_WITH_TESTCASES
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsyncPROGRAMS += tstDisasm-2
c7edde5d34a970face99f956a8a47636c11c995evboxsynctstDisasm-2_TEMPLATE = VBOXR3TSTEXE
c7edde5d34a970face99f956a8a47636c11c995evboxsynctstDisasm-2_DEFS = IN_DIS_R3
c7edde5d34a970face99f956a8a47636c11c995evboxsynctstDisasm-2_SOURCES = \
c7edde5d34a970face99f956a8a47636c11c995evboxsync tstDisasm-2.cpp
c7edde5d34a970face99f956a8a47636c11c995evboxsynctstDisasm-2_LIBS = \
c7edde5d34a970face99f956a8a47636c11c995evboxsync $(PATH_LIB)/DisasmR3$(VBOX_SUFF_LIB) \
c7edde5d34a970face99f956a8a47636c11c995evboxsync $(LIB_RUNTIME)
c7edde5d34a970face99f956a8a47636c11c995evboxsync
7748b9362d6a39df9045d5d05ccb57871145a649vboxsync# Tests that will be build, disassembled and re-build from disassembly.
c7edde5d34a970face99f956a8a47636c11c995evboxsyncVBOX_DISAS_TESTS_BUILD = \
c7edde5d34a970face99f956a8a47636c11c995evboxsync tstAsmLock-1.asm \
c7edde5d34a970face99f956a8a47636c11c995evboxsync
7748b9362d6a39df9045d5d05ccb57871145a649vboxsync# Tests that only contains invalid/undefined instructions.
c7edde5d34a970face99f956a8a47636c11c995evboxsyncVBOX_DISAS_TESTS_INVALID = \
c7edde5d34a970face99f956a8a47636c11c995evboxsync tstAsmLock-2.asm \
c7edde5d34a970face99f956a8a47636c11c995evboxsync tstAsmLock-3.asm
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync#
c7edde5d34a970face99f956a8a47636c11c995evboxsync# The gory bits...
c7edde5d34a970face99f956a8a47636c11c995evboxsync#
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync# Where we put the output files from the testcases.
c7edde5d34a970face99f956a8a47636c11c995evboxsyncVBOX_DISAS_TEST_PATH := $(PATH_TARGET)/disas-testcase
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync$(call DIRDEP,$(VBOX_DISAS_TEST_PATH)):
c7edde5d34a970face99f956a8a47636c11c995evboxsync $(MKDIR) -p $@
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync# Generate the rules for creating the .bin files.
c7edde5d34a970face99f956a8a47636c11c995evboxsyncVBOX_DISAS_TESTS_BIN = $(VBOX_DISAS_TESTS_BUILD) $(VBOX_DISAS_TESTS_INVALID)
4c0fd6e5274870a536dbd067370c27731bc75f4bvboxsyncVBOX_DISAS_TEST_CLEAN += $(addprefix $(VBOX_DISAS_TEST_PATH)/,\
c7edde5d34a970face99f956a8a47636c11c995evboxsync $(VBOX_DISAS_TESTS_BIN:.asm=-16.bin)\
c7edde5d34a970face99f956a8a47636c11c995evboxsync $(VBOX_DISAS_TESTS_BIN:.asm=-32.bin)\
c7edde5d34a970face99f956a8a47636c11c995evboxsync $(VBOX_DISAS_TESTS_BIN:.asm=-64.bin))
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync$(addprefix $(VBOX_DISAS_TEST_PATH)/, $(VBOX_DISAS_TESTS_BIN:.asm=-16.bin)): $(PATH_SUB_CURRENT)/$$(patsubst %-16.bin,%.asm,$$(notdir $$(@))) | $$(call DIRDEP,$$(@D))
c7edde5d34a970face99f956a8a47636c11c995evboxsync @$(ECHO) "Assembling: $(<F) into $(@F)"
4c0fd6e5274870a536dbd067370c27731bc75f4bvboxsync $(TOOL_YASM_AS) -f bin -a x86 --force-strict -DTEST_BITS=16 -o $@ $<
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync$(addprefix $(VBOX_DISAS_TEST_PATH)/, $(VBOX_DISAS_TESTS_BIN:.asm=-32.bin)): $(PATH_SUB_CURRENT)/$$(patsubst %-32.bin,%.asm,$$(notdir $$(@))) | $$(call DIRDEP,$$(@D))
c7edde5d34a970face99f956a8a47636c11c995evboxsync @$(ECHO) "Assembling: $(<F) into $(@F)"
4c0fd6e5274870a536dbd067370c27731bc75f4bvboxsync $(TOOL_YASM_AS) -f bin -a x86 --force-strict -DTEST_BITS=32 -o $@ $<
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync$(addprefix $(VBOX_DISAS_TEST_PATH)/, $(VBOX_DISAS_TESTS_BIN:.asm=-64.bin)): $(PATH_SUB_CURRENT)/$$(patsubst %-64.bin,%.asm,$$(notdir $$(@))) | $$(call DIRDEP,$$(@D))
c7edde5d34a970face99f956a8a47636c11c995evboxsync @$(ECHO) "Assembling: $(<F) into $(@F)"
4c0fd6e5274870a536dbd067370c27731bc75f4bvboxsync $(TOOL_YASM_AS) -f bin -a x86 --force-strict -DTEST_BITS=64 -o $@ $<
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync# Generate the rules for the 'build' tests.
4c0fd6e5274870a536dbd067370c27731bc75f4bvboxsyncVBOX_DISAS_TEST_CLEAN += $(addprefix $(VBOX_DISAS_TEST_PATH)/,\
c7edde5d34a970face99f956a8a47636c11c995evboxsync $(VBOX_DISAS_TESTS_BUILD:.asm=-16-disas.asm)\
c7edde5d34a970face99f956a8a47636c11c995evboxsync $(VBOX_DISAS_TESTS_BUILD:.asm=-32-disas.asm)\
c7edde5d34a970face99f956a8a47636c11c995evboxsync $(VBOX_DISAS_TESTS_BUILD:.asm=-64-disas.asm))
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync$(addprefix $(VBOX_DISAS_TEST_PATH)/, $(VBOX_DISAS_TESTS_BUILD:.asm=-16-disas.asm)): $$(subst -disas.asm,.bin,$$@) $$(INSTARGET_tstDisasm-2) | $$(call DIRDEP,$$(@D))
c7edde5d34a970face99f956a8a47636c11c995evboxsync @$(ECHO) "Generating: $(@F) from $(<F)"
c7edde5d34a970face99f956a8a47636c11c995evboxsync $(INSTARGET_tstDisasm-2) --style=yasm --cpumode=16 $< > $@
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync$(addprefix $(VBOX_DISAS_TEST_PATH)/, $(VBOX_DISAS_TESTS_BUILD:.asm=-32-disas.asm)): $$(subst -disas.asm,.bin,$$@) $$(INSTARGET_tstDisasm-2) | $$(call DIRDEP,$$(@D))
c7edde5d34a970face99f956a8a47636c11c995evboxsync @$(ECHO) "Generating: $(@F) from $(<F)"
c7edde5d34a970face99f956a8a47636c11c995evboxsync $(INSTARGET_tstDisasm-2) --style=yasm --cpumode=32 $< > $@
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync$(addprefix $(VBOX_DISAS_TEST_PATH)/, $(VBOX_DISAS_TESTS_BUILD:.asm=-64-disas.asm)): $$(subst -disas.asm,.bin,$$@) $$(INSTARGET_tstDisasm-2) | $$(call DIRDEP,$$(@D))
c7edde5d34a970face99f956a8a47636c11c995evboxsync @$(ECHO) "Generating: $(@F) from $(<F)"
c7edde5d34a970face99f956a8a47636c11c995evboxsync $(INSTARGET_tstDisasm-2) --style=yasm --cpumode=64 $< > $@
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync
4c0fd6e5274870a536dbd067370c27731bc75f4bvboxsyncVBOX_DISAS_TEST_CLEAN += $(addprefix $(VBOX_DISAS_TEST_PATH)/,\
c7edde5d34a970face99f956a8a47636c11c995evboxsync $(VBOX_DISAS_TESTS_BUILD:.asm=-16-disas.bin)\
c7edde5d34a970face99f956a8a47636c11c995evboxsync $(VBOX_DISAS_TESTS_BUILD:.asm=-32-disas.bin)\
c7edde5d34a970face99f956a8a47636c11c995evboxsync $(VBOX_DISAS_TESTS_BUILD:.asm=-64-disas.bin))
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync$(addprefix $(VBOX_DISAS_TEST_PATH)/, $(VBOX_DISAS_TESTS_BUILD:.asm=-16-disas.bin)): $$(subst .bin,.asm,$$@) | $$(call DIRDEP,$$(@D))
c7edde5d34a970face99f956a8a47636c11c995evboxsync @$(ECHO) "Re-assembling: $(<F) into $(@F)"
4c0fd6e5274870a536dbd067370c27731bc75f4bvboxsync $(TOOL_YASM_AS) -f bin -a x86 --force-strict -DTEST_BITS=16 -o $@ $<
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync$(addprefix $(VBOX_DISAS_TEST_PATH)/, $(VBOX_DISAS_TESTS_BUILD:.asm=-32-disas.bin)): $$(subst .bin,.asm,$$@) | $$(call DIRDEP,$$(@D))
c7edde5d34a970face99f956a8a47636c11c995evboxsync @$(ECHO) "Re-assembling: $(<F) into $(@F)"
4c0fd6e5274870a536dbd067370c27731bc75f4bvboxsync $(TOOL_YASM_AS) -f bin -a x86 --force-strict -DTEST_BITS=32 -o $@ $<
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync$(addprefix $(VBOX_DISAS_TEST_PATH)/, $(VBOX_DISAS_TESTS_BUILD:.asm=-64-disas.bin)): $$(subst .bin,.asm,$$@) | $$(call DIRDEP,$$(@D))
c7edde5d34a970face99f956a8a47636c11c995evboxsync @$(ECHO) "Re-assembling: $(<F) into $(@F)"
4c0fd6e5274870a536dbd067370c27731bc75f4bvboxsync $(TOOL_YASM_AS) -f bin -a x86 --force-strict -DTEST_BITS=64 -o $@ $<
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsyncVBOX_DISAS_TESTS += $(foreach test, $(VBOX_DISAS_TESTS_BUILD:.asm=), $(test)-16.tst $(test)-32.tst $(test)-64.tst)
c7edde5d34a970face99f956a8a47636c11c995evboxsync$(addprefix $(VBOX_DISAS_TEST_PATH)/,\
c7edde5d34a970face99f956a8a47636c11c995evboxsync$(VBOX_DISAS_TESTS_BUILD:.asm=-16.tst)\
c7edde5d34a970face99f956a8a47636c11c995evboxsync$(VBOX_DISAS_TESTS_BUILD:.asm=-32.tst)\
c7edde5d34a970face99f956a8a47636c11c995evboxsync$(VBOX_DISAS_TESTS_BUILD:.asm=-64.tst) ): $$(subst .tst,-disas.bin,$$@) | $$(call DIRDEP,$$(@D))
c7edde5d34a970face99f956a8a47636c11c995evboxsync @$(ECHO) "Verifying build: $(<F) and $(@F:.tst=.bin)"
c7edde5d34a970face99f956a8a47636c11c995evboxsync @$(RM) -f $@
c7edde5d34a970face99f956a8a47636c11c995evboxsync $(CMP) $(@:.tst=.bin) $<
c7edde5d34a970face99f956a8a47636c11c995evboxsync @$(APPEND) $@ "done"
7748b9362d6a39df9045d5d05ccb57871145a649vboxsync @$(ECHO) "PASSED: $(<F) [re-assembled]"
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync# Generate the rules for the 'invalid' tests.
c7edde5d34a970face99f956a8a47636c11c995evboxsyncVBOX_DISAS_TESTS += $(foreach test, $(VBOX_DISAS_TESTS_INVALID:.asm=), $(test)-16.tst $(test)-32.tst $(test)-64.tst)
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync$(addprefix $(VBOX_DISAS_TEST_PATH)/, $(VBOX_DISAS_TESTS_INVALID:.asm=-16.tst)): $$(patsubst %.tst,%.bin,$$@) $$(INSTARGET_tstDisasm-2) | $$(call DIRDEP,$$(@D))
7748b9362d6a39df9045d5d05ccb57871145a649vboxsync @$(ECHO) "TESTING: $(@F) [--undef-op=all]"
c7edde5d34a970face99f956a8a47636c11c995evboxsync @$(RM) -f $@
7748b9362d6a39df9045d5d05ccb57871145a649vboxsync $(INSTARGET_tstDisasm-2) --undef-op=all --cpumode=16 $<
c7edde5d34a970face99f956a8a47636c11c995evboxsync @$(APPEND) $@ "done"
7748b9362d6a39df9045d5d05ccb57871145a649vboxsync @$(ECHO) "PASSED: $(@F) [--undef-op=all]"
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync$(addprefix $(VBOX_DISAS_TEST_PATH)/, $(VBOX_DISAS_TESTS_INVALID:.asm=-32.tst)): $$(patsubst %.tst,%.bin,$$@) $$(INSTARGET_tstDisasm-2) | $$(call DIRDEP,$$(@D))
7748b9362d6a39df9045d5d05ccb57871145a649vboxsync @$(ECHO) "TESTING: $(@F) [--undef-op=all]"
c7edde5d34a970face99f956a8a47636c11c995evboxsync @$(RM) -f $@
7748b9362d6a39df9045d5d05ccb57871145a649vboxsync $(INSTARGET_tstDisasm-2) --undef-op=all --cpumode=32 $<
c7edde5d34a970face99f956a8a47636c11c995evboxsync @$(APPEND) $@ "done"
7748b9362d6a39df9045d5d05ccb57871145a649vboxsync @$(ECHO) "PASSED: $(@F) [--undef-op=all]"
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync$(addprefix $(VBOX_DISAS_TEST_PATH)/, $(VBOX_DISAS_TESTS_INVALID:.asm=-64.tst)): $$(patsubst %.tst,%.bin,$$@) $$(INSTARGET_tstDisasm-2) | $$(call DIRDEP,$$(@D))
7748b9362d6a39df9045d5d05ccb57871145a649vboxsync @$(ECHO) "TESTING: $(@F) [--undef-op=all]"
c7edde5d34a970face99f956a8a47636c11c995evboxsync @$(RM) -f $@
7748b9362d6a39df9045d5d05ccb57871145a649vboxsync $(INSTARGET_tstDisasm-2) --undef-op=all --cpumode=64 $<
c7edde5d34a970face99f956a8a47636c11c995evboxsync @$(APPEND) $@ "done"
7748b9362d6a39df9045d5d05ccb57871145a649vboxsync @$(ECHO) "PASSED: $(@F) [--undef-op=all]"
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync# Add the .tst to the clean up.
d4fc85c3ee5e6be624f59217c7e677187f4ed1c1vboxsyncVBOX_DISAS_TEST_CLEAN += $(addprefix $(VBOX_DISAS_TEST_PATH)/, $(VBOX_DISAS_TESTS))
4c0fd6e5274870a536dbd067370c27731bc75f4bvboxsyncOTHER_CLEAN += $(VBOX_DISAS_TEST_CLEAN)
4c0fd6e5274870a536dbd067370c27731bc75f4bvboxsync
d4fc85c3ee5e6be624f59217c7e677187f4ed1c1vboxsync# We don't want any of the tests rules to run in parallel because the
d4fc85c3ee5e6be624f59217c7e677187f4ed1c1vboxsync# output will be difficult to follow. Abusing VBOX_DISAS_TEST_CLEAN here...
4c0fd6e5274870a536dbd067370c27731bc75f4bvboxsync.NOTPARALLEL: $(VBOX_DISAS_TEST_CLEAN)
d4fc85c3ee5e6be624f59217c7e677187f4ed1c1vboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync#
c7edde5d34a970face99f956a8a47636c11c995evboxsync# The test aliases
c7edde5d34a970face99f956a8a47636c11c995evboxsync#
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync# the standard ones for running all.
c7edde5d34a970face99f956a8a47636c11c995evboxsync.PHONY: check test
c7edde5d34a970face99f956a8a47636c11c995evboxsynccheck test: $(addprefix $(VBOX_DISAS_TEST_PATH)/,$(VBOX_DISAS_TESTS))
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsync# individual test and per source file (for the editor).
c7edde5d34a970face99f956a8a47636c11c995evboxsync$(VBOX_DISAS_TESTS:.tst=.o):: $(VBOX_DISAS_TEST_PATH)/$$(patsubst %.o,%.tst,$$@)
c7edde5d34a970face99f956a8a47636c11c995evboxsync$(VBOX_DISAS_TESTS:.tst=.obj):: $$(patsubst %.obj,%.o,$$@)
c7edde5d34a970face99f956a8a47636c11c995evboxsyncdefine def_vbox_test_aliases
c7edde5d34a970face99f956a8a47636c11c995evboxsynclocal test_base := $(basename $(test))
c7edde5d34a970face99f956a8a47636c11c995evboxsynclocal test_root := $(patsubst %-16,%,$(patsubst %-32,%,$(patsubst %-64,%,$(test_base))))
c7edde5d34a970face99f956a8a47636c11c995evboxsync$(test_base).o:: $(VBOX_DISAS_TEST_PATH)/$(test)
c7edde5d34a970face99f956a8a47636c11c995evboxsync$(test_base).obj:: $(VBOX_DISAS_TEST_PATH)/$(test)
c7edde5d34a970face99f956a8a47636c11c995evboxsync$(test_root).o:: $(test_base).o
c7edde5d34a970face99f956a8a47636c11c995evboxsync$(test_root).obj:: $(test_base).obj
c7edde5d34a970face99f956a8a47636c11c995evboxsyncendef
c7edde5d34a970face99f956a8a47636c11c995evboxsync$(foreach test,$(VBOX_DISAS_TESTS),$(evalvalctx def_vbox_test_aliases))
c7edde5d34a970face99f956a8a47636c11c995evboxsync
c7edde5d34a970face99f956a8a47636c11c995evboxsyncendif # VBOX_WITH_TESTCASES
c7edde5d34a970face99f956a8a47636c11c995evboxsyncinclude $(KBUILD_PATH)/subfooter.kmk
c7edde5d34a970face99f956a8a47636c11c995evboxsync