Initial stab at the new WPILib.

Change-Id: Id04cc07649959566deb5b4fa637267072a5191ca
diff --git a/third_party/allwpilib_2018/BUILD b/third_party/allwpilib_2018/BUILD
new file mode 100644
index 0000000..8254c8a
--- /dev/null
+++ b/third_party/allwpilib_2018/BUILD
@@ -0,0 +1,143 @@
+licenses(['notice'])
+
+genrule(
+  name = 'wpilib_version',
+  outs = ['shared/src/WPILibVersion.cpp'],
+  cmd = '\n'.join([
+    "cat > \"$@\" << EOF",
+    "// Autogenerated file! Do not manually edit this file.",
+    "#include \"WPILibVersion.h\"",
+    "const char* GetWPILibVersion() {",
+    "  return \"2018-frc971\";",
+    "}",
+    "EOF",
+  ]),
+)
+
+_header_dirs = [
+  'wpilibc/src/main/native/include',
+  #'wpilibc/shared/include',
+  #'wpilibc/athena/include',
+  'hal/src/main/native/include',
+  'hal/src/main/native/athena',
+  'hal/src/main/native/include/HAL/cpp',
+  #'hal/include',
+  #'hal/lib/athena',
+]
+
+# Names of WPILib "devices" I don't want to deal with making trivial updates to
+# chop out various ugliness or have to vet for sanity.
+_excluded_devices = [
+  'ADXL345_I2C',
+  'ADXL345_SPI',
+  'ADXL362',
+  'ADXRS450_Gyro',
+  'AnalogAccelerometer',
+  #'AnalogGyro',
+  'AnalogPotentiometer',
+  'CANJaguar',
+  'CANSpeedController',
+  'CANTalon',
+  'CameraServer',
+  'DoubleSolenoid',
+  'GamepadBase',
+  'GearTooth',
+  'GenericHID',
+  #'GyroBase',
+  'IterativeRobot',
+  'Jaguar',
+  'Joystick',
+  'JoystickBase',
+  #'Log',
+  #'MotorSafety',
+  #'MotorSafetyHelper',
+  'OSSerialPort',
+  #'PIDController',
+  #'PIDSource',
+  #'PWMSpeedController',
+  'Potentiometer',
+  'RobotDrive',
+  'SD540',
+  #'SafePWM',
+  #'SerialHelper',
+  #'SerialPort',
+  'Spark',
+  #'SpeedController',
+  'TalonSRX',
+  'Ultrasonic',
+  'Victor',
+  'XboxController',
+  #'visa',
+]
+
+# Whole subdirectories of WPILib we don't want around.
+_excluded_directories = [
+  #'SmartDashboard',
+  #'LiveWindow',
+  #'Commands',
+  #'Buttons',
+  #'Filters',
+  'LabView',
+  'vision',
+]
+
+# Header files we don't want to have.
+_bad_hdrs = ([
+  'wpilibc/src/main/native/include/WPILib.h',
+  'hal/src/main/native/include/HAL/LabVIEW/HAL.h',
+  #'wpilibc/**/Accelerometer.*',
+] + ['**/%s/**' % d for d in _excluded_directories] +
+ ['**/%s.*' % d for d in _excluded_devices])
+_h_hdrs = glob([d + '/**/*.h' for d in _header_dirs], exclude=_bad_hdrs)
+_hpp_hdrs = glob([d + '/**/*.hpp' for d in _header_dirs], exclude=_bad_hdrs)
+
+cc_library(
+  name = 'wpilib',
+  visibility = ['//third_party:__pkg__'],
+  srcs = glob([
+    'wpilibc/src/main/native/cpp/*.cpp',
+    'wpilibc/src/main/native/cpp/interfaces/*.cpp',
+    'wpilibc/src/main/native/cpp/LiveWindow/*.cpp',
+    'wpilibc/src/main/native/cpp/Commands/*.cpp',
+    'wpilibc/src/main/native/cpp/SmartDashboard/*.cpp',
+
+    'hal/src/main/native/athena/*.cpp',
+    'hal/src/main/native/athena/cpp/*.cpp',
+    'hal/src/main/native/athena/ctre/*.cpp',
+    'hal/src/main/native/shared/handles/*.cpp',
+    'wpilibc/src/main/native/cpp/Internal/*.cpp',
+  ], exclude = (
+    ['**/%s/**' % d for d in _excluded_directories] +
+    ['**/%s.*' % d for d in _excluded_devices] + [
+    #'wpilibc/**/Accelerometer.*',
+  ])) + [
+    ':wpilib_version',
+  ],
+  copts = [
+    '-Wno-unused-parameter',
+    '-Wno-switch-enum',
+    '-Wno-attributes',
+    '-Wno-cast-align',
+    '-Wno-cast-qual',
+    '-Wno-deprecated-declarations',
+    '-Wno-error',
+    #'-Wno-unused-const-variable',
+  ],
+  deps = [
+    '//third_party/ntcore_2018:ntcore',
+    '@allwpilib_ni_libraries_repo_2018//:ni-libraries',
+    '//aos/common/logging',
+  ],
+  hdrs = _h_hdrs + _hpp_hdrs + [
+    'wpilibc/src/main/native/include/circular_buffer.inc',
+    'wpilibc/src/main/native/include/SpeedControllerGroup.inc',
+  ],
+  includes = _header_dirs,
+  linkopts = [
+    '-lpthread',
+  ],
+  defines = [
+    'WPILIB2018=1',
+  ],
+  restricted_to = ['//tools:roborio'],
+)