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"
+ };
+}