diff --git a/src/arm/targets/CortexM3.h b/src/arm/targets/CortexM3.h
new file mode 100644
index 0000000..726b416
--- /dev/null
+++ b/src/arm/targets/CortexM3.h
@@ -0,0 +1,100 @@
+/*
+ *  ======== CortexM3.h ========
+ *  DO NOT MODIFY: This header is generated from stddef.xdt
+ *
+ *  This header contains target-specific definitions of target-independent
+ *  macros required by the ITarget interface.  These definitions allow C/C++
+ *  sources to portably compile for multiple targets (using #ifdef ...).
+ */
+#ifndef xdc_target_macros_include__
+#define xdc_target_macros_include__    1
+
+/*
+ *  ======== arm_targets_CortexM3 ========
+ *  This macro identifies the specific target being used.  This macro should
+ *  probably be avoided in portable sources.
+ */
+#define arm_targets_CortexM3  1
+
+/*
+ *  ======== xdc_target__isaCompatible_* macros ========
+ *  The following definitions enable clients to conditionally compile for any
+ *  compatible subset of the actual target ISA.
+ */
+#define xdc_target__isaCompatible_v7M  1
+
+/*
+ *  ======== xdc_target__isa_v7M ========
+ *  This macro identifies the specific target ISA for which we are being
+ *  compiled.
+ */
+#define xdc_target__isa_v7M  1
+
+/*
+ *  ======== xdc_target__{big|little}Endian ========
+ *  The following macro enables clients to portably compile for big or little
+ *  endian targets.
+ */
+#define xdc_target__littleEndian   1
+
+/*
+ *  ======== xdc_target__os_undefined ========
+ *  The following macro enables clients to portably compile for target specific
+ *  OS; e.g., Linux, Solaris, Windows, undefined.
+ */
+#define xdc_target__os_undefined    1
+
+/*
+ *  ======== xdc_target__sizeof_ ========
+ *  The following macros enable clients to portably determine type sizes
+ *  within #ifdef blocks; sizeof() can't be used and the definitions in
+ *  stdint.h are not available to C++ clients (unless the special macro
+ *  __STDC_LIMIT_MACROS is defined).
+ */
+#define  xdc_target__sizeof_IArg 4
+#define  xdc_target__sizeof_Char 1
+#define  xdc_target__sizeof_Double 8
+#define  xdc_target__sizeof_Float 4
+#define  xdc_target__sizeof_Fxn 4
+#define  xdc_target__sizeof_Int 4
+#define  xdc_target__sizeof_Int8 1
+#define  xdc_target__sizeof_Int16 2
+#define  xdc_target__sizeof_Int32 4
+#define  xdc_target__sizeof_Int64 8
+#define  xdc_target__sizeof_Long 4
+#define  xdc_target__sizeof_LDouble 8
+#define  xdc_target__sizeof_LLong 8
+#define  xdc_target__sizeof_Ptr 4
+#define  xdc_target__sizeof_Short 2
+
+/*
+ *  ======== xdc_target__alignof_ ========
+ *  The following macros enable clients to portably determine type alignment
+ *  within #ifdef blocks; even if provided by the compiler, alignof() can't
+ *  be used in pre-processor statements.
+ */
+#define  xdc_target__alignof_IArg 4
+#define  xdc_target__alignof_Char 1
+#define  xdc_target__alignof_Double 8
+#define  xdc_target__alignof_Float 4
+#define  xdc_target__alignof_Fxn 4
+#define  xdc_target__alignof_Int 4
+#define  xdc_target__alignof_Int8 1
+#define  xdc_target__alignof_Int16 2
+#define  xdc_target__alignof_Int32 4
+#define  xdc_target__alignof_Int64 4
+#define  xdc_target__alignof_Long 4
+#define  xdc_target__alignof_LDouble 8
+#define  xdc_target__alignof_LLong 8
+#define  xdc_target__alignof_Ptr 4
+#define  xdc_target__alignof_Short 2
+
+/*
+ *  ======== xdc_target__bitsPerChar ========
+ *  The number of bits in a char.  This macro allow one to determine the
+ *  precise number of bits in any of the standard types (whose sizes are
+ *  expressed as a number of chars).
+ */
+#define  xdc_target__bitsPerChar 8
+
+#endif  /* end multi-include guard */
diff --git a/src/arm/targets/CortexM3.xdc b/src/arm/targets/CortexM3.xdc
new file mode 100644
index 0000000..41a3d7b
--- /dev/null
+++ b/src/arm/targets/CortexM3.xdc
@@ -0,0 +1,54 @@
+/*!
+ *  ======== CortexM3 ========
+ *  Experimental Cortex M3 target
+ */
+metaonly module CortexM3 inherits ITarget
+{
+    override readonly config string name    = "CortexM3";
+
+    override readonly config string suffix  = "em3";
+
+    override readonly config string isa     = "v7M";
+
+    override readonly config xdc.bld.ITarget.Model model= {
+	endian: "little"
+    };
+
+    /*
+     *  The command used to compile C/C++ source files into object files
+     *  @p(dlist)
+     *      - `--depend`
+     *          this option is required to generate header file dependencies.
+     *          It can be removed but source files will not be remade when
+     *          headers change.
+     *
+     *      - `--depend-format=unix`
+     *          this option ensures that '/' is used even on Windows hosts
+     *          since '/' is a legit directory specifier this should result
+     *          in more portable dependencies.
+     *
+     *      - `--littleend`
+     *          force little endian compile implied by this target
+     *
+     *      - `--cpu=Cortex-M3`
+     *          Specify architecture.
+     */
+    override readonly config arm.targets.ITarget.Command cc = {
+        cmd: "$(rootDir)/Programs/$(VERS)/$(TARG)/armcc",
+        opts: "-c --depend=$@.dep --depend-format=unix --littleend --cpu=Cortex-M3"
+    };
+
+    /*
+     *  The command used to assemble assembly source files into object files
+     *  @p(dlist)
+     *      - `--littleend`
+     *          force little endian compile implied by this target
+     *
+     *      - `--cpu=Cortex-M3`
+     *          Specify architecture.
+     */
+    override readonly config arm.targets.ITarget.Command asm = {
+        cmd: "$(rootDir)/Programs/$(VERS)/$(TARG)/armasm",
+        opts: "--littleend --cpu=Cortex-M3"
+    };
+}